如何使用MATLAB校正图像中的不均匀照明?

时间:2012-02-15 11:43:38

标签: matlab image-processing computer-vision lighting

我正在使用MATLAB在视频中执行特征检测。视频的不同部分的光照条件会有所不同,导致某些部分在将RGB图像转换为二进制图像时被忽略。

视频特定部分的光照条件也会随着视频的变化而变化。

您能否在MATLAB中建议最佳方法来平衡帧和视频的光照?

3 个答案:

答案 0 :(得分:7)

您有两种选择,具体取决于您要检测的功能以及您要对视频执行的操作。

  1. 忽略图像的照明,因为(正如您所得出的结论)这包含无用的甚至是误导性的信息,用于您的特征检测。
  2. 尝试修复照明不均匀性(这是你要求的)。
  3. 1)很容易做到:将图像转换为colourspace,在单独的通道中分隔出照明,例如:HSV(忽略V通道)Lab(忽略L)YUV(忽略Y)并在剩余的两个通道上执行特征检测。其中HSV是最好的(如评论中Yves Daoust所述)YUV和Lab在UV / ab通道中留下一些照明信息。根据我的经验,最后两个也取决于你的情况,但HSV是最好的。

    2)更难。我首先将图像转换为HSV。然后你只对V通道进行修复:

    • gaussian blur应用于具有非常大的sigma值的V通道图像。这为您提供了照明的局部平均值。计算此图像的全局平均V值(这是一个数字)。然后从每个像素的实际V值中减去局部平均值,并添加全局平均值。你现在已经完成了非常粗糙的照明均衡。您可以使用sigma的值来玩一下,找到效果最好的值。
    • 如果失败,请查看选项zenopy gives in his answer.

    无论您选择哪种方法,我都建议您专注于您想要做的事情(即检测功能),并选择满足您需求的中间步骤。快速尝试一下,看看这有助于您的功能检测,

答案 1 :(得分:5)

这不是一个微不足道的task,但有许多方法可以尝试克服它。我建议您先从实施retinex算法开始,或使用其他人的实现:http://www.cs.sfu.ca/~colour/publications/IST-2000/

基本思想是亮度(观察图像强度)=照明(入射光)x反射率(反射百分比):

L(x,y) = I(x,y) x R(x,y) 

你对R部分感兴趣。

要处理每帧的彩色图像,请先移至hsv色彩空间,然后在v(值)部分操作retinex。

希望这是有道理的。

答案 2 :(得分:5)

除了通过Retinex或高通滤波处理的各个图像的照明不均匀性外,您还可以考虑视频中的自动增益校正。

想法是通过对颜色分量应用线性变换来标准化图像强度,使得所有三个通道组合的平均和标准偏差变为预定值(平均值 - > 128,标准偏差 - > ; 64)。

直方图均衡将具有类似的“标准化”强度水平的效果。

不幸的是,大的场景变化会影响这个过程,使得背景的强度不会像你期望的那样保持不变。

相关问题