【发布时间】:2016-11-03 16:28:26
【问题描述】:
我想将任何矩阵分成相等的子矩阵部分。我使用 mat2cell 来做到这一点。但它使大多数子矩阵成为所需的大小,但某些部分不相等。 例如:我有一个大小为 973*973 的矩阵。我想平均分成 216*216 个子矩阵。当我应用 mat2cell 时,它会生成一个 6*6 的子矩阵。其中前 5*5 是 216*216 个子矩阵。但最后一行和最后一列的块不是 216*216。它们是随机尺寸。这是不希望的。我希望每个子矩阵都具有相同数量的行和列。每个块将是 216*216 大小或用户指定的大小。
I=imread(file);
[rows columns numberOfColorBands] = size(I);
blockSizeR = 256; % Rows in desired block which can be anynumber.
blockSizeC = 256; % Columns in desired block which can be anynumber.
wholeBlockRows = floor(rows / blockSizeR);
blockVectorR = [blockSizeR * ones(1, wholeBlockRows), rem(rows, blockSizeR)];
% Figure out the size of each block in columns.
wholeBlockCols = floor(columns / blockSizeC);
blockVectorC = [blockSizeC * ones(1, wholeBlockCols), rem(columns, blockSizeC)];
ca = mat2cell(I, blockVectorR, blockVectorC);
【问题讨论】:
-
你知道 973/216 不是整数吗?那么你怎么能平分这样的矩阵呢?这里没有奇迹。
-
@obchardon 我知道。所以我必须调整矩阵的大小以便我可以平均分割,这是唯一的方法吗?
-
这取决于您的需要,您可以对矩阵进行插值以适应 n*216 大小,您可以将矩阵划分为 49 139*139 个子矩阵,...
-
@obchardon 是的,我认为最好采用最接近我的矩阵维度的 n*216 大小。像 4*216 = 864 所以我可以将矩阵调整为 864*864
-
所以你可以使用
imresize
标签: matlab