finding neighbor value

Hi,
suppose I have a large matrix A of size 200X200
I need to know the neighbor value and also the neighbor position of distance 3 of the position (50,50)
can it be done easily
A =
1 2 3
3 3 6
4 6 8
4 7 7
here (2,2) value is 3. its one distance neighbor is 1,2,3,3,6,4,6,8 and position is (1,1),(1,2),(1,3),(2,1),(2,3), (3,1),(3,2),(3,3)

 Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 12 de Mayo de 2011

0 votos

variant
A = randi(170,200);
sz = size(A);
center = [50 50];
N = 3;
Outnum = A(max(abs(repmat(1:sz(2),size(A,1),1) - center(1)) ,...
abs(repmat((1:sz(1))',1,size(A,2)) - center(2))) == fix(N/2));
more with bwdist from Image Processing Toolbox
A = randi(170,200);
sz = size(A);
center = [50 50];
N = 3;
AA = zeros(sz);
AA(center(1),center(2)) = 1;
Outnum = A(bwdist(AA,'chessboard')==fix(N/2));
Hi Oleg! Variant for N > 3
A = randi(170,17,13);
sz = size(A);
center = [8 7];
N = 5;
ons = ones(N);
ons(2:end-1,2:end-1) = 0;
ij = bsxfun(@plus, center.'-fix(N/2),0:N-1);
Outnum = A(ij(1,:),ij(2,:)).*ons;
Outnum = Outnum(Outnum>0);

2 comentarios

Oleg Komarov
Oleg Komarov el 12 de Mayo de 2011
Too complicated IMHO.
Sean de Wolski
Sean de Wolski el 12 de Mayo de 2011
I'd roll with bwdist or A(imdilate(A == 3,ones(3)))

Iniciar sesión para comentar.

Más respuestas (1)

Oleg Komarov
Oleg Komarov el 12 de Mayo de 2011

0 votos

EDITED
To make it flexible n = distance from center
A = randi(170,17,13);
center = [8 7];
n = 2;
% Boundary check
if all(pos - n) && all(pos + n <= size(A))
B = A(center(1)-2:center(1)+2, center(2)-n:center(2)+n).';
B = B([1:2*n*(n+1) 2*(n^2 + n + 1):end]);
end

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by