我有两张图片,我想要一个响应(真或假)来知道它们是否不同。图片大小不一样。
2 回答
简单的虚拟方法:调整最大图像的大小以匹配最小图像的大小并进行比较。
考虑以下图像并分别从 1 到 4 枚举它们:
要比较两个图像i
,j
请使用 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
否则返回。
没有一种方法是完美的,但您可以尝试:
- 定义定义为图像大小百分比的样本大小
- 定义要采集的样本数量
- 将样本区域分布在两个图像中
- 在每个样本中,对样本区域中所有像素的颜色值进行平均
- 对于每对平均样本区域颜色值,验证它们是否在一些小的误差范围内
- 定义匹配样本数量的阈值,以在您感到满意的水平上平衡假阴性和假阳性
- 如果满足阈值,则返回表示图像匹配的结果,否则返回表示它们不匹配的结果
因此,假设您从 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