我正在寻找一种算法,可以用来比较两个图像并确定它们之间是否存在显著差异。所谓“显著”,是指如果你拍摄了一个房间的两张照片,其中一张墙上有一只大蜘蛛,你应该能够检测到它。我对被检测到的内容或者位置不感兴趣,我只需要知道有些东西不同。该算法需要忽略亮度。如果房间在白天变得更明亮或更暗,算法应该忽略这种情况。
即使您不知道这样的算法,任何指向正确方向的提示都会有所帮助。
谢谢!
我正在寻找一种算法,可以用来比较两个图像并确定它们之间是否存在显著差异。所谓“显著”,是指如果你拍摄了一个房间的两张照片,其中一张墙上有一只大蜘蛛,你应该能够检测到它。我对被检测到的内容或者位置不感兴趣,我只需要知道有些东西不同。该算法需要忽略亮度。如果房间在白天变得更明亮或更暗,算法应该忽略这种情况。
即使您不知道这样的算法,任何指向正确方向的提示都会有所帮助。
谢谢!
我从网上获取了一张墙上蜘蛛的图片(左上角)。然后我降低了这张图片的亮度(左下角)。对于两个版本,我都使用 GIMP (此插件) 应用了高通滤波器。对于两个输入图像,输出看起来非常相似。
我的建议:先应用高通滤波器,然后查看差异。
可能出现的问题
按照要求,以下是我能想象到的一些问题。
没有清晰的边缘:如果您想检测的对象没有清晰的边缘,那么您可能会使用高通滤波器将其过滤掉。但那些对象可能是什么?它们必须是巨大的、平坦的(不产生阴影)和无结构的。
只有颜色不同,亮度相同:如果对象只在颜色方面有所不同,但亮度与背景相同,则灰度转换可能会成为一个问题。但如果您遇到这个问题,只需分别分析 R、G、B 数据,然后至少一个通道应该有助于检测对象,否则,您就看不到它了。
编辑 作为对于???的回复,如果你也调整了高通滤波后的图像级别(当然全都是0.5*256),只要将其标准化到0, 256的范围内,你就会得到
也许这并不比你的结果更糟。但是,HP滤波器很简单,并且在使用FFT时非常快速。把像素的亮度成分去掉怎么样:
Red_ratio = Red / (Red + Blue + Green)
Blue_ratio = Blue / (Red + Blue + Green)
Green_ratio = Green / (Red + Blue + Green)