内容:相同内容但不同天气条件下的图像相似度

4
针对两幅图片,一幅在晴天,另一幅在雨天,除了天气以外几乎没有任何内容和物体的差异,是否有任何衡量标准可以说明它们非常相似?Rainy image

Normal Image

与之不相似的图像... 不相似的图像


如果您包含示例图像,我认为会更好一些... - Ash
添加了一些示例。 - code_Assasin
1
这些看起来是计算机生成的图像,对吗?你所有的图像都是这样的吗? - Mark Setchell
并不完全是这样。我只是举了个例子。但重点是我们需要一个内容为基础,并且能够在天气条件下保持稳健的相似性度量。 - code_Assasin
3个回答

2
NCC和SSIM在光照不同(可能导致亮度/对比度不同)的情况下可能是最好的两种指标。其他指标没有对亮度/对比度进行任何规范化。
对于晴天与雨天的比较,SSIM给出0.763003,晴天与其他情况的比较则为0.236967。这是一个分离比率为3.22。NCC分别给出0.831495和0.220601,分离比率为3.77。稍微好一些。有关这些命令,请参见Mark Setchell的答案。
另一种方法是首先在灰度均衡图像上进行边缘检测。这可以减轻亮度/对比度变化甚至颜色偏移的影响。
以下是使用Imagemagick中的8方向Sobel算子实现该方法的代码。
convert bright.png -colorspace gray -equalize \
-define convolve:scale='!' \
-define morphology:compose=Lighten \
-morphology Convolve 'Sobel:>' bright_sobel.png


enter image description here

convert dull.png -colorspace gray -equalize \
-define convolve:scale='!' \
-define morphology:compose=Lighten \
-morphology Convolve 'Sobel:>' dull_sobel.png


enter image description here

convert other.png -colorspace gray -equalize \
-define convolve:scale='!' \
-define morphology:compose=Lighten \
-morphology Convolve 'Sobel:>' other_sobel.png


enter image description here

compare -metric ncc bright_sobel.png dull_sobel.png null:
0.688626

compare -metric ncc bright_sobel.png other_sobel.png null:
0.0756445         

这是9.1的分离比率,所以要好得多。
通过边缘检测,您可能可以使用其他指标,因为均衡化和灰度操作已经完成了归一化。但是在这里,NCC仍然可能是最好的选择。
请参见https://imagemagick.org/Usage/convolve/#sobel 补充:
如果将均衡化添加到原始图像中,则非边缘NCC结果比本帖子顶部的结果更好:
convert bright.png -equalize bright_eq.png

convert dull.png -equalize dull_eq.png

convert other.png -equalize other_eq.png


compare -metric NCC bright_eq.png dull_eq.png null:
0.861087

compare -metric NCC bright_eq.png other_eq.png null:
0.204296

这个分离比率为4.21,略优于没有均衡化的3.77。
ADDITON2:
这里提供了另一种方法,使用脚本redist,尝试将图像统计数据改变到特定的平均值和标准差(参见http://www.fmwconcepts.com/imagemagick/index.php)。我对所有图像应用了相同的参数来归一化到相同的平均值和标准差,然后进行Canny边缘提取再进行比较。Redist类似于equalize,但是使用高斯分布而不是平坦或恒定分布。Redist的替代品可以是局部直方图均衡化(lahe)或对比度受限自适应直方图均衡化(clahe)。请参见https://en.wikipedia.org/wiki/Adaptive_histogram_equalization
以下命令中的数字已被标准化(在0到正常情况下的100%范围内),并表示平均值,峰值左侧的一西格玛偏移量,峰值右侧的一西格玛偏移量,其中西格玛类似于标准偏差。
redist 50,50,50 bright.png bright_rdist.png


enter image description here

redist 50,50,50 dull.png dull_rdist.png


enter image description here

redist 50,50,50 other.png other_rdist.png


enter image description here



convert bright_rdist.png -canny 0x1+10%+30% bright_rdist_canny.png


enter image description here

convert dull_rdist.png -canny 0x1+10%+30% dull_rdist_canny.png


enter image description here

convert other_rdist.png -canny 0x1+10%+30% other_rdist_canny.png


enter image description here

比较 -metric ncc bright_rdist_canny.png dull_rdist_canny.png null: 0.345919
compare -metric ncc bright_rdist_canny.png other_rdist_canny.png null:
0.0323863

这给出了一个分离比为10.68。

好的见解!我也一开始想到边缘检测,但是担心雨中的边缘会消失。 - Mark Setchell
我先尝试了Canny边缘检测,但即使进行了均衡化,效果也不太好。 - fmw42
请查看我上面回答中的两个补充。 - fmw42

1
一个标准化互相关似乎非常有效地发现了相似之处。我只是在终端中使用了ImageMagick,但所有的图像处理软件包都应该有类似的功能。
我们称您的三个图像为rainy.pngsunny.pngother.png。然后,当图像完全相同时,NCC为1,当它们没有共同之处时,NCC为0。

因此,将 rainy.pngsunny.png 进行比较,它们相似度达到了83%:

convert -metric NCC sunny.png rainy.png -compare -format "%[distortion]" info:
0.831495

现在将rainy.pngother.png进行比较,它们相似度为21%。
convert -metric NCC rainy.png other.png -compare -format "%[distortion]" info:
0.214111

最后,将 sunny.pngother.png 进行比较,它们相似度为22%。
convert -metric NCC sunny.png other.png -compare -format "%[distortion]" info:
0.22060

ImageMagick 还提供其他度量方式,例如平均绝对误差(Mean Absolute Error)结构相似性(Structural Similarity)等。要获取选项列表,请使用:

identify -list metric

样例输出

  • AE(平均误差)
  • DSSIM(结构相似性指标)
  • Fuzz(模糊度)
  • MAE(平均绝对误差)
  • MEPP(最大误差像素点)
  • MSE(均方误差)
  • NCC(归一化互相关系数)
  • PAE(峰值绝对误差)
  • PHASH(感知哈希)
  • PSNR(峰值信噪比)
  • RMSE(均方根误差)
  • SSIM(结构相似性)

选择所需的指标,然后使用-metric SSIM代替-metric NCC,如果您需要结构相似性而不是归一化互相关系数


Image Magick中没有互信息吗?我认为这可能是最好的选择。但所有这些都需要完全相同的图像——当图像在另一天拍摄时,即使是微小的移位也会使这些比较无用。 - Cris Luengo
@CrisLuengo 对不起,请问您所说的“互信息”是什么意思?我对这个术语不太熟悉。据我所知,这些图像都是由计算机生成的,因此它们很可能在最后一个像素上具有相同的角度。 - Mark Setchell
它使用联合直方图来测量图像相似性。联合直方图越紧凑,两个图像越相似。如果它们没有关联,则两个图像的强度之间没有关系,并且在直方图中可以看到这一点。它类似于相关性,但不关心强度的顺序。它在医学成像中经常使用,例如在将MRI和CAT扫描注册在一起时。不同的器官在两种模式下以不同的强度显示,这使得相关性等变得无用。 - Cris Luengo
@CrisLuengo 好的,非常感谢您的解释。我会去Google一下并学习一些知识 :-) - Mark Setchell
@CrisLuengo 我有一个类似的问题.. 即使是小的线性位移,像 SSIM 等方法也会得到较低的分数,这是不可取的。 - code_Assasin
1
@code_Assasin:是的,如果实际应用程序使用真实照片,您需要包含某种形式的注册来对齐您想要比较的两个图像。 - Cris Luengo

0
我曾在过去的一些项目中使用了来自CNN的中间层来进行强健的比较。基本上,您需要选择一个已经训练好的CNN,例如图像分割,然后尝试识别出提供几何/光度特征平衡的层或层组合以用于匹配。在测试时,您将图像传递给CNN,并将这些特征与例如欧几里得距离进行比较。我的图像与您的相似,我需要快速处理,所以当时Enet对我来说是一个不错的选择(现在有更好的选择)。最终,我使用了其第21层和第5层的特征组合,实际效果良好。但是,如果您的图像来自可以利用时间信息的序列,则强烈建议您查看SeqSLAM(抱歉,找不到非付费版本)。这个有趣的事情是它不需要任何CNN,是实时的,如果记忆服务,仅使用非常简单的金字塔强度比较进行匹配,类似于SPP),以及this论文,该论文使用CNN的层来改进SeqSLAM。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接