我有兩個Java OpenCV Matrices (Mat)(它們是兩個圖像的DFT)。兩個Java OpenCV矩陣之間的距離
什麼是計算這兩個矩陣之間「距離」的最佳方法? (假設兩個視覺上相似的DFT將具有很小的距離)
我有兩個Java OpenCV Matrices (Mat)(它們是兩個圖像的DFT)。兩個Java OpenCV矩陣之間的距離
什麼是計算這兩個矩陣之間「距離」的最佳方法? (假設兩個視覺上相似的DFT將具有很小的距離)
對此,可能沒有一個最佳答案,因爲它取決於您想要如何度量圖像的相似度。然而,我們可以嘗試幾個想法,看看什麼適合您的情況:
一個簡單的想法是計算矩陣中每個單元的平方誤差(假設矩陣具有相同的尺寸ROWS,COLS)。因此,對於矩陣M1和M2的距離度量是:
MAT diff_matrix = M1 - M2;
double distance = diff_matrix.norm();
如果矩陣具有不同的尺寸,只需要添加新的行/列以更少的行/列矩陣和填補這些額外的條目以0。
上面的想法在你想要檢測到一個矩陣與其他區域在相同區域中的顏色幾乎相同的情況下工作得很好。但是,根據您的DFT定義以及如何測量顏色,將另一種顏色替換爲另一種顏色可能會導致其他類似圖像的測量結果相當不同。因此,另一個想法是首先通過使圖像中第k個最流行的顏色與預定義的顏色方案中的第k個顏色相對應來對圖像的顏色方案進行歸一化。
另一個想法是首先計算矩陣的特徵向量,然後計算特徵向量的差異,然後平方差。如果矩陣不是正方形,則需要計算這些矩陣的奇異值分解(SVD)以執行這些操作。比較特徵向量的優點是隻要矩陣的行或列的排序相同,特徵向量就會相同。
最後,您可能會考慮將這些想法混合使用,並將其結果以線性組合結合起來。