我有一个 RGBA 图像(如下),我想计算不同的质量指标,将原始图像与失真版本进行比较。这样做时,我想忽略背景的影响,只关注对象。首先,我从原始图像中提取 Alpha 通道以创建一个 Alpha 蒙版,并创建一个没有 Alpha 通道的图像版本。
convert man1_orig.png -alpha extract man1_mask.png
convert man1_orig.png -alpha off man1.png
然后我创建一个失真版本并将 alpha 掩码传递给-read-mask
标志compare
并计算 PSNR 和 SSIM:
magick man1.png -quality 5% distorted.jpg
compare -metric PSNR -read-mask man1_mask.png man1.png distorted.jpg diff_mask.png
// 23.9876
compare -metric SSIM -read-mask man1_mask.png man1.png distorted.jpg diff_mask.png
// 0.192216
但是,当我使用完整图像(无 alpha)重复相同的实验时,PSNR 得到了不同的结果,正如预期的那样,但 SSIM 产生了相同的结果:
compare -metric PSNR man1.png distorted.jpg diff_full.png
// 27.7426
compare -metric SSIM man1.png distorted.jpg diff_full.png
// 0.192216
对于完整图像,我认为 PSNR 更高,因为未失真和失真图像中的背景像素非常相似,并且对结果有积极影响。对于 SSIM,我怀疑这-read-mask
没有效果。是否没有为 SSIM 实现此功能,或者在图像的蒙版区域上测量 SSIM 可能没有任何意义?