使用三种不同的照明算法估计场景的照明和执行白平衡

简介: 使用三种不同的照明算法估计场景的照明和执行白平衡。眼睛非常善于判断不同照明条件下的白色。然而,数码相机如果不进行某种调整,就可以很容易地捕捉到具有强烈色偏的不真实图像。自动白平衡(AWB)算法试图以最少的用户输入来校正环境光,以便生成的图像看起来像我们眼睛看到的。

一、前言
此示例演示如何使用三种不同的照明算法估计场景的照明和执行白平衡。
眼睛非常善于判断不同照明条件下的白色。然而,数码相机如果不进行某种调整,就可以很容易地捕捉到具有强烈色偏的不真实图像。自动白平衡(AWB)算法试图以最少的用户输入来校正环境光,以便生成的图像看起来像我们眼睛看到的。
自动白平衡分两步完成:有几种不同的算法来估计场景光源。
每种算法的性能取决于场景、照明和成像条件。本示例通过将一个特定图像的三种算法与使用 控制图计算的地面真实场景光源进行比较来判断这些算法的质量。
二、读取和预处理原始相机数据
AWB算法通常在经过最少量的预处理后,在图像被压缩并保存到存储卡之前应用于原始图像数据。
将 16 位原始映像读入工作区。是一个图像文件,其中包含校正黑电平并将强度缩放到每像素 16 位后的原始传感器数据。此图像没有相机完成的白平衡以及其他预处理操作,例如去马赛克、去噪、色差补偿、色调调整和伽马校正。
2.1 插值以恢复丢失的颜色信息
数码相机使用叠加在成像传感器上的滤色阵列来模拟色觉,因此每个像素对红色、绿色或蓝色都很敏感。
2.2 用于检测和显示的伽马校正图像
图像包含线性 RGB 值。线性 RGB 值适用于估计场景光源和校正图像的色彩平衡。但是,如果您尝试显示线性RGB图像,由于显示设备的非线性特性,它将显得非常暗淡。显示伽马校正前后的去马赛克图像。
1.png

三、使用颜色检查器图表测量真实光源
使用场景中包含的颜色检查器控制图计算实际值光源。该图表由 24 个具有已知光谱反射率的中性和色块组成。

使用颜色检查器函数检测伽玛校正图像中的图表。线性 RGB 图像太暗,无法自动检测图表。确认正确检测到图表。
2.png

获取图表四个角的注册点的坐标。从线性 RGB 数据创建新对象。使用注册点的坐标指定图表的位置。测量线性 RGB 数据的地面真实光源。

四、创建颜色检查器图表的蒙版
测试 AWB 算法时,请通过屏蔽图表来防止算法不公平地利用图表。使用绘制多边形函数在图表上创建多边形 ROI。将多边形的顶点指定为注册点。
3.png

将多边形 ROI 转换为二进制掩码。反转蒙版。图表中的像素将从蒙版中排除,场景其余部分的像素包含在蒙版中。要确认蒙版的准确性,请在图像上显示蒙版。蒙版中包含的像素具有蓝色色调。
4.png

五、角度误差
您可以将光源视为 3-D RGB 色彩空间中的矢量。估计光源的大小与其方向无关紧要,因为光源的方向是用于白平衡图像的方向。
要评估估计光源的质量,请计算估计光源与实际值之间的角度误差。角度误差是由两个向量形成的角度(以度为单位)。角度误差越小,估计越好。
为了更好地理解角度误差的概念,请考虑以下任意光源的可视化和使用 ColorChecker 控制图测量的地面实况。帮助程序函数在 3-D RGB 颜色空间中绘制光源的单位矢量,并在示例末尾定义。
5.png

六、白色斑块视网膜
用于光源估计的白色斑块 Retinex 算法假定场景包含明亮的消色差斑块。此色块反射每个色带可能的最大光线,即场景光源的颜色。使用“亮白”函数通过白斑 Retinex 算法估计照明。
6.1 包括所有场景像素
使用场景中的所有像素估计光源。使用名称-值对参数从场景中排除颜色检查器图表。

计算使用白色斑块 Retinex 估计的光源的角度误差。使用色度调整功能对图像进行白平衡。指定估计光源,并指示颜色值位于线性 RGB 颜色空间中。
显示伽玛校正的白平衡图像。
6.png

6.2 排除最亮像素
当像素曝光过度时,白色斑块 Retinex 算法表现不佳。若要提高算法的性能,请排除最亮像素的前 1%。计算估计光源的角度误差。误差小于使用所有像素估计光源时。使用估计光源在线性 RGB 色彩空间中对图像进行白平衡。使用新光源显示伽玛校正的白平衡图像。
7.png

七、灰色世界
用于光源估计的灰色世界算法假定世界的平均颜色为灰色或消色差。因此,它将场景光源计算为图像中的平均RGB值。使用照明灰度函数通过灰色世界算法估计照明。

7.1 包括所有场景像素
首先,使用图像的所有像素(不包括与颜色检查器控制图对应的像素)估计场景光源。该函数提供了一个参数,用于指定要排除的底部和顶部值(按亮度排序)的百分位数。在这里,将百分位数指定为 0。

计算估计光源与地面实况光源之间的角度误差。使用估计光源在线性 RGB 色彩空间中对图像进行白平衡。显示伽玛校正的白平衡图像。
8.png

7.3 排除最亮和最暗的像素
当像素曝光不足或曝光过度时,灰色世界算法表现不佳。若要提高算法的性能,请排除最暗和最亮像素的前 1%。计算估计光源的角度误差。误差小于使用所有像素估计光源时。使用估计光源在线性 RGB 色彩空间中对图像进行白平衡。使用新光源显示伽玛校正的白平衡图像。
9.png

八、程氏主成分分析(PCA)方法
Cheng的光源估计方法从空间域方法中汲取灵感,该方法假设图像的梯度是消色差的。他们表明,可以通过打乱图像块人为地引入强渐变来改善灰边,并得出结论,最强的渐变遵循光源的方向。他们的方法包括根据像素沿平均图像颜色方向的投影规范对像素进行排序,并保留底部和顶部百分位数。这两组对应于图像中的强渐变。最后,他们对保留的像素执行主成分分析(PCA),并将第一个分量作为估计光源返回。

8.1 包括默认的底部和顶部 3.5% 的像素
首先,使用 Cheng PCA 方法的默认百分比值估计光源,不包括与颜色检查器控制图对应的光源。计算估计光源与地面实况光源之间的角度误差。使用估计光源在线性 RGB 色彩空间中对图像进行白平衡。显示伽玛校正的白平衡图像。

10.png

8.2 包括底部和顶部 5% 的像素
现在,使用沿平均颜色方向的底部和顶部 5% 像素估计场景光源。函数的第二个参数指定要排除的底部和顶部值(按亮度排序)的百分位数.

计算估计光源与地面实况光源之间的角度误差。该误差小于使用默认百分比估算光源时。使用估计光源在线性 RGB 色彩空间中对图像进行白平衡。显示伽玛校正的白平衡图像。
11.png

九、查找最佳参数
要找到用于每种算法的最佳参数,您可以扫描一个范围并计算每种算法的角度误差。三种算法的参数具有不同的含义,但这些参数的相似范围使得以编程方式搜索每种算法的最佳参数变得容易。

使用热图功能显示角度误差的热图。深蓝色表示角度误差低,而黄色表示角度误差高。最优参数的角度误差最小。
12.png

找到每种算法的最佳参数。显示 RGB 色彩空间中每个最佳光源的角度误差。
13.png

使用最佳光源计算每种算法的最佳白平衡图像。在蒙太奇中为每个算法显示最佳白平衡图像。
14.png

目录
相关文章
|
20天前
|
存储 算法 安全
SM2算法的应用场景有哪些?
【10月更文挑战第5天】SM2算法的应用场景有哪些?
36 1
|
6天前
|
监控 算法 数据挖掘
HyperLogLog算法有哪些应用场景呢
【10月更文挑战第19天】HyperLogLog算法有哪些应用场景呢
8 0
|
2月前
|
算法 计算机视觉 Python
Python并查集大揭秘:让你在算法界呼风唤雨,秒杀一切复杂场景!
在编程与算法的广袤天地中,总有一些工具如同神兵利器,能够助你一臂之力,在复杂的问题前游刃有余。今天,我们就来深入探讨这样一件神器——Python并查集(Union-Find),看看它是如何让你在算法界呼风唤雨,轻松应对各种复杂场景的。
58 2
|
2月前
|
算法 调度
贪心算法基本概念与应用场景
尽管贪心算法在许多问题中都非常有效,但它并不总是会产生最优解。因此,在应用贪心算法前,重要的是先分析问题是否适合采用贪心策略。一些问题可能需要通过动态规划或回溯等其他算法来解决,以找到确切的全局最优解。
78 1
|
22天前
|
机器学习/深度学习 自然语言处理 算法
神经网络算法以及应用场景和基本语法
神经网络算法以及应用场景和基本语法
30 0
WK
|
2月前
|
机器学习/深度学习 算法 数据挖掘
PSO算法的应用场景有哪些
粒子群优化算法(PSO)因其实现简单、高效灵活,在众多领域广泛应用。其主要场景包括:神经网络训练、工程设计、电力系统经济调度与配电网络重构、数据挖掘中的聚类与分类、控制工程中的参数整定、机器人路径规划、图像处理、生物信息学及物流配送和交通管理等。PSO能处理复杂优化问题,快速找到全局最优解或近似解,展现出强大的应用潜力。
WK
73 1
|
3月前
|
存储 SQL 算法
B端算法实践问题之Blink在实时业务场景下的优势如何解决
B端算法实践问题之Blink在实时业务场景下的优势如何解决
40 1
|
3月前
|
算法
支付宝商业化广告算法问题之在广告场景中,随着业务的发展,面临了哪些阶段的挑战,如何解决
支付宝商业化广告算法问题之在广告场景中,随着业务的发展,面临了哪些阶段的挑战,如何解决
|
4月前
|
算法 计算机视觉 Python
Python并查集大揭秘:让你在算法界呼风唤雨,秒杀一切复杂场景!
【7月更文挑战第18天】并查集是Python中解决集合动态合并与查询的利器,常用于复杂问题。例如,在社交网络中快速判断用户是否在同一朋友圈,通过路径压缩优化的`UnionFind`类实现。另外,计算图像中岛屿数量也可借助并查集,将相邻像素合并成集合。并查集的应用显示了其在算法中的高效和灵活性,是提升编程技能的关键工具。
40 2
|
5月前
|
算法 安全 数据库
基于结点电压法的配电网状态估计算法matlab仿真
**摘要** 该程序实现了基于结点电压法的配电网状态估计算法,旨在提升数据的准确性和可靠性。在MATLAB2022a中运行,显示了状态估计过程中的电压和相位估计值,以及误差随迭代变化的图表。算法通过迭代计算雅可比矩阵,结合基尔霍夫定律解决线性方程组,估算网络节点电压。状态估计过程中应用了高斯-牛顿或莱文贝格-马夸尔特法,处理量测数据并考虑约束条件,以提高估计精度。程序结果以图形形式展示电压幅值和角度估计的比较,以及估计误差的演变,体现了算法在处理配电网状态估计问题的有效性。