matlab将子窗口转换为向量

matlab将子窗口转换为向量,matlab,image-processing,Matlab,Image Processing,我试图从100x100像素的图像中提取16个25x25子窗口,然后将每个子窗口转换为125列向量,但我附加所有这些向量的数据结构似乎是625 x 16,而不是125 x 16 子窗口似乎在图中显示得很好。如果您能提供我哪里出错的任何线索,我们将不胜感激。您可以使用mat2cell和cellfun: % obtain small windows of the image (say 16x16 windows and possibly using the crop function) [rows c

我试图从100x100像素的图像中提取16个25x25子窗口,然后将每个子窗口转换为125列向量,但我附加所有这些向量的数据结构似乎是625 x 16,而不是125 x 16


子窗口似乎在图中显示得很好。如果您能提供我哪里出错的任何线索,我们将不胜感激。

您可以使用
mat2cell
cellfun

% obtain small windows of the image (say 16x16 windows and possibly using the crop function)
[rows columns] = size(B);
blockSizeR = 25; % Rows in block.
blockSizeC = 25; % Columns in block.
wholeBlockRows = floor(rows / blockSizeR);
wholeBlockCols = floor(columns / blockSizeC);
image3d = zeros(wholeBlockRows, wholeBlockCols);
sliceNumber = 1;
dataStruct = [];
for row = 1 : blockSizeR : rows
    for col = 1 : blockSizeC : columns
        row1 = row;
        row2 = row1 + blockSizeR - 1;
        col1 = col;
        col2 = col1 + blockSizeC - 1;
        oneBlock = B(row1:row2, col1:col2);
        subplot(4, 4, sliceNumber);
        imshow(oneBlock);
        caption = sprintf('Block #%d of 16', sliceNumber);
        title(caption);
        drawnow;
        dataStruct = [dataStruct, oneBlock(:)];
        sliceNumber = sliceNumber + 1;
    end
end

25*25=625,怎么可能是125列向量?同意Para。你的代码看起来不错。我的上帝我很抱歉
dataStruct = mat2cell( B, blockSizeR * ones(  1, wholeBlockRows ), ...
                          blockSizeC * ones(  1, wholeBlockCols ) );
dataStruct = cellfun( @(x) x(:), dataStruct, 'uni', 0 );
dataStruct = [dataStruct{:}];