良い午後、ポイントの近所をどのように勉強しますか?
行列の点P(x、y)の近傍を調べるにはどうすればよいですか?私の点P(x、y)はconnexe構成8において、例えば8ネイバーを有しており、Iは最小値を有する1つを抽出し、例えば
その座標取得する: r=rand(5)
とIは近傍領域を勉強したいですr(2,3)
良い午後、ポイントの近所をどのように勉強しますか?
行列の点P(x、y)の近傍を調べるにはどうすればよいですか?私の点P(x、y)はconnexe構成8において、例えば8ネイバーを有しており、Iは最小値を有する1つを抽出し、例えば
その座標取得する: r=rand(5)
とIは近傍領域を勉強したいですr(2,3)
の私が正しく理解している場合、あなたが必要とするすべてはその後v
を
sub=P(x-1:x+1,y-1:y+1)
[v i]=min(sub(:))
を行うことですが、最小値とi
がベクトル化部分行列でのインデックスです。 x
とy
の値にもとづいて元のインデックスを見つけるのは簡単です(matlabが列メジャーであることを覚えておいてください)。
この場合、隣人は[x、y] + [-1、-1]、[-1、0] ... [1,1]になります。現時点では、2つのことを単に無視します。つまり、これらの点が行列外になる可能性があり、その中心がそれらに含まれていることです。これらを無視すると、
neighbors = r(x-1:x+1, y-1:y+1); % 3x3 matrix.
となります。最小値とその位置を見つけるのは簡単です。
さて、再検討し、これらの2つの不作為:
まずあなたがパッドナンの行列がindex out of range
問題の世話をする必要があります(または単にエッジ点を見ていない、あなたは通常、彼らから多くのトラブルよりで終わります彼らの価値はとにかく)。
その後、あなたはマスクをする必要があり、中心を除外するには:最後に、最小の隣人を見つけることのような単純なものでした
mask = [true, true, true; true, false, true; true, true, true];
:
[minValue] = min(neighbors(mask));
これは確かに最小値を見つけるための素晴らしいが、ほとんど役に立ちません最小の位置を見つける。まあ、ここでは単純ですが、このマスクのために5ポイントミスがあります。一般的に、マスクはより大きな円形であるかもしれません(距離が<のすべての点を指し示すだけであれば)この線形インデックスは元の点に戻ります。
単純な回避策は、単に座標と中心座標追加するminPosLinearを整形、この時点で
neighbors(~mask) = nan; % set values you don't want to nan.
[minValue, minPosLinear] = min(neighbors(:))
あろう。
この手順は、ポイントの他の形状を検索するために簡単に拡張されます。単純に十分な大きさのパディングを作成するか、または十分な大きさの最初の矩形ウィンドウと適切なマスクを作成します。