1

関数を書こうとしています

[offset,coffset]=findLowNhbr(map) 

aの各ピクセルについて、そのピクセルにmap隣接する8つの行列を検索し、行と列の両方のオフセットが最も低い隣接ピクセルにある2つの行列を返します(数値-1、0、および1を使用)。境界ピクセルには隣接ピクセルがないため、行と列の両方に0のオフセットが与えられます。

この関数の一般的な計画は次のようになります。

  1. 各点について、8つの最近傍を見つけます。
  2. 隣人がポイントより低い場合は、-1を返します
  3. ネイバーがポイントと同じ標高にある場合は、0を返します
  4. 隣人がポイントより高い場合は、+1を返します
  5. これらのオフセットを2つの行列に格納します。

どこから始めたらいいのかわからないので、アドバイスや質問は大歓迎です!

4

2 に答える 2

1

おっしゃっている意味がよくわかりませんが、次のことを参考にしてください。

neighbors = cell(size(map));

for ii = 2:size(map,1)-1
    for jj = 2:size(map,1)-1

        % current element
        M = map(ii,jj);

        % extract neighbors
        N = map(ii-1:ii+i, jj-1:jj+1);

        % compare values and store
        neighbors{ii,jj} = M<N - M>N;            

    end
end

これにより、neighborsと同じ数の要素を含むcell-array が生成されますmapが、各エントリは次のようになります。

>> neighbors{2,3}
ans = 
    0  -1   1
    1   0  -1
    1   0  -1

これは、ピクセルのすべての近傍に関する情報(2,3)です。

于 2012-11-09T16:57:52.490 に答える
0

編集:これは、map_original が元のマップであると仮定して、マップのすべての側面に inf を追加する方法です。

map=inf(size(map_original)+2)
map(2:end-1,2:end-1) = map_original

マップのすべての側面に infs を埋め込んだと仮定すると、次のように開始できます。

area =-1:1;
for i=2:size(map,1)-1
    for j = 2:size(map,2)-1
         bestfound=inf;
         bestk=0;
         bestl=0;
         for k = area
             for l=area
                if k~=0 && l~=0

私が言ったように、これはあなたを始めるだけです!

于 2012-11-09T16:38:50.280 に答える