MATLAB: Finding neighbor value

neighbor

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)

Best Answer

  • 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);