0

我想问是否有人知道如何将图像划分为 8 个不同的行和 1 列?我尝试使用 mat2cell() 并使用他们 wiki 上的演示作为参考,我尝试将图像分区为 8 行,但并非所有图像分区行都显示。

如果您看到下图,则不会显示 2、4、6、8。我也不确定为什么它是 16 个块。

在此处输入图像描述

有人可以帮我检查我的代码吗?我不太习惯 MatLab 的语法和语言。我现在尽力去理解。

我用于拆分块的代码如下:

blockSizeR = 50; % Rows in block.
blockSizeC = 512; % Columns in block.
wholeBlockRows = floor(rows / blockSizeR);
blockVectorR = [blockSizeR * ones(1, wholeBlockRows), rem(rows, blockSizeR)];
wholeBlockCols = floor(columns / blockSizeC);
blockVectorC = [blockSizeC * ones(1, wholeBlockCols), rem(columns, blockSizeC)];

if numberOfColorBands > 1
% It's a color image.
ca = mat2cell(rgbImage, blockVectorR, blockVectorC, numberOfColorBands);
else
ca = mat2cell(rgbImage, blockVectorR, blockVectorC);
end
% Now display all the blocks.
plotIndex = 1;
numPlotsR = size(ca, 1);
numPlotsC = size(ca, 2);
for r = 1 : numPlotsR
for c = 1 : numPlotsC
    fprintf('plotindex = %d,   c=%d, r=%d\n', plotIndex, c, r);
    % Specify the location for display of the image.
    subplot(numPlotsR, 1, plotIndex);
    % Extract the numerical array out of the cell
    % just for tutorial purposes.
    rgbBlock = ca{r,c};
    imshow(rgbBlock); % Could call imshow(ca{r,c}) if you wanted to.
    [rowsB columnsB numberOfColorBandsB] = size(rgbBlock);
    % Make the caption the block number.
    caption = sprintf('Block #%d of %d\n%d rows by %d columns', ...
        plotIndex, numPlotsR*numPlotsC, rowsB, columnsB);
    title(caption);
    drawnow;
    % Increment the subplot to the next location.
    plotIndex = plotIndex + 1;
    end
 end

我是 MatLab 的新手,所以我错过了一种更简单的方法来做到这一点,如果有我可以参考的参考资料,请提出建议或更好。非常感谢 (:

4

2 回答 2

1

如果您知道矩阵的维数,您可以通过数学计算出如何将行数分成 4 个相等的部分:

例如,如果:size(rockinsMatrix) == [10 20](a 10row x 20column) 矩阵,那么您可以将其拆分为一组 4 个子矩阵,两个 3 行,2 个 2 列。

如果您想要单元格数组中的矩阵,那么您可以在那时执行此操作。

于 2013-10-10T03:30:38.943 回答
0

我已经设法解决了,错误在于for循环。我将 for r = 1 : numPlotsR 更改为 r = 1 : (我想要的行数) for c = 1 : numPlotsC 更改为 c= 1: 1 (因为我只想要一列),并使用了 subplot(8,1, k) 或 (8,2,k) 其中 k 是绘图索引。只是回答这个问题,以防将来有人遇到此类问题并想使用我的代码作为参考。干杯!

于 2013-10-11T06:58:49.677 回答