ImageJ - 比较原始图像和调整后图像的相似性

ImageJ - compare original and resized image on similarity

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

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

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

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

#!/bin/bash

# Downscale an image and check if correct
# Supply image name as parameter

original=""
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(不支持)然后调整大小并进行比较 - 你是在自找麻烦。您会在我上面的脚本中看到,我保留了图像扩展名并将位放在前面而不是文件名的末尾。