当前位置:   article > 正文

灰度世界算法

灰度世界算法

灰度世界算法(Gray World)是以灰度世界假设为基础的,该假设认为对于一幅有着大量色彩变化的图像, R、 G、 B 三个分量的平均值趋于同一个灰度K。一般有两种方法来确定该灰度。灰度世界算法(Gray World)是以灰度世界假设为基础的,该假设认为对于一幅有着大量色彩变化的图像, R、 G、 B 三个分量的平均值趋于同一个灰度K 算法的第二步是分别计算各通道的增益:

Raver、Gaver和Baver分别是三通道平均值

K=Gray 同一灰度

三通道增益系数:Kr=K/Raver;Kg=K/Gaver;Kb=K/Baver

算法第三步,根据Von Kries对角模型,对于图像像素中的每个像素C,调整其RGB分量:

Rnew=R x Kr; Gnew=G x Kg; Bnew= B x Kb

对于上式,可能会存在溢出(>255,不会出现小于0)的现象,处理方法有两种:

a.直接将像素设置为255,这可能会造成图像整体偏白

b.计算所有Rnew、Gnew、Bnew的最大值,然后利用该最大值将计算后数据重新线性映射到[0,255]内。实践阵营这种方式会使图像整体偏暗,建议用第一种。


  1. import cv2
  2. import numpy as np
  3. def GW(orgImg):
  4. B, G, R = np.double(orgImg[:, :, 0]), np.double(orgImg[:, :, 1]), np.double(orgImg[:, :, 2])
  5. B_ave, G_ave, R_ave = np.mean(B),np.mean(G),np.mean(R)
  6. K = (B_ave + G_ave + R_ave) / 3
  7. Kb,Kg,Kr = K/B_ave,K/G_ave,K/R_ave
  8. Ba = (B * Kb)
  9. Ga = (G * Kg)
  10. Ra = (R * Kr)
  11. print(np.mean(Ba),np.mean(Ga),np.mean(Ra))
  12. dst_img = np.uint8(np.zeros_like(orgImg))
  13. dst_img[:, :, 0] = Ba
  14. dst_img[:, :, 1] = Ga
  15. dst_img[:, :, 2] = Ra
  16. cv2.imshow("dstimg", dst_img)
  17. cv2.waitKey(0)
  18. cv2.destroyAllWindows()
  19. if __name__ == '__main__':
  20. orgImg = cv2.imread("/Users/mac/Desktop/Test/13.jpeg")
  21. cv2.imshow("orgImg",orgImg)
  22. cv2.waitKey(0)
  23. GW(orgImg)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/287458
推荐阅读
相关标签
  

闽ICP备14008679号