私が現在やっていることは、要素がお互いに近いかどうかを調べるために、ベクトル内のすべての要素間のユークリッド距離(要素は2D画像のピクセル位置です)を計算することです。私はベクトル内の各インデックスの値をインクリメンタルに取る参照ベクトルを作成します。基準ベクトルとピクセル位置ベクトルのすべての要素との間のユークリッド距離は、MATLAB関数 "pdist2"を使用して計算され、その結果がいくつかの条件に適用されます。しかし、コードを実行すると、この関数は計算に最も長くかかるようです(つまり、1回の実行で27,245回呼び出され、プログラム全体の実行時間の約54%に貢献しました)。これを行い、プログラムをスピードアップするより効率的な方法がありますか?乗ユークリッド距離についてはMATLAB:ユークリッド距離を効率的に計算するには?
[~, n] = size(xArray); %xArray and yArray are same size
%Pair the x and y coordinates of the interest pixels
pairLocations = [xArray; yArray].';
%Preallocate cells with the max amount (# of interest pixels)
p = cell(1,n);
for i = 1:n
ref = [xArray(i), yArray(i)];
d = pdist2(ref,pairLocations,'euclidean');
d = d < dTh;
d = find(d==1);
[~,k] = size(d);
if (k >= num)
p{1,i} = d;
end
end
まず、 'pdist2'は行列を入力として得ることができます(forループのポイントである必要はありません)。しかし、あなたのコードから、私はあなたの参照ピクセルから1の距離を持つピクセルインデックスだけを検索したいと思います。だから、私は全体のソリューションは、単純に(xとyのインデックスから1を追加し、減算する)はるかに簡単かもしれないと思う... –
私は、しきい値から1の距離を持つピクセルインデックスを検索しようとしていません。私は、ピクセルのインデックスの距離がリファレンスからの距離に対して特定の設定された閾値よりも小さいという条件(d = d