忽略亮度的图像比较算法

时间:2013-01-21 07:54:25

标签: algorithm colors imaging

我正在寻找一种算法,我可以用它来比较两个图像,并确定两者之间是否存在显着差异。 “重要”,我的意思是,如果你拍了一张房间的两张照片,而其中一张房子的墙上有一只大蜘蛛,你就能够发现它。我并不真正感兴趣的是检测到什么,甚至在哪里 - 只是有不同之处。该算法需要忽略亮度。如果房间在白天变得更亮或更暗,算法应该忽略它。

即使您不知道算法,任何正确方向的提示都会有所帮助。

谢谢!

4 个答案:

答案 0 :(得分:4)

我会尝试对您的2d数据执行高通滤波。

根据Fourier,通过分析信号中的哪些频率,可以将每个信号转换为“频率空间”。这也适用于2D信号,如图像。

通过“高通滤波器”,您可以移除所有低频部分,例如恒定偏移和慢速渐变。如果应用于图像,它可以用作简单的“边缘检测”算法。查看示例可能会使其更容易理解:

High-pass filtering of images

我从网上的某个地方(左上角)拍了一张蜘蛛的照片。然后我降低了这张图片的亮度(左下角)。对于这两个版本,我使用GIMP (This plugin)应用了高通滤波器。对于两个输入图像,输出看起来非常相似。

我的建议:首先应用高通滤波器,然后查看差异。

可能出现的问题

根据要求,这里有一些我能想象到的问题。

  • 没有锐边:如果您想要检测的物体没有锐边,您可能会使用HF-pass滤波将其滤除。但那可能是什么对象?它们必须是巨大的,平坦的(不产生阴影)和非结构化的。

  • 只有颜色不同,而不是亮度:如果对象的颜色不同,但亮度与背景相同,则灰度转换可能会出现问题。但是如果遇到这个问题,只需分别分析R,G,B数据,那么至少有一个通道应该有助于检测物体 - 否则,你无论如何都看不到它。

修改 作为对???的回复,如果你也调整高通滤波图像的水平(当然大约是0.5 * 256),只需将其标准化为0,256再次得到

With adjusted levels

这可能不比你的结果差。但是,HP滤波器很简单,使用FFT时非常快。

答案 1 :(得分:0)

如果相机完全静止且所有差异都是由于环境光线和/或相机曝光设置造成的,则可以通过标准化2张图像来忽略亮度(和对比度)。

从每个图像的所有像素中减去相应的图像平均值(平均像素值)并取差。这将照亮亮度。

如果你想要处理对比度,则计算每个图像的方差(在将均值设为0之后),并将像素值乘以将使它们具有相同方差的因子。现在差异对比也是不变的(假设没有过度/不足曝光区域)。

答案 2 :(得分:0)

出现这种问题的一种常见方法是对相机拍摄的图像进行平均,并检测高于给定阈值的任何差异。

您需要将内存中的图像保留为平均图像。我们称之为“平均”。

每次你的相机拍照(称为“pic”),你都会:

  • 总结“avg”和“pic”之间的绝对像素值差异。
    • 如果超过阈值,则会在相机前移动。
    • 否则,修改“avg”,使其稍微收敛到“pic”。由你来找到合适的公式,例如avg = avg * 0.95 + pic * 0.05

在这里,您的参考图像会在一天内发生变化,以适应日晒和阴影的变化。

答案 3 :(得分:0)

如何从像素中删除亮度分量:

Red_ratio = Red / (Red + Blue + Green)
Blue_ratio = Blue / (Red + Blue + Green)
Green_ratio = Green / (Red + Blue + Green)