1

matlabには、128xnの行列があります。

[ABC]

ここで、各文字は128x1のマトリックスです。

だから私がやりたいのは、上記の行列を別の行列と連結することです。

[A〜DE]。

ここで、A〜の値はAと似ています。連結の結果として取得したいのは次のとおりです。

[ABCDE]、

ここで、A〜は省略されます。

これを行うための最良の方法は何ですか?A〜が似ていることを事前に知らないことに注意してください。

明確にするために、私の問題は、2つの列が類似しているかどうかをどのように判断するかです。同様に、2つの列の間で、行の値の多くが値に近いことを意味します。

たぶんイラストも役立つでしょう

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

値が完全に異なる場合もありますが、ほとんどの場合、値は近いです。これに対する定義済みのしきい値はありませんが、理想的には、実験できるものになります。

4

3 に答える 3

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、より多くの背景について。

于 2012-07-12T06:22:56.540 に答える
0

同一の列のみを省略したい場合は、これが 1 つの方法です。

%# 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')';
于 2012-07-11T23:08:20.960 に答える
0

これを解決するには、vl_ubcmatch と呼ばれるマッチング アルゴリズムを使用できます。

[マッチ、スコア] = vl_ubcmatch(da, db) ; da の各記述子について、vl_ubcmatch は db で最も近い記述子を見つけます (それらの差の L2 ノルムによって測定されます)。元の一致のインデックスと最も近い記述子が一致の各列に格納され、ペア間の距離がスコアに格納されます。

ソース: http://www.vlfeat.org/overview/sift.html

したがって、解決策は、最高のスコアを持つ一致した列を見つけて、それらを除外してから連結することです。

于 2012-07-11T23:24:04.777 に答える