灰度世界算法
灰度世界算法(Gray World)是以灰度世界假设为基础的,该假设认为对于一幅有着大量色彩变化的图像, R、 G、 B 三个分量的平均值趋于同一个灰度K。一般有两种方法来确定该灰度。灰度世界算法(Gray World)是以灰度世界假设为基础的,该假设认为对于一幅有着大量色彩变化的图像, R、 G、 B 三个分量的平均值趋于同一个灰度K 算法的第二步是分别计算各通道的增益:Raver、Gaver和
灰度世界算法(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)
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)