两个 Java OpenCV 矩阵之间的距离

Posted

技术标签:

【中文标题】两个 Java OpenCV 矩阵之间的距离【英文标题】:Distance between two Java OpenCV matrices 【发布时间】:2014-04-22 17:54:41 【问题描述】:

我有两个 Java OpenCV Matrices (Mat)(它们是两个图像的 DFT)。

计算这两个矩阵之间“距离”的最佳方法是什么? (假设两个视觉上相似的 DFT 的距离很小)

【问题讨论】:

【参考方案1】:

对此可能没有一个最佳答案,因为这取决于您要如何衡量图像的相似性。不过,我们可以尝试几种想法,看看哪种方法最适合您的情况:

一个简单的想法是计算矩阵中每个单元格的平方误差(假设矩阵具有相同的维度 ROWS、COLS)。因此,矩阵 M1 和 M2 的距离度量为:

MAT diff_matrix = M1 - M2;
double distance = diff_matrix.norm();

如果矩阵具有不同的维度,只需将新的行/列添加到具有较少行/列的矩阵中,并用 0 填充这些额外的条目。

在您想要检测一个矩阵与其他矩阵在相同区域共享几乎相同颜色的情况下,上述想法非常有效。但是,根据您的 DFT 定义和颜色的测量方式,将一种颜色替换为另一种颜色可能会导致相似的图像被测量为完全不同。因此,另一个想法是首先通过使图像中最流行的第 k 个颜色对应于预定义颜色方案中的第 k 个颜色来规范化图像的颜色方案。

另一个想法是首先计算矩阵的特征向量,然后计算特征向量的差值,然后对差值求平方。如果矩阵不是方阵,则需要计算这些矩阵的奇异值分解 (SVD) 以执行这些操作。比较特征向量的优点是,只要矩阵的行或列的顺序相同,特征向量就会相同。

最后,您可以考虑混合使用这些想法,并将它们的结果组合成线性组合。

【讨论】:

以上是关于两个 Java OpenCV 矩阵之间的距离的主要内容,如果未能解决你的问题,请参考以下文章

在大数据的两个矩阵之间的所有列之间应用配对欧几里得距离

两个坐标列表的欧几里得距离矩阵

Matlab求两个向量之间的各种距离

从各个距离创建距离矩阵

使用 OpenCV 测量图像中对象之间的距离

matlab入门——矩阵运算