亲爱的同事们。 你能帮我解决下一个问题。 我想调整大量图像的大小,并用调整大小替换原始图像以节省磁盘空间。但在替换之前我想确定,重新调整大小的图像是相同的原始图像,但具有不同的尺寸(不是白名单,不是马列维奇的正方形等)。 有没有办法检查这种相似性,以确保调整大小成功? 谢谢。
答案 0 :(得分:1)
一个想法可能是将您的图像缩小为暂定的下拉版本,然后将其缩放回原始尺寸并将其与原始尺寸进行比较。如果它们看起来非常相似,请使用暂定转换覆盖原始文件,否则报告错误。
以下是您在bash
发表评论的方式。当然,它可以重新组合成其他语言,或者您可以使用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(不支持透明度),然后调整大小并进行比较 - 您要求麻烦。您将在上面的脚本中看到我保留图像扩展名和预先挂起的位到前面而不是文件名的末尾。
答案 1 :(得分:0)
就尺寸而言,您只需检查尺寸即可
在matlab中
[x,y]=size(im);
这将告诉您图像是否已调整大小
要检查图像是否相同,可以使用特征提取,例如SURF功能。
提取冲浪功能,匹配它们,如果你得到100%~90%匹配你有相同的图像!!