【问题标题】:Image similarity using Tensorflow or PyTorch使用 TensorFlow 或 PyTorch 的图像相似度
【发布时间】:2019-06-03 03:45:26
【问题描述】:

我想比较两张图片的相似度。由于我的目的是将给定图像与大量图像集合进行匹配,因此我想在 GPU 上运行比较。

我遇到了 tf.image.ssimtf.image.psnr 函数,但我无法找到和工作的示例。 PyTorch 中的解决方案也值得赞赏。由于对 CUDA 和 C 语言不太了解,所以在 PyCuda 中尝试内核犹豫不决。

如果我读取整个图像集合并存储为 Tensorflow Records 以供将来处理,对处理有帮助吗?

任何指导或解决方案,非常感谢。谢谢。

编辑:- 我只匹配相同尺寸的图像。我不想只做直方图匹配。我想为图像相似性做 SSIM 或 PSNR 实现。所以,我假设它在颜色、内容等方面会相似

【问题讨论】:

  • 我认为提供您想要定义相似性的参数将帮助您获得更好的答案,您是否尝试在大小、颜色分布、内容等方面进行匹配?尝试更具体。

标签: tensorflow image-processing pytorch


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    查看 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() 来评估它。

    【讨论】:

    • 我通读了文档,但是我们如何从返回的张量中获得相似度的百分比?您能否为max_val 参数添加一些解释?
    • max_val 是图像中值的范围。可能 255 就足够了。
    • 查看提到的论文。您不仅应该找到您正在寻找的东西,而且您可能会更好地了解它的工作原理和潜在的陷阱。
    • 您指的是答案中附加的文档链接还是其他论文?以及关于类似百分比的任何想法?这就是我主要寻找的。​​span>
    猜你喜欢
    • 2017-04-01
    • 2020-12-27
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 2011-08-09
    • 2020-05-23
    • 2014-10-03
    相关资源
    最近更新 更多