www.pudn.com > lianma.rar > bound2im.m, change:2004-12-16,size:2224b

```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.

%   Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins
%   Digital Image Processing Using MATLAB, Prentice-Hall, 2004
%   \$Revision: 1.6 \$  \$Date: 2003/06/14 16:21:28 \$

[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 default values.
elseif nargin == 3
if C > M | D > N
error('The boundary is outside 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 approx. even between top and bottom.
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;
```