6

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

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

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

4

3 回答 3

8

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

  1. 忽略图像的照明,因为(正如您已经得出的结论)这包含对您的特征检测无用甚至误导的信息。
  2. 尝试修复照明不均匀(这是您要求的)。

1) 很容易做到:将图像转换为在单独通道中分离照明的色彩空间,例如:HSV(忽略 V 通道)Lab(忽略 L)YUV(忽略 Y)并在两者上执行特征检测剩余频道。在这些 HSV 中是最好的(正如 Yves Daoust 在评论中指出的那样)YUV 和 Lab 在 UV / ab 通道中留下了一些照明信息。根据我的经验,最后两个也取决于您的情况,但 HSV 是最好的。

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

  • 对 sigma 值非常大的 V 通道图像应用高斯模糊。这为您提供了照明的局部平均值。计算此图像的全局平均 V 值(这是一个数字)。然后从每个像素的实际 V 值中减去局部平均值并添加全局平均值。您现在已经完成了非常粗略的照明均衡。您可以对 sigma 的值进行一些尝试,以找到最有效的值。
  • 如果失败,请查看zenopy 在他的回答中给出的选项。

无论您选择哪种方法,我都建议您专注于您想要做的事情(即检测特征)并选择中间步骤,例如足以满足您需求的步骤。这么快就尝试一下,看看这对你的特征检测有什么帮助,

于 2012-02-16T10:29:56.690 回答
5

这不是一项微不足道的任务,但有很多方法可以尝试克服它。我可以建议您从实现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。

希望这是有道理的。

于 2012-02-15T14:15:54.083 回答
5

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

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

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

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

于 2012-02-15T21:58:54.807 回答