【发布时间】:2015-07-02 06:19:57
【问题描述】:
亲爱的同事们。 你能帮我解决下一个问题吗? 我想调整大量图像的大小并用调整后的大小替换原始图像以节省磁盘空间。但在替换之前,我想确定的是,调整大小的图像是相同的原始图像,但尺寸不同(不是白名单,不是马列维奇的正方形等)。 有没有办法检查这种相似性以确保调整大小成功? 谢谢。
【问题讨论】:
标签: image image-processing image-resizing imagej
亲爱的同事们。 你能帮我解决下一个问题吗? 我想调整大量图像的大小并用调整后的大小替换原始图像以节省磁盘空间。但在替换之前,我想确定的是,调整大小的图像是相同的原始图像,但尺寸不同(不是白名单,不是马列维奇的正方形等)。 有没有办法检查这种相似性以确保调整大小成功? 谢谢。
【问题讨论】:
标签: image image-processing image-resizing imagej
一个想法可能是将您的图像缩小为试探性的缩小版本,然后将其缩放回原始大小并与原始大小进行比较。如果看起来很相似,就用暂定的转换覆盖原来的,如果不是,报告错误。
以下是在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(不支持)然后调整大小和比较 - 你是在自找麻烦。您将在上面的脚本中看到,我保留了图像扩展名并在文件名的前面而不是末尾添加了位。
【讨论】:
convert im1.jpg im2.jpg -metric PSNR -format "%[distortion]" info: ;-)
就尺寸而言,您可以简单地检查尺寸
在matlab中
[x,y]=size(im);
这将让您知道图像是否已调整大小
要检查图像是否相同,您可以使用特征提取,例如 SURF 特征。
提取冲浪特征,如果你得到 100% ~ 90% 匹配就匹配它们,你有相同的图像!!
【讨论】: