2016-10-03 7 views
0

私はマトリックスにポイントAを持っています。私は、8つの接続されたピクセルの周りの特定のピクセル値( '30')を検索できました。 'A'の近傍(値 '00')。 'find'関数は、ポイント 'A'の周りの関心のピクセル値のインデックス(例えば '1')を返します。Matlabの以前に見つかったピクセルインデックスを使用してピクセルを見つける方法

ここで問題は、最初の検索で返されたインデックス情報を使用して、最初のピクセル値 '30'に接続されている別のピクセル(同じ値のもの)を正確に見つける必要があることです。 2番目のピクセル値 '30'は、 'A'のすぐ隣にはありませんが、すぐ隣接しています。これまで

コード:

img = [20 20 20 20 20 20 20; 
     20 30 20 20 20 20 20; 
     20 20 30 20 20 20 20; 
     40 40 10 00 20 20 20; 
     40 40 10 40 40 40 40; 
     40 10 10 40 40 40 40; 
     10 10 10 40 40 40 40] 

[Arow, Acol]  = find(img==00) 
AIdx    = sub2ind(size(img), Arow, Acol); 
M    = size(img, 1); 
neighbor_offsets = [-M-1, -M, -M+1, -1, 1, M-1, M, M+1]; 

%Compute index array of the immediate neighbors of ‘A’ 
Aneighbors  = bsxfun(@plus, AIdx, neighbor_offsets); 

%search for pixel value of ‘30’ in the immediate neighbors of ‘A’ 
find(img(Aneighbors)==30) 

コードの最後の行を返す1のインデックスは、それが他の30を見つけるために、この情報を使用することは可能ですか?

私は次のように私は簡単「A」(2「30」が存在する)の次のすぐ隣の別のインデックス配列を作成することにより、この第2の画素値を見つけることができる知っている:

neigh_Aneighbor_offsets = [(-2*M)-2, (-2*M)-1, (-2*M), (-2*M)+1,(-2*M)+2, -M-2, -M+2, -2, 2, M-2, M+2, (2*M)-2, (2*M)-1, (2*M), (2*M)+1, (2*M)+2]; 

%Compute index array of the 2nd immediate neighbors of ‘A’ 
neigh_Aneighbors  = bsxfun(@plus, Aidx, neigh_Aneighbor_offsets); 

%Search for the 2nd pixel value of ‘30’ in the next immediate neighborhood of ‘A’ 
find(img(neigh_Aneighbors)==30) 

をしかし、私は私がすでに見つけた第一の「30」の場所以外は何も知らないと仮定することによってこれを見つけたいだけです。 いずれにせよ、私はこれについてどうやって行くのか分かりません。いかなる助言/示唆/助言も正当に評価されます。

+0

あなたは、最初の結果の8連結近傍で検索しようとしていますか?すなわち、第2の'30 'が(2,5)に位置していれば、それでもそれを探したいでしょうか?また、find(img(Aneighbors == 30))ではなくfind(img(Aneighbors)== 30)を使いたいと思っています。 – KQS

+0

はい!私は中心00の2番目の近所にあるすべての30の可能性を見つけたいと思っています。さらに、あなたは "find(img(Aneighbors)== 30)"について正しいです。私は推測している。ありがとうございました。 – oma11

+1

私はまだあなたが何をしようとしているのかよく分かりません。あなたが今説明したのは、「30 'の最初のピクセル値に接続された別のピクセル...」を見つけることと全く同じではありません。あなたが「中心00の第2の近所」と呼んだのは、第1の「30」の場所には依存しません。 – KQS

答えて

1

だけ変数ffindの結果を保存し、Aneighbors(f)から適切Aidxを得る:

f=find(img(Aneighbors)==30) 
Aidx = Aneighbors(f) 
Aneighbors=bsxfun(@plus, Aidx, neighbor_offsets) 
f=find(img(Aneighbors)==30) 
+0

恐ろしい!..ありがとうrahnema – oma11

関連する問題