给定两个相同大小的二进制矩阵,计算模式相似度分数

3 投票
2 回答
1073 浏览
提问于 2025-04-17 14:55

假设我有两个4*4的矩阵(它们代表的是二进制图像),我想计算这两个矩阵中显示的图案的相似度分数(范围从0到1)。这两个矩阵中“开”像素的数量总是相同的,比如:

M1
0 1 1 1
0 0 0 1
0 0 0 0
0 0 0 0

M2
0 0 0 0
0 0 0 0
1 1 1 0
0 0 1 0

M3
1 0 0 1
0 0 0 0
0 0 0 0
1 0 0 1

M4
0 0 0 0
1 1 1 0
0 0 0 1
0 0 0 0

在这种情况下,我希望M1和M2的相似度分数是完美的(1),因为图案的位置并不重要。M1和M3的分数应该很低,而M1和M4的分数会比较高,但不是完美的。目前,我只关心方向相同的图案,所以不需要检查图案的方向。

如果有任何帮助或者相关算法的推荐,我会非常感激!

最终的实现会用Matlab写,但我现在在用Python写一个初步的测试实现,所以这两种语言的库都可以用 :)

2 个回答

0

这涉及到计算机视觉的内容,不过我给你一个简单的入门建议:把这两个矩阵进行卷积操作,也就是把它们在所有可能的排列方式下相互叠加。

2

看起来对 conv2 的操作可能会有关系,但这只是个建议。这里有另一种方法,因为 M1 和 M2 是一样的,它们有相同的主成分,所以 svd 可以作为相似度的一个衡量标准,比如:

abs(sum(svd(M1)-svd(M2)))
ans =
   1.1102e-16

abs(sum(svd(M1)-svd(M4)))
ans =
   0.1189

abs(sum(svd(M3)-svd(M4)))
ans =
    0.7321

撰写回答