我有一张大小为412x550
的RGB图像。我想将其划分为大小为2x2
的子矩阵。我尝试过使用mat2cell
函数,但它给出了错误。错误是:
输入参数D1到D2必须与每个维度相加 输入矩阵大小,[412 550]。
如何解决此错误以获得所需的子矩阵?
答案 0 :(得分:4)
你可能有点关闭语法。您的情况的正确语法将是
>> A = rand(412,550);
>> B = mat2cell(A, 2*ones(size(A,1)/2,1), 2*ones(size(A,2)/2,1))
ans =
[2x2 double] [2x2 double] ...
[2x2 double] [2x2 double] ...
...
答案 1 :(得分:1)
您应该使用函数im2col
。这正是你所需要的。
A = rand(412,550);
B = im2col(A,[2 2]);
该文件在那里:
http://www.mathworks.fr/help/images/ref/im2col.html;jsessionid=4d24325613716d84d4635b4fc636
答案 2 :(得分:0)
通常,您可以使用以下代码将图像分成块(用于压缩过程或其他)
A=imread('image.bmp'); % i assume 8-bit gray scale image
[m,n,k]=size(A); % and m=n with 1 channel k=1
ImageSize=m*n;
BlockD=2; % i assume 2x2 block
BlockSize=BlockD*BlockD;
NoOfBlock=ImageSize/BlockSize;
SubB=zeros(BlockD,BlockD,NoOfBlock); %arrays of blocks.
B=double(A); important to convert uint8 to double when dialing with image.
% thats what ru asking for.
k=1;
for i=1:BlockD:m
for j=1:BlockD:n
SubB(:,:,k)=B(i:i+BlockD-1,j:j+BlockD-1); k=k+1;
end
end
%compare between first submatrix A with first block.. its the same elements.
B(1:2,1:2)
SubB(:,:,1)