finding neighbor value

1 visualización (últimos 30 días)
Mohammad Golam Kibria
Mohammad Golam Kibria el 12 de Mayo de 2011
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
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
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