0001 function B = vb_erosion_2d(B, R)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 [N1,N2] = size(B);
0016
0017 Bo = zeros(N1,N2);
0018 Bx = zeros(N1,N2);
0019
0020
0021
0022 j1d = 1:(N1-1);
0023 j1u = 2:N1;
0024
0025 j2d = 1:(N2-1);
0026 j2u = 2:N2;
0027
0028
0029 iz = find( B == 0 );
0030 Bo(iz) = 1;
0031
0032
0033 Bx(j1d, : ) = Bx(j1d, : ) + B(j1u, : );
0034 Bx(j1u, : ) = Bx(j1u, : ) + B(j1d, : );
0035 Bx( : ,j2d) = Bx( : ,j2d) + B( : ,j2u);
0036 Bx( : ,j2u) = Bx( : ,j2u) + B( : ,j2d);
0037
0038
0039 Bx = Bx.*Bo;
0040
0041
0042 iz = find( Bx > 0 );
0043 Nz = length(iz);
0044
0045
0046 [j1,j2] = ind2sub([N1,N2], iz );
0047
0048
0049 Rmax = ceil(R);
0050 x = -Rmax:Rmax;
0051
0052 [x1, x2 ] = ndgrid(x);
0053
0054 jx = find( (x1.^2 + x2.^2 ) <= R^2 );
0055
0056 x1 = x1(jx);
0057 x2 = x2(jx);
0058
0059 NN = length(jx);
0060
0061
0062 k1 = zeros(Nz,1);
0063 k2 = zeros(Nz,1);
0064
0065 for n=1:NN,
0066
0067 k1 = j1 + x1(n);
0068 k2 = j2 + x2(n);
0069
0070
0071 k1 = max(k1,1);
0072 k2 = max(k2,1);
0073
0074 k1 = min(k1,N1);
0075 k2 = min(k2,N2);
0076
0077
0078 inx = k1+ N1*(k2 - 1);
0079
0080 B(inx) = 0;
0081 end;