1

Matlabでは、コードの前の段階で特定の要素が選択されたマトリックスを作成しました。マトリックスのこの点から、特定の半径の周囲のすべての隣接間の最大値だけでなく、特定の方向角度での最大値を見つけたいと思います。これを例で説明しましょう。

これは行列 A です。

A =

 0     1     1     1     0     0     9     1     0     
 0     2     2     4     3     2     8     1     0     
 0     2     2     3     3     2     2     1     0     
 0     1     1     3     2     2     2     1     0     
 0     8     2     3     3     2     7     2     1    
 0     1     1     2     3     2     3     2     1     

最初の段階で選択された要素は A(2,4) の4であり、次の要素は最大値である必要があります。たとえば、方向の角度が 315 度、つまりA(5,7)の7です。 .

私が行ったことは、角度に応じて、行列 A をさまざまな象限に分割し、その象限の値のみを使用して新しい行列 (A の部分行列) を作成することです。

したがって、この例では、部分行列は A の第 4 象限になります。

q_A =

 4     3     2     8     1     0     
 3     3     2     2     1     0     
 3     2     2     2     1     0     
 3     3     2     7     2     1     
 2     3     2     3     2     1     

そして今、ここに私の質問があります。どうすれば7を抽出できますか?

私ができる唯一のこと(そしてそれが機能すること)は、しきい値を超えるすべての値を見つけて、それらのポイントがどのように方向付けられているかを計算することです。次に、指定された方向と同様の方向 (この例では 315 度) を持つすべての値を保存し、最終的にそれらの中で最大値を見つけます。それは機能しますが、はるかに高速で「よりクリーンな」ソリューションがあると思います。

4

2 に答える 2

1

以下は、問題に対する比較的安価な解決策ですが、マトリックス座標系に頭を悩ませるのは本当に苦痛であり、おそらく多少整理する余地があります。指定された角度で開始点の周りの線に沿ってすべてのマトリックス エントリをトレースするだけです (すべての座標と角度はもちろんマトリックス インデックスの単位に基づいています)。

A = [ 0     1     1     1     0     0     9     1     0
      0     2     2     4     3     2     8     1     0
      0     2     2     3     3     2     2     1     0
      0     1     1     3     2     2     2     1     0
      0     8     2     3     3     2     7     2     1
      0     1     1     2     3     2     3     2     1 ];
alph = 315;
r = 2;
c = 4;
% generate a line through point (r,c) with angle alph
[nr nc] = size(A);
x = [1:0.1:nc]; % overkill
m = tan(alph);
b = r-m*c;
y = m*x + b;
crd = unique(round([y(:) x(:)]),'rows');
iok = find((crd(:,1)>0) & (crd(:,1)<=nr) & (crd(:,2)>0) & (crd(:,2)<=nc));
crd = crd(iok,:);
indx=sub2ind([nr,nc],crd(:,1),crd(:,2));
% find max and position of max
[val iv]=max(A(indx)); % <-- val is the value of the max
crd(iv,:)             % <-- matrix coordinates (row, column) of max value

結果:

val =

     7


iv =

     8


ans =

     5     7
于 2013-08-07T15:08:24.413 に答える