完美反射法--白平衡算法

一、完美反射法概述

1.完美反射法的别名为white-patch白斑法,也成为白点法,也成为Max-RGB法

2.完美反射法有三个名字:white-patch法,完美反射法/白点法,Max-RGB法,其实都是一个算法的三种叫法

3.涉及到Retinex理论,图像形成模型,理想反射体假设,光源估计,Von Kries校正

4.底层数学原理和物理假设

5.完美反射体,朗伯体,反射率,光源光谱,传感器响应。

6.完美反射法基于"场景中存在一个完美反射面(镜面或白点),其反射率在所有波长上为1"

7.完美反射法本质是寻找场景中反射率最大的像素,将其颜色视为光源颜色,通过通道增益实现白平衡。

8.完美反射法(Perfect Reflector / White Patch / Max-RGB)是同一算法的不同名称

9.底层原理建立在 Retinex 理论和理想反射体假设上

10.灰度世界是平均反射率假设,完美反射法是最大反射率假设,二者是 Shades-of-Gray 的两个极端(p=∞ 和 p=1)。

二、完美反射法分析

1.完美反射法要求场景中存在一个对所有波长都完全反射的理想白点,这个点反射了光源的全部颜色,因此它的RGB值就是光源的颜色;

2.白色 & 黑色

白色物体对可见光几乎全部反射,所以看起来是白色。

黑色物体则几乎吸收所有可见光,所以看起来是黑色。

实际衣服不是"绝对白",会吸收少量光,但反射比例远大于吸收。

三、计算方法

Target_gray的三种方式

方式一:Target_gray = Max(R,G,B)

方式二:Target_gray = 255,针对8bit深度的图像

方式三:Target_gray = G_max

伪代码:

function PerfectReflector(I, percentile=99.9, T_mode='max'):

I_float = float(I)

L_R = percentile(I_float:,:,0, percentile)

L_G = percentile(I_float:,:,1, percentile)

L_B = percentile(I_float:,:,2, percentile)

if T_mode == 'max':

T = max(L_R, L_G, L_B)

elif T_mode == '255':

T = 255

elif T_mode == 'green':

T = L_G

g_R = T / L_R

g_G = T / L_G

g_B = T / L_B

out:,:,0 = I_float:,:,0 * g_R

out:,:,1 = I_float:,:,1 * g_G

out:,:,2 = I_float:,:,2 * g_B

out = clip(out, 0, 255)

return uint8(out)

四、完美反射法的有效区间和局限性

1.完美反射法的依赖条件或者假设条件

场景中又白色物体,这种算法效果才好;

如果场景不存在白色物体,或者没有反射率接近1的像素,最大值只能反映最亮物体的颜色,会低估光源强度,导致校正不足。

2.不同通道的最大值来自不同物体,这个会造成颜色校正错误

例如红色物体在 R 通道最大,蓝色物体在 B 通道最大,导致光源估计颜色错误。

3.噪声与坏点:单个噪声像素可能成为最大值,产生严重色偏。

噪声和坏点会影响完美反射法,会导致算法失效。

4.过曝饱和:如果完美反射体过曝,像素值被截断,无法反映真实光源强度。

5.大面积单色场景:如红色墙壁,R 通道最大值远大于其他通道,导致严重偏色。

6.多光源场景:不同区域光源不同,全局最大值无法代表局部光源。

五、算法改进

1.高百分位完美反射法:用 99% 或 99.9% 分位数代替最大值,抑制噪声和坏点。

2.块状完美反射法:将图像分块,每块取最大值,再对这些值取中位数或投票,得到更稳健的光源估计。

3.阈值完美反射法:只考虑亮度高于某阈值的像素,在这些像素中计算通道平均值作为光源估计。

4.对数域完美反射法:在 log 域计算,结果与直接取最大值等价,但便于结合其他 Retinex 方法。

5.多尺度完美反射法:结合不同尺度下的白点估计,提高对复杂场景的适应性。

6.与灰度世界混合:根据场景内容动态选择完美反射法或灰度世界。例如当图像中存在明显白色区域时使用完美反射法。

相关推荐
学编程就要猛4 小时前
RAG(Retrieval Augmented Generation)
人工智能·spring ai
冬奇Lab5 小时前
一天一个开源项目(第259篇):Modern Web Guidance —— Chrome 团队给 AI 编码 Agent 的「现代 Web 最佳实践」外挂
人工智能·开源
小雉系统5 小时前
BcoreOS安全通信架构:FsSession 抗算法后门安全设计
算法·安全·架构
飞哥数智坊6 小时前
打造自己的 Personal Agent,从抄大肥鱼作业开始
人工智能·deepseek
对你无可奈何6 小时前
Magpie 实战:把 WorkBuddy、Qoder 的订阅模型接进一个本地池子
人工智能
Csvn7 小时前
每请求到底多少钱?把 Token 成本算成可观测指标(C01)
人工智能·aigc·agent
吴名氏.7 小时前
Java转AI Agent教程(第十三周)混合检索与重排
java·数据库·人工智能·ai·ai agent
老金带你玩AI8 小时前
惊人的一致性!Seedream 5.5实测!
人工智能
数据技术说9 小时前
在 KES AI 数据库上搭一条 NL2SQL 链路:语义、召回、权限各放哪
人工智能·sql·代码规范