我想比较两个图像的相似性。由于我的目的是将给定图像与大量图像进行匹配,因此我想在GPU上进行比较。
我遇到了tf.image.ssim
和tf.image.psnr
函数,但是我仅能找到并运行示例。还感谢PyTorch中的解决方案。由于我对CUDA和C语言没有很好的了解,因此我很想在PyCuda中尝试内核。
如果我阅读整个图像集并将其存储为Tensorflow记录以供将来处理,那么在处理方面会有所帮助吗?
任何指导或解决方案,深表感谢。谢谢。
编辑:-我只匹配相同大小的图像。我不想做直方图匹配。我想通过SSIM或PSNR实现图像相似性。所以,我假设它的颜色,内容等类似。
答案 0 :(得分:0)
在tensorflow文档页面(link)上查看示例:
im1 = tf.decode_png('path/to/im1.png')
im2 = tf.decode_png('path/to/im2.png')
print(tf.image.ssim(im1, im2, max_val=255))
这应该适用于最新版本的tensorflow。如果您使用的是旧版本,则tf.image.ssim将返回张量(打印不会给您提供值),但是您可以调用.run()对其进行求值。
答案 1 :(得分:0)
PyTorch 中没有实现 PSNR 或 SSIM。您可以自己实现它们,也可以使用第三方包,例如我开发的 piqa
。
假设您已经安装了 torch
和 torchvision
,您可以使用
pip install piqa
然后进行图像对比
import torch
from torchvision import transforms
from PIL import Image
im1 = Image.open('path/to/im1.png')
im2 = Image.open('path/to/im2.png')
transform = transforms.ToTensor()
x = transform(im1).unsqueeze(0).cuda() # .cuda() for GPU
y = transform(im2).unsqueeze(0).cuda()
from piqa import psnr, ssim
print('PSNR:', psnr.psnr(x, y))
print('SSIM:', ssim.ssim(x, y))