Data Standardization——灰度世界算法(Gray World Algorithm)+ python实现

Gray World算法假设,对于一张色彩丰富的图像,R、G、B三个通道的像素均值趋于一个同一个灰度值 ϕ \phi ϕ。从物理意义上讲,灰色世界法假设自然界景物对于光线的平均反射的均值在总体上是个定值,这个定值近似地为“灰色”。颜色平衡算法将这一假设强制应用于待处理图像,可以从图像中消除环境光的影响,获得原始场景图像。

算法步骤:

  1. 计算 ϕ \phi ϕ
    ϕ = R ˉ + G ˉ + B ˉ 3 \phi=\frac{ \bar{R} + \bar{G} +\bar{B}}{3} ϕ=3Rˉ+Gˉ+Bˉ
    其中, R ˉ \bar{R} Rˉ, G ˉ \bar{G} Gˉ, B ˉ \bar{B} Bˉ分别为R、G、B三波段的均值。
  2. 计算R、G、B三波段的增益系数:
    k r = ϕ R ˉ k_r=\frac{\phi}{\bar{R}} kr=Rˉϕ
    k g = ϕ G ˉ k_g=\frac{\phi}{\bar{G}} kg=Gˉϕ
    k b = ϕ B ˉ k_b=\frac{\phi}{\bar{B}} kb=Bˉϕ
  3. 根据Von Kries对角模型,对于图像中的每个像素C,分别计算R、G、B三个波段的值:
    C ( R ′ ) = C ( R ) × k r C(R^{'})=C(R) \times k_r C(R)=C(R)×kr
    C ( G ′ ) = C ( G ) × k g C(G^{'})=C(G) \times k_g C(G)=C(G)×kg
    C ( B ′ ) = C ( R ) × k b C(B^{'})=C(R) \times k_b C(B)=C(R)×kb

Python实现

import numpy as np
import cv2
 
image = cv2.imread('图片路径')
b,g,r = cv2.split(image)
b_avg = cv2.mean(b)[0]
g_avg = cv2.mean(g)[0]
r_avg = cv2.mean(r)[0]

avg = (b_avg+g_avg+r_avg)/3
b_k = avg/b_avg
g_k = avg/g_avg
r_k = avg/r_avg
 
b = (b*b_k).clip(0,255)
g = (g*g_k).clip(0,255)
r = (r*r_k).clip(0,255)
 
image = cv2.merge([b,g,r]).astype(np.uint8)

cv2.imshow('gray_world',image)
cv2.waitKey(0)

实验效果

用遥感影像实验了一下

原图:
请添加图片描述
Gray World后:
请添加图片描述
原图:
请添加图片描述
Gray World后:
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拖延癌晚期患者7777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值