在 python 上比较图像并允许像素偏移差异

Posted

技术标签:

【中文标题】在 python 上比较图像并允许像素偏移差异【英文标题】:Compare images on python and allow pixel shift difference 【发布时间】:2020-11-17 08:05:19 【问题描述】:

实现精明边缘检测器后,我必须将结果与人类检测到的结果进行比较,并计算精度和召回率(通过比较每个像素)。两个图像都是二进制的。 问题是,我必须允许图像之间大小为 1 的像素偏移。这意味着如果我在 E(i,j) 中的值为 1 并且参考图像在 GT(i-1,j) 中具有它,那么仍然会有匹配。这种偏移对于每个像素都是单独的,并且可以在任何方向上。 对于实现,我必须使用掩码或函数 cv2.dilate(),但由于通过使用 dilate 我们打开了更多像素,因此每个像素都可以与参考图像中的一个匹配,因此为每个原始图像创建多个匹配项像素,这是不允许的。 有谁知道如何在不为每个像素创建多个匹配的情况下允许像素移位?

【问题讨论】:

你能发布 E 和 GT 的示例参考图像吗? 根据我从您的问题中了解到的情况,使用 3x3 掩码,所有 1 运行在所有 GT(i, j) 上对应的 E(i, j) 应该能够实现您正在寻找的东西。 【参考方案1】:

可能的蛮力解决方案可能如下所示:

num_feature_pixels = 0
matches = 0
for i in num_rows:
    for j in num_cols:
        if GT[i, j] == 1:
            num_feature_pixels += 1
                for k in 9:
                    row = k / 3
                    col = k % 3
                    if GT[i, j] == E[i - 1 + row, j - 1 + col]:
                        matches += 1
                        break
# Do something with the matches to total positives ratio

尽管在此方法中出现一些误报的可能性很高,因为无法确定 3x3 窗口中匹配的像素是否实际上是 E 图像中像素的基本事实。

【讨论】:

以上是关于在 python 上比较图像并允许像素偏移差异的主要内容,如果未能解决你的问题,请参考以下文章

Matlab - 如何计算图像像素偏移

裁剪掉透明像素但保留偏移量

Java BufferedImage,写入底层光栅,像素在最终图像中出现偏移

视口背景-图像小偏移

利用gdal读高光谱图像数据问题(按像素读)?

使用 CSS 从右侧偏移背景图像