2014-09-28 100 views
1

我有任何尺寸的图像需要分割成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)); 

我的问题是,我并不总是能够将矩阵划分为15×15不错的区域。我怎样才能解决这个问题?另外,你能解释究竟发生了什么?我想更好地理解Matlab以备将来使用!

回答

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))

+0

快速简洁。谢谢! – Cassie 2014-09-28 10:34:41