image thumbnail
from Anaskel written in Matlab by Matt Fetterman
Translated anaskel.cpp into Matlab

NeighborOut=neighborhood(arr,i, j, nrow, ncol)
% //****************************************************************************
% //
% // neighborhood() returns a byte value representing the immediate neighborhood
% // of the specified point in bit form, clockwise from 12:00.
% //
% // R/O arr:  binary pixel array
% // R/O i,j:  coordinates of point
% // R/O nrow, ncol:  dimensions of binary image
% // Returns:  bit representation of 8-neighbors
% //
function NeighborOut=neighborhood(arr,i, j,  nrow,  ncol) 
   p = i+j*nrow;
   condition = 8*(i <= 1)+4*(j <= 1)+2*(i >= nrow-1)+(j >= ncol-1);
NeighborOut=0;
%   //mexPrintf("Condition:  %d\n",condition);
  switch (condition) 
  case 0,  %// all sides valid
    if (p-nrow-1)<1 | (p+nrow+1)>nrow*ncol,
        % too low or too high
        NeighborOut=0;
    else,
        NeighborOut= arr(p-1) + 2*arr(p+nrow-1) + 4*arr(p+nrow) +...
      8*arr(p+nrow+1)+ 16*arr(p+1) + 32*arr(p-nrow+1) +...
      64*arr(p-nrow) + 128*arr(p-nrow-1);
    end;
  case 1,  %// right side not valid
    NeighborOut= arr(p-1) + 16*arr(p+1) + 32*arr(p-nrow+1) +...
      64*arr(p-nrow) + 128*arr(p-nrow-1);
  case 2, % // bottom not valid
    NeighborOut =arr(p-1) + 2*arr(p+nrow-1) + 4*arr(p+nrow) +...
      64*arr(p-nrow) + 128*arr(p-nrow-1);
  case 3, % // bottom and right not valid
    NeighborOut= arr(p-1) + 64*arr(p-nrow) + 128*arr(p-nrow-1);
  case 4, % // left side not valid
    NeighborOut= arr(p-1) + 2*arr(p+nrow-1) + 4*arr(p+nrow) +...
      8*arr(p+nrow+1) + 16*arr(p+1);
  case 5, %// left and right sides not valid
     NeighborOut= arr(p-1) + 16*arr(p+1);
  case 6,  %// left and bottom sides not valid
    NeighborOut= arr(p-1) + 2*arr(p+nrow-1) + 4*arr(p+nrow);
  case 7,  % left, bottom, and right sides not valid
    NeighborOut= arr(p-1);
  case 8, % top side not valid
    NeighborOut= 4* arr(p+nrow) + 8*arr(p+nrow+1) + 16*arr(p+1) +... 
      32*arr(p-nrow+1) + 64*arr(p-nrow);
  case 9,  % top and right not valid
    NeighborOut= 16*arr(p+1) + 32*arr(p-nrow+1) + 64*arr(p-nrow);
  case 10,  % top and bottom not valid
    NeighborOut= 4*arr(p+nrow) + 64*arr(p-nrow);
  case 11,  % top, bottom and right not valid
    NeighborOut= 64*arr(p-nrow);
  case 12,  % top and left not valid
    NeighborOut= 4*arr(p+nrow) + 8*arr(p+nrow+1) + 16*arr(p+1);
  case 13,  % top, left and right sides not valid
    NeighborOut= 16*arr(p+1);
  case 14,  % top, left and bottom sides not valid
    NeighborOut= 4*arr(p+nrow);
  case 15,  % no sides valid
    NeighborOut= 0;
  end; % end switch condition
NeighborOut=NeighborOut+1; % because in Matlab, indices start at 1 not 0

Contact us at files@mathworks.com