赞
踩
灰度世界算法(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]内。实践阵营这种方式会使图像整体偏暗,建议用第一种。
- import cv2
- import numpy as np
-
- def GW(orgImg):
- B, G, R = np.double(orgImg[:, :, 0]), np.double(orgImg[:, :, 1]), np.double(orgImg[:, :, 2])
- B_ave, G_ave, R_ave = np.mean(B),np.mean(G),np.mean(R)
- K = (B_ave + G_ave + R_ave) / 3
- Kb,Kg,Kr = K/B_ave,K/G_ave,K/R_ave
- Ba = (B * Kb)
- Ga = (G * Kg)
- Ra = (R * Kr)
- print(np.mean(Ba),np.mean(Ga),np.mean(Ra))
- dst_img = np.uint8(np.zeros_like(orgImg))
- dst_img[:, :, 0] = Ba
- dst_img[:, :, 1] = Ga
- dst_img[:, :, 2] = Ra
- cv2.imshow("dstimg", dst_img)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
-
- if __name__ == '__main__':
- orgImg = cv2.imread("/Users/mac/Desktop/Test/13.jpeg")
- cv2.imshow("orgImg",orgImg)
- cv2.waitKey(0)
- GW(orgImg)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。