我有两个 Java OpenCV Matrices (Mat)(两张图片的DFT)。
计算这两个矩阵之间“距离”的最佳方法是什么? (假设两个视觉上相似的DFT的距离很小)
答案 0 :(得分:0)
对此可能没有一个最佳答案,因为它取决于您想要如何测量图像的相似性。但是,我们可以尝试一些想法,看看哪种方法最适合您的情况:
一个简单的想法是计算矩阵中每个单元的平方误差(假设矩阵具有相同的尺寸ROWS,COLS)。因此,矩阵M1和M2的距离度量将是:
MAT diff_matrix = M1 - M2;
double distance = diff_matrix.norm();
如果矩阵具有不同的维度,只需将新的行/列添加到具有较少行/列的矩阵中,并用0填充这些额外的条目。
在您希望检测到一个矩阵与其他矩阵在相同区域中共享几乎相同颜色的情况下,上述想法非常有效。但是,根据您的DFT定义以及如何测量颜色,将一种颜色替换为另一种颜色可能会导致其他相似的图像被测量为完全不同。因此,另一个想法是首先通过使图像中最第k个最流行的颜色与预定义颜色方案中的第k个颜色相对应来规范化图像的颜色方案。
另一个想法是先计算矩阵的特征向量,然后计算特征向量的差值,然后对差异求平方。如果矩阵不是方形,则需要计算这些矩阵的奇异值分解(SVD)以执行这些操作。比较特征向量的优点是,只要矩阵的行或列的排序相同,特征向量就是相同的。
最后,您可以考虑将这些想法混合在一起,并将其结果组合成线性组合。