-2

我有两张图片,我想要一个响应(真或假)来知道它们是否不同。图片大小不一样。

4

2 回答 2

9

简单的虚拟方法:调整最大图像的大小以匹配最小图像的大小并进行比较。

考虑以下图像并分别从 1 到 4 枚举它们:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

要比较两个图像ij请使用 3-lobed lanczos 将它们中最大的一个调整为另一张的尺寸,这可以PIL通过do 方便地获得img1.resize(img2.size, Image.ANTIALIAS)。现在,您可以使用例如比较 url 中的图像与 python 中的文件系统中的图像中描述的指标进行比较

以下是分别使用链接答案中提供的度量 SSIM 和 NRMSE 的相似性结果:

图像 1
   -> 2:[0.98, 0.97];
   -> 3: [0.96, 0.98];
   -> 4: [0.99, 0.99];

图片 2:
   -> 3:[0.98, 0.97];
   -> 4: [0.98, 0.93];

图片 3:
   -> 4:[0.97, 0.98]。

这些值最大为 1,表示根据度量标准图像完全相同。因此,如您所见,这些值非常接近 1。您所要做的就是在附近选择一个阈值,True如果指标给出的结果高于阈值则返回,False否则返回。

于 2013-01-18T21:20:08.697 回答
-1

没有一种方法是完美的,但您可以尝试:

  1. 定义定义为图像大小百分比的样本大小
  2. 定义要采集的样本数量
  3. 将样本区域分布在两个图像中
  4. 在每个样本中,对样本区域中所有像素的颜色值进行平均
  5. 对于每对平均样本区域颜色值,验证它们是否在一些小的误差范围内
  6. 定义匹配样本数量的阈值,以在您感到满意的水平上平衡假阴性和假阳性
  7. 如果满足阈值,则返回表示图像匹配的结果,否则返回表示它们不匹配的结果

因此,假设您从 2 张图像开始,尺寸分别为 100X100 和 200X200,并且您决定要在每个维度的 10% 处对区域进行采样,其中包含 4 个样本。您将平均并比较:

  • x0-9, y0-9 到 x0-19, y0-19
  • x90-99, y0-9 到 x180-199, y0-19
  • x0-9, y90-99 到 x0-9, y180-199
  • x90-99、y90-99 到 x180-199、y180-199
于 2013-01-18T18:47:50.867 回答