使用Tensorflow或PyTorch的图像相似度

时间:2019-01-08 12:38:18

标签: tensorflow image-processing pytorch

我想比较两个图像的相似性。由于我的目的是将给定图像与大量图像进行匹配,因此我想在GPU上进行比较。

我遇到了tf.image.ssimtf.image.psnr函数,但是我仅能找到并运行示例。还感谢PyTorch中的解决方案。由于我对CUDA和C语言没有很好的了解,因此我很想在PyCuda中尝试内核。

如果我阅读整个图像集并将其存储为Tensorflow记录以供将来处理,那么在处理方面会有所帮助吗?

任何指导或解决方案,深表感谢。谢谢。

编辑:-我只匹配相同大小的图像。我不想做直方图匹配。我想通过SSIM或PSNR实现图像相似性。所以,我假设它的颜色,内容等类似。

2 个答案:

答案 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

假设您已经安装了 torchtorchvision,您可以使用

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))