【问题标题】:Image similarity for same content but different weather相同内容但不同天气的图像相似度
【发布时间】:2019-03-24 17:01:41
【问题描述】:

对于两张图片,一张在晴天,另一张在雨天,除了天气之外,内容和对象几乎没有差异,是否有任何指标可以说它们高度相似?

Vs...一个明显不那么相似的图像..

【问题讨论】:

  • 我认为如果您包含示例图像会更好...
  • 添加了一些样本..
  • 这些似乎是计算机生成的图像,对吗?你所有的图片都是这样的吗?
  • 不完全是..我举了这个例子..但关键是我们需要一个基于内容且对天气条件稳健的相似性指标..

标签: image image-processing computer-vision similarity weather


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    标准化互相关在发现相似性方面似乎非常有效。我只是在终端的命令行中使用了 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 还提供其他指标,例如平均绝对误差结构相似度等。要获取选项列表,请使用:

    identify -list metric
    

    样本输出

    • AE
    • DSSIM
    • 绒毛
    • MAE
    • MEPP
    • MSE
    • NCC
    • PAE
    • PHASH
    • PSNR
    • RMSE
    • SSIM

    然后选择你想要的,然后使用-metric SSIM而不是-metric NCC如果你想要结构相似性而不是标准化互相关

    【讨论】:

    • Image Magick 中没有互信息?我认为那将是最好的选择。但所有这些都需要其他相同的图像——相机移动,就像在另一天拍摄图像时一样,即使是很小的移动,也会使这些比较变得无用。
    • @CrisLuengo 抱歉,“相互信息” 是什么意思?我不熟悉这个词。 AFAIK,这些图像是计算机生成的,因此它们可能与最后一个像素具有相同的角度。
    • 它使用联合直方图测量图像相似度。联合直方图越紧凑,两幅图像就越相似。如果它们不相关,则两个图像中的强度之间没有关系,您可以在直方图中看到这一点。这是一种相关性,但不关心强度的顺序。它在医学成像中被大量使用,例如在同时注册 MRI 和 CAT 扫描时。不同的器官在两种模式中以不同的强度显示,这使得相关性等无用。
    • @CrisLuengo 好的,非常感谢您的解释。我会做一些谷歌搜索并学习一些东西:-)
    • @code_Assasin:是的,如果实际应用程序使用真实照片,则需要包含某种形式的注册以对齐要比较的两个图像。
    【解决方案3】:

    当照明不同时,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
    


    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

    补充:

    如果对原始图像添加均衡,则非边缘 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。

    附加2:

    这是另一种方法,它使用我的脚本 redist,尝试将图像统计信息更改为特定的平均值和标准差。 (见http://www.fmwconcepts.com/imagemagick/index.php

    我将它应用于具有相同参数的所有图像以标准化为相同的均值和标准,然后在进行比较之前进行精明的边缘提取。 redist 类似于 equalize,但使用高斯分布而不是平坦或恒定分布。 redist 的替代方案是局部区域直方图均衡 (lahe) 或对比度受限的自适应直方图均衡 (clahe)。见https://en.wikipedia.org/wiki/Adaptive_histogram_equalization

    以下命令中的数字已归一化(范围从 0 到名义上的 100 %)并表示平均值、峰值左侧的 1 西格玛偏移量、峰值右侧的 1 西格玛偏移量, 其中 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 空: 0.345919

    compare -metric ncc bright_rdist_canny.png other_rdist_canny.png null:
    0.0323863
    


    这给出了 10.68 的分离比

    【讨论】:

    • 很好的见解!我也想先考虑边缘检测,但想知道边缘会在雨中消失。
    • 我先尝试了 canny edge,但结果就是这样,即使是均衡也是如此。
    • 在我上面的回答中看到两个补充。
    猜你喜欢
    • 2015-01-03
    • 1970-01-01
    • 2021-01-30
    • 2012-05-09
    • 2021-12-11
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多