function B=hitnmiss(A,mask,exten) % Usage: B=hitnmiss(A,mask,exten) % hit and miss transform with 3 x 3 mask % to handle don't care, convert binary image into +1, -1 image % don't care entries are represented with 0. % A: binary matrix % mask: +1, -1 and 0 for don't care % B: binary output matrix, same size as A % exten (default = 1): Outside the boundary of A, it is assumed % by default, they are all -1s (0 extension). Don't care % extension has not been implemented yet. % % (C) 2003 by Yu Hen Hu % created: 12/1/2003 exten=1; % default extension. Other choices may be implemented in the % future. [ms,ns]=size(mask); if ms~=3 | ns~=3, error('mask size must be 3 x 3'),end thresh=sum(sum(abs(mask))); % number of elements that must be matched [m,n]=size(A); A=2*A-ones(m,n); m1=rem(m,3); if m1~=0, m1=3-m1; end n1=rem(n,3); if n1~=0, n1=3-n1; end Aa=[-exten*ones(m+m1+2,1) [-exten*ones(1,n);A;-exten*ones(m1+1,n)] ... -exten*ones(m+m1+2,n1+1)]; % border is 0 extension by default [ma,na]=size(Aa); m2=floor(ma/3); n2= floor(na/3); % mask 1: foreground, -1: background, 0: don't care % bigmask=kron(ones(m2,n2),mask); [m3,n3]=size(bigmask); Ahm=zeros(m+m1,n+n1); for i=1:3, for j=1:3, tmp=bigmask.*Aa(i:m3+i-1,j:n3+j-1); tmp1=blkproc(tmp,[3 3],'sum(sum(x))'); Ahm([1:3:m]+i-1,[1:3:n]+j-1)=[tmp1==thresh]; end end B=Ahm([1:m],[1:n]);