无论大小如何,Python图像比较

时间:2013-01-18 17:54:08

标签: python image image-processing python-imaging-library

我有两张图片,我想要一个回复(真或假)来知道它们是不同的。 图像大小不同。

2 个答案:

答案 0 :(得分:7)

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

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

enter image description here enter image description here enter image description here enter image description here

要比较两张图片ij,请使用3瓣lanczos将其中最大的图片调整为另一张图片的尺寸,PIL可通过img1.resize(img2.size, Image.ANTIALIAS)方便地查看{1}}。现在,您将继续使用例如Comparing image in url to image in filesystem in 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否则。

答案 1 :(得分:-1)

没有方法是完美的,但你可以尝试:

  1. 定义样本大小,定义为图像大小的百分比
  2. 定义您要采取的样本数量
  3. 在两个图像上分布样本区域
  4. 在每个样本中,平均样本区域中所有像素的颜色值
  5. 对于每对平均样本区域颜色值,验证它们是否在一个小的误差范围内
  6. 定义匹配样本数量的阈值,以便在您感到满意的水平上平衡假阴性和误报
  7. 如果达到阈值,则返回表示图像匹配的结果,否则返回表示不符合的结果
  8. 因此,假设您从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