📄 imstack2vectors.m
字号:
function [X, R] = imstack2vectors(S, MASK)
%IMSTACK2VECTORS Extracts vectors from an image stack.
% [X, R] = imstack2vectors(S, MASK) extracts vectors from S, which
% is an M-by-N-by-n stack array of n registered images of size
% M-by-N each (see Fig. 11.24). The extracted vectors are arranged
% as the rows of array X. Input MASK is an M-by-N logical or
% numeric image with nonzero values (1s if it is a logical array)
% in the locations where elements of S are to be used in forming X
% and 0s in locations to be ignored. The number of row vectors in X
% is equal to the number of nonzero elements of MASK. If MASK is
% omitted, all M*N locations are used in forming X. A simple way
% to obtain MASK interactively is to use function roipoly. Finally,
% R is an array whose rows are the 2-D coordinates containing the
% region locations in MASK from which the vectors in S were
% extracted to form X.
% 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/11/21 14:37:21 $
% Preliminaries.
[M, N, n] = size(S);
if nargin == 1
MASK = true(M, N);
else
MASK = MASK ~= 0;
end
% Find the set of locations where the vectors will be kept before
% MASK is changed later in the program.
[I, J] = find(MASK);
R = [I, J];
% Now find X.
% First reshape S into X by turning each set of n values along the third
% dimension of S so that it becomes a row of X. The order is from top to
% bottom along the first column, the second column, and so on.
Q = M*N;
X = reshape(S, Q, n);
% Now reshape MASK so that it corresponds to the right locations
% vertically along the elements of X.
MASK = reshape(MASK, Q, 1);
% Keep the rows of X at locations where MASK is not 0.
X = X(MASK, :);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -