相同内容但不同天气的图像相似度
Image similarity for same content but different weather
对于两张图片,一张是晴天,一张是雨天,除了天气之外,内容和对象几乎没有区别,有什么指标可以说它们高度相似?
与...明显不太相似的图像..
我在过去的一些项目中使用 CNN 的中间层来进行这种稳健的比较。基本上,您采用的 CNN 已针对某些任务(如图像分割)进行了训练,然后尝试识别层或层组合,这些层或层组合可为您的匹配提供 geometric/photometric 特征的良好平衡。然后在测试时,您在 CNN 中传递图像,并将这些特征与例如欧氏距离进行比较。我的图像与你的图像相似,我需要一些快速的东西,所以当时 Enet was a good choice for me (well, there are better choices now). I ended up using a combination of features from its 21st and 5th layers that ended up working well in practice. However, if your images are from a sequence where you can exploit temporal information, I strongly recommend that you take a look at SeqSLAM (sorry, couldn't find a non-paywall version. The interesting thing with this is that it doesn't require any CNNs, is real-time, and if memory serves, uses just very simple pyramidal intensity based comparisons for the matching, similar to SPP), as well as this 论文,它使用来自 CNN 的层改进了 SeqSLAM。
A 归一化互相关 似乎在发现相似性方面非常有效。我只是在终端的命令行中使用了 ImageMagick,但是所有图像处理包都应该提供类似的功能。
我们将您的三张图片命名为 rainy.png
、sunny.png
和 other.png
。然后,当图像相同时 NCC 为 1,当它们没有共同点时为 0。
因此,将 rainy.png
与 sunny.png
进行比较,它们的相似度为 83%:
convert -metric NCC sunny.png rainy.png -compare -format "%[distortion]" info:
0.831495
现在比较 rainy.png
和 other.png
,它们有 21% 的相似度:
convert -metric NCC rainy.png other.png -compare -format "%[distortion]" info:
0.214111
最后,将 sunny.png
与 other.png
进行比较,它们有 22% 的相似度:
convert -metric NCC sunny.png other.png -compare -format "%[distortion]" info:
0.22060
ImageMagick 还提供其他指标,例如 平均绝对误差 、 结构相似性 和很快。要获取选项列表,请使用:
identify -list metric
示例输出
- AE
- DSSIM
- 模糊
- 梅
- MEPP
- 均方误差
- NCC
- PAE
- PHASH
- PSNR
- 均方根误差
- SSIM
然后选择你想要的那个,如果你想要结构相似性而不是标准化交叉,则使用-metric SSIM
而不是-metric NCC
相关性.
当光照不同时,NCC 和 SSIM 可能是最好的两个,这可能会导致 brightness/contrast。其他指标不对 brightness/contrast
进行任何规范化
SSIM 给出了晴天与雨天的 0.763003 和晴天与其他天气的 0.236967。这是 3.22 的分离比。 NCC 分别给我 0.831495 和 0.220601。这是 3.77 的分离比。所以稍微好一点。有关这些命令的信息,请参阅 Mark Setchell 的回答。
另一种方法是先在灰度均衡图像上进行边缘检测。这再次减轻了 brightness/contrast 变化甚至颜色偏移。
这是在 Imagemagick 中使用 8 向 Sobel 算子的方法。
convert bright.png -colorspace gray -equalize \
-define convolve:scale='!' \
-define morphology:compose=Lighten \
-morphology Convolve 'Sobel:>' bright_sobel.png
convert dull.png -colorspace gray -equalize \
-define convolve:scale='!' \
-define morphology:compose=Lighten \
-morphology Convolve 'Sobel:>' dull_sobel.png
convert other.png -colorspace gray -equalize \
-define convolve:scale='!' \
-define morphology:compose=Lighten \
-morphology Convolve 'Sobel:>' other_sobel.png
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
添加:
如果对原始图像添加均衡,那么 non-edge NCC 结果会比顶部更好 post:
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。
添加 2:
这是另一种方法,它使用我的脚本 redist,尝试将图像统计信息更改为特定的均值和标准差。 (参见 http://www.fmwconcepts.com/imagemagick/index.php)
我将它应用于所有具有相同参数的图像以归一化为相同的均值和标准差,然后在进行比较之前进行精明的边缘提取。 redist 类似于 equalize,但使用高斯分布而不是平坦或恒定分布。 redist 的替代方法是局部区域直方图均衡化 (lahe) 或对比度受限自适应直方图均衡化 (clahe)。参见 https://en.wikipedia.org/wiki/Adaptive_histogram_equalization。
以下命令中的数字已标准化(在 0 到名义上的 100% 范围内)并表示平均值,峰值左侧的 one-sigma 偏移量,峰值左侧的 one-sigma 偏移量峰的右侧,其中 sigma 类似于标准偏差。
redist 50,50,50 bright.png bright_rdist.png
redist 50,50,50 dull.png dull_rdist.png
redist 50,50,50 other.png other_rdist.png
convert bright_rdist.png -canny 0x1+10%+30% bright_rdist_canny.png
convert dull_rdist.png -canny 0x1+10%+30% dull_rdist_canny.png
convert other_rdist.png -canny 0x1+10%+30% other_rdist_canny.png
比较-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
的分离比
对于两张图片,一张是晴天,一张是雨天,除了天气之外,内容和对象几乎没有区别,有什么指标可以说它们高度相似?
与...明显不太相似的图像..
我在过去的一些项目中使用 CNN 的中间层来进行这种稳健的比较。基本上,您采用的 CNN 已针对某些任务(如图像分割)进行了训练,然后尝试识别层或层组合,这些层或层组合可为您的匹配提供 geometric/photometric 特征的良好平衡。然后在测试时,您在 CNN 中传递图像,并将这些特征与例如欧氏距离进行比较。我的图像与你的图像相似,我需要一些快速的东西,所以当时 Enet was a good choice for me (well, there are better choices now). I ended up using a combination of features from its 21st and 5th layers that ended up working well in practice. However, if your images are from a sequence where you can exploit temporal information, I strongly recommend that you take a look at SeqSLAM (sorry, couldn't find a non-paywall version. The interesting thing with this is that it doesn't require any CNNs, is real-time, and if memory serves, uses just very simple pyramidal intensity based comparisons for the matching, similar to SPP), as well as this 论文,它使用来自 CNN 的层改进了 SeqSLAM。
A 归一化互相关 似乎在发现相似性方面非常有效。我只是在终端的命令行中使用了 ImageMagick,但是所有图像处理包都应该提供类似的功能。
我们将您的三张图片命名为 rainy.png
、sunny.png
和 other.png
。然后,当图像相同时 NCC 为 1,当它们没有共同点时为 0。
因此,将 rainy.png
与 sunny.png
进行比较,它们的相似度为 83%:
convert -metric NCC sunny.png rainy.png -compare -format "%[distortion]" info:
0.831495
现在比较 rainy.png
和 other.png
,它们有 21% 的相似度:
convert -metric NCC rainy.png other.png -compare -format "%[distortion]" info:
0.214111
最后,将 sunny.png
与 other.png
进行比较,它们有 22% 的相似度:
convert -metric NCC sunny.png other.png -compare -format "%[distortion]" info:
0.22060
ImageMagick 还提供其他指标,例如 平均绝对误差 、 结构相似性 和很快。要获取选项列表,请使用:
identify -list metric
示例输出
- AE
- DSSIM
- 模糊
- 梅
- MEPP
- 均方误差
- NCC
- PAE
- PHASH
- PSNR
- 均方根误差
- SSIM
然后选择你想要的那个,如果你想要结构相似性而不是标准化交叉,则使用-metric SSIM
而不是-metric NCC
相关性.
当光照不同时,NCC 和 SSIM 可能是最好的两个,这可能会导致 brightness/contrast。其他指标不对 brightness/contrast
进行任何规范化SSIM 给出了晴天与雨天的 0.763003 和晴天与其他天气的 0.236967。这是 3.22 的分离比。 NCC 分别给我 0.831495 和 0.220601。这是 3.77 的分离比。所以稍微好一点。有关这些命令的信息,请参阅 Mark Setchell 的回答。
另一种方法是先在灰度均衡图像上进行边缘检测。这再次减轻了 brightness/contrast 变化甚至颜色偏移。
这是在 Imagemagick 中使用 8 向 Sobel 算子的方法。
convert bright.png -colorspace gray -equalize \
-define convolve:scale='!' \
-define morphology:compose=Lighten \
-morphology Convolve 'Sobel:>' bright_sobel.png
convert dull.png -colorspace gray -equalize \
-define convolve:scale='!' \
-define morphology:compose=Lighten \
-morphology Convolve 'Sobel:>' dull_sobel.png
convert other.png -colorspace gray -equalize \
-define convolve:scale='!' \
-define morphology:compose=Lighten \
-morphology Convolve 'Sobel:>' other_sobel.png
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
添加:
如果对原始图像添加均衡,那么 non-edge NCC 结果会比顶部更好 post:
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。
添加 2:
这是另一种方法,它使用我的脚本 redist,尝试将图像统计信息更改为特定的均值和标准差。 (参见 http://www.fmwconcepts.com/imagemagick/index.php)
我将它应用于所有具有相同参数的图像以归一化为相同的均值和标准差,然后在进行比较之前进行精明的边缘提取。 redist 类似于 equalize,但使用高斯分布而不是平坦或恒定分布。 redist 的替代方法是局部区域直方图均衡化 (lahe) 或对比度受限自适应直方图均衡化 (clahe)。参见 https://en.wikipedia.org/wiki/Adaptive_histogram_equalization。
以下命令中的数字已标准化(在 0 到名义上的 100% 范围内)并表示平均值,峰值左侧的 one-sigma 偏移量,峰值左侧的 one-sigma 偏移量峰的右侧,其中 sigma 类似于标准偏差。
redist 50,50,50 bright.png bright_rdist.png
redist 50,50,50 dull.png dull_rdist.png
redist 50,50,50 other.png other_rdist.png
convert bright_rdist.png -canny 0x1+10%+30% bright_rdist_canny.png
convert dull_rdist.png -canny 0x1+10%+30% dull_rdist_canny.png
convert other_rdist.png -canny 0x1+10%+30% other_rdist_canny.png
比较-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