我有一个任何尺寸的图像,我需要分成15x15像素的非重叠区域。以前我查了一下并使用了以下代码:
newIm = rand(size(im2, 1),size(im2, 2));
subIm = mat2cell(newIm, 15*ones(size(newIm,1)/15,1), 15*ones(size(newIm,2)/15,1));
我的问题是我可能无法始终将矩阵拆分为漂亮的15x15区域。我怎样才能解决这个问题?另外,你能解释到底发生了什么吗?我想更好地了解Matlab以备将来使用!
答案 0 :(得分:2)
如果使用上面的代码,其大小不能完全被15整除(比如说160),那么在MATLAB中会出现以下错误:
输入参数D1到D2必须与输入矩阵大小的每个维度相加,[160 160]。'
所以你必须将mat2cell
总和的第二和第三个输入参数加到160.然后你就完成了。
代码来自here
blockSize=[15 15];
wholeBlockRows = floor(size(newIm,1)/ blockSize(1));
blockVectorR = [blockSize(1) * ones(1, wholeBlockRows), rem(size(newIm,1), blockSize(1))];
wholeBlockCols = floor(size(newIm,2)/ blockSize(2));
blockVectorC = [blockSize(2) * ones(1, wholeBlockCols), rem(size(newIm,2), blockSize(2))];
% sum of blockVectorR and blockVectorC will be equal to size(newIm,1) and
% size(newIm,2) respectively.
ca = mat2cell(newIm, blockVectorR, blockVectorC, size(newIm,3));
在输出单元格数组中,您将看到最后一行和一列中的子图像,其中行或列(或两者)等于:rem(size(newIm,1), blockSize(1))
或(和)rem(size(newIm,2), blockSize(2))