假设我有两个4 * 4矩阵(表示二进制图像),我想计算两个矩阵上显示的模式的相似性得分(从0到1)。 “on”像素的数量在两个矩阵之间总是相同的,例如:
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中编写了一个初始测试实现,所以两者中的库都没问题。)
答案 0 :(得分:1)
似乎与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
答案 1 :(得分:0)
这是直接的计算机视觉,但这是一个天真的启动:Convole每个可能的安排两个矩阵相互之间。