使用Tensorflow或PyTorch的图像相似性

wnrlj8wa  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(217)

我想比较两个图像的相似性。因为我的目的是匹配一个给定的图像与大量的图像集合,我想在GPU上运行比较。
我遇到了tf.image.ssimtf.image.psnr函数,但我无法找到和工作的例子,只有。PyTorch的解决方案也很感谢。因为我没有很好的了解CUDA和C语言,我犹豫着尝试在PyCuda内核。
如果我读取整个图像集合并将其存储为Tensorflow记录以供将来处理,这对处理是否有帮助?
任何指导或解决方案,非常感谢。谢谢。
编辑:-我只匹配相同大小的图像。我不想做单纯的直方图匹配。我想做SSIM或PSNR实现的图像相似性。所以,我假设它将是相似的颜色,内容等

tsm1rwdh

tsm1rwdh1#

请查看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将返回一个Tensor(print不会给予你一个值),但是你可以调用.run()来计算它。

h7appiyu

h7appiyu2#

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

psnr = PSNR()
ssim = SSIM().cuda()

print('PSNR:', psnr(x, y))
print('SSIM:', ssim(x, y))

相关问题