11

我正在寻找一种算法,可用于比较两个图像并确定两者之间是否存在显着差异。我所说的“显着”是指,如果你拍了两张房间的照片,其中一张的墙上明显有一只大蜘蛛,你就能检测到它。我对检测到的内容或什至在哪里并不真正感兴趣 - 只是有一些不同的东西。该算法需要忽略亮度。如果房间在白天变得更亮或更暗,算法应该忽略它。

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

谢谢!

4

4 回答 4

4

我会尝试对您的二维数据进行高通滤波。

根据傅里叶,每个信号都可以通过分析信号中的频率来转换为“频率空间”。这也适用于二维信号,如图像。

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

图像的高通滤波

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

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

可能的问题

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

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

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

Edit As reply to ???, if you also adjust the levels of the high-pass filtered image (which of course is all around 0.5*256) by just normalizing it to the range 0, 256 again you get

调整后的水平

Which probably isn't worse than your result. But, HP-filters are simple and, when using FFT, very fast.

于 2013-01-21T09:02:36.170 回答
0

如果相机是完全静止的,并且所有差异都是由于环境照明和/或相机曝光设置造成的,那么可以通过对 2 个图像进行归一化来忽略亮度(和对比度)。

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

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

于 2013-01-21T08:58:23.283 回答
0

A common approach with such a problem is to average the images taken by your camera over time, and detect any difference above a given threshold.

You need to keep an image in memory that will be the averaged image. Let's call it "avg".

Each time your camera takes a picture (called "pic"), you gonna :

  • Sum up absolute pixels value differences between "avg" and "pic".
    • If above a threshold, something is moving in front of the camera.
    • 否则,修改“avg”,使其略微收敛到“pic”。例如,由您来找到合适的公式avg = avg * 0.95 + pic * 0.05

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

于 2013-01-21T09:10:50.227 回答
0

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

Red_ratio = Red / (Red + Blue + Green)
Blue_ratio = Blue / (Red + Blue + Green)
Green_ratio = Green / (Red + Blue + Green)
于 2016-06-20T00:01:15.130 回答