[英]FFT to get the similarity between 2 images
我的目标是能够获得2 张图像之间的相似度百分比。
关键是我对相似性的定义在这种情况下有点特殊。
以下是我想要实现的一些示例:
图像 A
类似于
图像之二
然而,
图像 B
与图像 A(或 A bis)不相似,但类似于
图像 B 之二
我已经尝试遵循此处描述的方法: Checking images forsimilarity with OpenCV but it didn't work in my case... 事实上,黑色背景与图像 A 相比,图像 A bis 与图像 A 更相似。
PS:我也尝试了颜色,但结果是一样的:
图像 A 彩色
图像 A bis 彩色
图像 B 彩色
我做了更多的研究,有人告诉我,我可以使用 FFT(快速傅里叶变换)和 openCV(这是我使用的)来实现我想要的。
应用 FFT 时,这是我得到的:
图像 A FFT
图像 A bis FFT
图像 B FFT
图像 B 之二 FFT
这让我想到了这些问题:FFT 真的可行吗? 如果是,我可以尝试用我的幅度谱做什么? 如果没有,还有其他方法可以解决我的问题吗?
PS:我宁愿不使用 ML 或深度学习 id。
谢谢! (对图片数量感到抱歉)
编辑 1 :
您的指标可能是重叠像素的数量除以两个图像的逻辑和
为什么到目前为止我还没有这样做:因为有时,您在示例中看到的表单可能位于图像顶部,而我示例中的表单位于底部。 此外,一种形式可能比示例中的形式小得多,即使它们仍然相同。
编辑 2 :
我正在寻找当地的相似性。 实际上,只要表单本身与示例的形状相同,大小并不重要。 可能更大,更小,位于顶部,底部......这完全取决于表格的形状。 但是,for form 必须在同一个方向和旋转。
例如,这里有两个必须归类为 Image A 的图像:
编辑 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.