%bound2im源程序
function B=bound2im(b,M,N,x0,y0)
% BOUND2IM Converts a boundary to an image.
% B = bound2im(b) converts b, an np-by-2 or 2-by-np array
% representing the integer coordinates of a boundary, into a binary
% image with 1s in the locations defined by the coordinates in b
% and 0s elsewhere.
%
% B = bound2im(b, M, N) places the boundary approximately centered
% in an M-by-N image. If any part of the boundary is outside the
% M-by-N rectangle, an error is issued.
%
% B = bound2im(b, M, N, X0, Y0) places the boundary in an image of
% size M-by-N, with the topmost boundary point located at X0 and
% the leftmost point located at Y0. If the shifted boundary is
% outside the M-by-N rectangle, an error is issued. XO and X0 must
% be positive integers.
[np,nc]=size(b);
if np<nc
b=b';%To convert to size np-by-2.
[np,nc]=size(b);
end
%Make sure the coordinates are integers.
x=round(b(:,1));
y=round(b(:,2));
%Set up the default size parameters.
x=x-min(x)+1;
y=y-min(y)+1;
B=false(max(x),max(y));
C=max(x)-min(x)+1;
D=max(y)-min(y)+1;
if nargin==1
%Use the preceding defualt valuaes.
elseif nargin==3
if C>M | D>N
error('The boundary is outsize the M-by-N region.')
end
%The image size will be M-by-N.Set up the parameters for this.
B=false(M,N);
%Distribute extra rows appox. even between top and botton.
NR=round((M-C)/2);
NC=round((N-D)/2);%The same for columns.
x=x+NR;%Offset the boundary to new position.
y=y+NC;
elseif nargin==5
if x0<0 | y0<0
error('x0 and y0 must be positive integers.')
end
x=x+round(x0)-1;
y=y+round(y0)-1;
C=C+x0-1;
D=D+y0-1;
if C>M | D>N
error('The shifted boundary is outside the M-by-N region.')
end
B=false(M,N);
else
error('Incorrect number of inputs.')
end
B(sub2ind(size(B),x,y))=true;
bound2im.m
最新推荐文章于 2024-03-04 10:53:36 发布