【问题标题】:ImageJ - compare original and resized image on similarityImageJ - 比较原始图像和调整大小的图像的相似性
【发布时间】:2015-07-02 06:19:57
【问题描述】:

亲爱的同事们。 你能帮我解决下一个问题吗? 我想调整大量图像的大小并用调整后的大小替换原始图像以节省磁盘空间。但在替换之前,我想确定的是,调整大小的图像是相同的原始图像,但尺寸不同(不是白名单,不是马列维奇的正方形等)。 有没有办法检查这种相似性以确保调整大小成功? 谢谢。

【问题讨论】:

    标签: image image-processing image-resizing imagej


    【解决方案1】:

    一个想法可能是将您的图像缩小为试探性的缩小版本,然后将其缩放回原始大小并与原始大小进行比较。如果看起来很相似,就用暂定的转换覆盖原来的,如果不是,报告错误。

    以下是在bash 中使用 cmets 执行此操作的方法。当然,它可以重新散列成其他语言,或者您可以使用system() 来外壳并使用其他语言的命令行版本。

    #!/bin/bash
    
    # Downscale an image and check if correct
    # Supply image name as parameter
    
    original="$1"
    tentative="t-$$-$original"
    echo DEBUG: tentative filename=$tentative
    
    # Get size of original so we can resize back up to that size
    origsize=$(identify -format "%G" "$original")
    echo DEBUG: origsize=$origsize
    
    # Do downsizing of image, saving result tentatively
    convert image.jpg -resize 800x800 "$tentative"
    
    # Test quality/success of conversion by looking at PSNR
    PSNR=$(convert "$tentative" -resize $origsize\! "$original" -metric PSNR -format "%[distortion]" -compare info:)
    echo DEBUG: PSNR=$PSNR
    
    # PSNR above 20 is pretty indicative of good similarity - use "bc" as shell doesn't do floats
    if [ $(echo "$PSNR>20" | bc) -eq 1 ]; then
       echo $original looks good
    else
       echo $original something wrong
    fi
    

    要注意的一件事是透明度 - 不要从 GIF 或 PNG(两者都支持透明度)转换为 JPEG(不支持)然后调整大小和比较 - 你是在自找麻烦。您将在上面的脚本中看到,我保留了图像扩展名并在文件名的前面而不是末尾添加了位。

    【讨论】:

    • 感谢您的回答,马克。我已经尝试过这种方法,但它给了我奇怪的结果。如果比较原始大小的图像和调整大小(缩小)的图像 - 我得到 74% 的相似性。但是,如果将原始大小的图像与放大到原始大小的图像进行比较,我只能得到 4% 的相似度。嗯...
    • 您是如何衡量 4% 的相似度的 - 使用哪个指标和缩放比例?我的代码不计算或测量任何百分比...
    • 哦,我首先使用了这个命令:“convert image1 image2 -compose Difference -composite -format '%[fx:mean*100]' info:” 但是我用你的指标和命令:“转换 "$tentative" -resize $origsize\! "$original" -metric PSNR -format "%[distortion]" -compare info:" 得到大约 27,7。似乎效果很好。我可以假设这个措施意味着图像是相似的吗?非常感谢,马克!
    • 马克,你不知道如何使用 Java API (JMagick) 或 C# API (Magick.Net) 在 ImageMagick 中实现该命令。谢谢。
    • 对不起,我没有。然而,@dlemstra 在 SO 上,他是 ImageMagick 的 C# 实现的维护者,所以如果我们很好地问他,他很可能会告诉我们怎么做 convert im1.jpg im2.jpg -metric PSNR -format "%[distortion]" info: ;-)
    【解决方案2】:

    就尺寸而言,您可以简单地检查尺寸 在matlab中 [x,y]=size(im); 这将让您知道图像是否已调整大小 要检查图像是否相同,您可以使用特征提取,例如 SURF 特征。 提取冲浪特征,如果你得到 100% ~ 90% 匹配就匹配它们,你有相同的图像!!

    【讨论】:

    • 谢谢,哈伦。我对在 Java 或 C# 程序中使用此功能很感兴趣。我找到了这篇文章imagemagick.org/Usage/compare。如果使用命令“convert image1 image2 -compose Difference -composite \ -colorspace gray -format '%[fx:mean*100]' info:” 它显示相似度百分比,我认为))大约是 74%。是否足以得出图像相同的结论?附言几乎所有的图像都是扫描的文本文档。谢谢。
    • 寻找冲浪功能,它们会给您带来比当前方法更好的结果。 PS:我从来没有在这方面工作过,所以我不能确定百分比。
    猜你喜欢
    • 2023-03-09
    • 2012-10-26
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 2015-03-07
    • 2014-11-12
    • 2018-02-06
    • 2012-12-10
    相关资源
    最近更新 更多