www.gusucode.com > 冈萨雷斯数字图像处理matlab版源码V1.1 > 冈萨雷斯数字图像处理matlab版源码V1.1.3/code/新建文件夹/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, :);