from Binary Dilation and Erosion by Luigi Rosa
Speed up binary dilation and erosion.

binero(im,se,imx_or)
function [out] = binero(im,se,imx_or)

if (isa(im,'uint32'))%-------------- UINT32-----
    if (~isa(se,'strel'))
        se=strel(se);
    end
    imx0=imx_or;
    seq=getsequence(se);
    lunghezza=size(seq,1);
    out=bero4(im,getnhood(seq(1)),2,imx0);
    for ii=2:lunghezza
        out=bero4(out,getnhood(seq(ii)),2,imx0);        
    end
else%-------------------------------------------
    if (~isa(se,'strel'))
        se=strel(se);
    end
    if (isa(im,'uint8'))
        uscita=1;
    end
    if (isa(im,'logical'))
        uscita=0;
    end    
    im_dim=size(im);
    imx=im_dim(1);
    imy=im_dim(2);
    if (imx<imy)
        im=im';
        seq=getsequence(se);
        lunghezza=size(seq,1);
        if (lunghezza==1)
            out=bero4(im,getnhood(seq(1))',uscita,imy);
            out=out(:,1:imx); 
            out=out';            
        else
            out=bero4(im,getnhood(seq(1))',2,imy);
            for ii=2:(lunghezza-1)
                out=bero4(out,getnhood(seq(ii))',2,imy);        
            end
            out=bero4(out,getnhood(seq(lunghezza))',uscita,imy);
            out=out(1:imy,1:imx); 
            out=out';            
        end
    else
        seq=getsequence(se);
        lunghezza=size(seq,1);
        if (lunghezza==1)
            out=bero4(im,getnhood(seq(1)),uscita,imx);            
        else
            out=bero4(im,getnhood(seq(1)),2,imx);
            for ii=2:(lunghezza-1)
                out=bero4(out,getnhood(seq(ii)),2,imx);        
            end
            out=bero4(out,getnhood(seq(lunghezza)),uscita,imx);
            out=out(1:imx,:);
        end
    end
end
%-----------------------------------------------

Contact us