繁体   English   中英

FFT 获取 2 张图像之间的相似度

[英]FFT to get the similarity between 2 images

我的目标是能够获得2 张图像之间的相似度百分比

关键是我对相似性的定义在这种情况下有点特殊。

以下是我想要实现的一些示例:

图像 A

图像 A

类似于

图像之二

图像之二

然而,

图像 B

图像 B

与图像 A(或 A bis)不相似,但类似于

图像 B 之二

图像 B 之二

我已经尝试遵循此处描述的方法: Checking images forsimilarity with OpenCV but it didn't work in my case... 事实上,黑色背景与图像 A 相比,图像 A bis 与图像 A 更相似。

PS:我也尝试了颜色,但结果是一样的:

图像 A 彩色

图像 A 彩色

图像 A bis 彩色

图像 A bis 彩色

图像 B 彩色

图像 B 彩色

我做了更多的研究,有人告诉我,我可以使用 FFT(快速傅里叶变换)和 openCV(这是我使用的)来实现我想要的。

应用 FFT 时,这是我得到的:

图像 A FFT

图像 A FFT

图像 A bis FFT

图像 A bis FFT

图像 B FFT

图像 B FFT

图像 B 之二 FFT

图像 B 之二 FFT

这让我想到了这些问题:FFT 真的可行吗? 如果是,我可以尝试用我的幅度谱做什么? 如果没有,还有其他方法可以解决我的问题吗?

PS:我宁愿不使用 ML 或深度学习 id。

谢谢! (对图片数量感到抱歉)

编辑 1

您的指标可能是重叠像素的数量除以两个图像的逻辑和

为什么到目前为止我还没有这样做:因为有时,您在示例中看到的表单可能位于图像顶部,而我示例中的表单位于底部。 此外,一种形式可能比示例中的形式小得多,即使它们仍然相同。

编辑 2

我正在寻找当地的相似性。 实际上,只要表单本身与示例的形状相同,大小并不重要。 可能更大,更小,位于顶部,底部......这完全取决于表格的形状。 但是,for form 必须在同一个方向和旋转。

例如,这里有两个必须归类为 Image A 的图像:

图像之二之二 图像 A bis bis bis

编辑 3

您看到的图片是 30 个堆叠的手部动作帧。 这就是为什么在图像 A* 中您会看到 2 个斑点 --> 从左向右滑动并且 AI 没有检测到中间的手。 因为滑动并不完美,这就是为什么“斑点”每次都不在同一高度的原因。 此外,如果手靠近相机,您将获得图像 A,如果更远,您将获得EDIT 2部分的图像 A bis bis。

编辑 4

当我尝试使用 IoU 关于@Christoph Rackwitz 的答案时,IoU 的问题在于它在图像 A 和图像 A 较小的情况下不起作用(请参阅编辑 2图像)。

联合交叉路口

图片

files = [ "A svk5g.png", "A bis aWBFd.png", "B x8214.png", "B bis b3Bdw.png" ]
ims = [cv.imread(f, cv.IMREAD_GRAYSCALE).astype(bool) for f in files]

def iou(a, b):
    return np.sum(a & b) / np.sum(a | b)

scores = np.array([[iou(a,b) for b in ims] for a in ims])
array([[1.     , 0.88364, 0.07373, 0.08069],
       [0.88364, 1.     , 0.06857, 0.06803],
       [0.07373, 0.06857, 1.     , 0.30637],
       [0.08069, 0.06803, 0.30637, 1.     ]])

所以你看,“A”和“A bis”之间的匹配率为 88%,“B”和“B bis”之间的匹配率仅为 30%,A* 和 B* 之间的匹配率为 7-8%。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM