2012-07-11 17 views
1

在MATLAB我有一個128×n矩陣,我們可以稱之爲concating矩陣時忽略類似列垂直

[A B C]

其中每個字母是128由1點矩陣。

所以我想要做的就是CONCAT與另一矩陣上述矩陣,

[A〜d E]。

其中A〜在其值A. 我想與concat的結果會是怎樣的相似:

[ABCDE],

其中A 〜被省略。

這樣做的最好方法是什麼?請注意,我不知道A〜是否相似。

爲了澄清,我的問題是如何確定兩列是否相似?相似地,我指的是兩列之間的位置,許多行值接近於值。

也許插圖,將有助於以及

Vector A: [1 2 3 4 5 6 7 8 9]' 
      | | | | | | | | | 
Vector B: [20 2.4 4 5 0 7 7 7.6 10]' 

在有一些情況下,其中的值是完全不同的,但在大多數情況下的值接近。我沒有爲此定義的閾值,但理想情況下,這是我可以嘗試的東西。

+0

是你的問題a)如何確定A〜是否與A相似; b)如何只抓取矩陣的兩列;或c)完全是其他的東西? – tmpearce 2012-07-11 23:03:01

+0

是的,這是不明確的 – mathematician1975 2012-07-11 23:03:19

+1

你是什麼意思與'相似'?如果它不是**完全相同的**你的意思,那麼你應該定義一些方法來定義'相似性足以被省略',這樣你的問題就可以得到回答。 – nrz 2012-07-11 23:04:01

回答

0

爲了解決這個問題,可以用稱爲vl_ubcmatch匹配算法。

[matches,scores] = vl_ubcmatch(da,db);對於da中的每個描述符, vl_ubcmatch在db中查找最接近的描述符(通過它們之間差異的L2 標準測量)。原匹配的索引 和最接近的描述符存儲在每個匹配列中,並且該對之間的距離被存儲在分數中。

來源: http://www.vlfeat.org/overview/sift.html

因此,解決辦法是找到得分最高的匹配列,在連接前消滅他們。

0

如果你想省略只相同列,這是做這件事:

%# Define the example matrices. 

Matrix1 = [ 1 2 3; 4 5 6; 7 8 9 ]'; 

Matrix2 = [ 4 5 6; 7 8 10 ]'; 

%# Concatenate the matrices and keep only unique columns. 

OutputMatrix = unique([ Matrix1, Matrix2 ]', 'rows')'; 
0

我認爲這是你需要的pdist2。 請看下面的例子:

>> X = rand(25, 5); 
>> Y = rand(100, 5); 
>> Y(22, :) = 0.99*X(22,:); 
>> D = pdist2(X,Y, 'euclidean'); 
>> [~,ind] = min(D(:)); 
>> [i,j]=ind2sub(size(D),ind) 

    i = 
     22 
    j = 
     22 

這的確是我們操作的是相似的條目。有關更多背景信息,請閱讀help pdist2doc pdist2