大图像矩阵:保存为小矩阵

时间:2016-04-12 08:32:49

标签: matlab

我是MATLAB及其开发的新手。我的图像是1134(行)X 1134(列)。我希望该图像保存3(列)X 3(行)。为了做到这一点,我需要378个细胞。为此,我使用了以下代码,但它给了我一个错误。

 image=imread('C:\Users\ven\Desktop\test\depth.png');
    I=reshape(image,1,1134*1134);
    chunk_size = [3 3]; % your desired size of the chunks image is broken into
    sc = sz ./ chunk_size; % number of chunks in each dimension; must be integer

    % split to chunk_size(1) by chunk_size(2) chunks
    X = mat2cell(I, chunk_size(1) * ones(sc(1),1), chunk_size(2) *ones(sc(2),1));

错误:

  

使用mat2cell出错(第97行)   输入参数D1到D2必须与输入矩阵大小的每个维度相加[1 1285956]。'

3 个答案:

答案 0 :(得分:3)

不幸的是,您的代码无法正常工作。

./运算符执行两个矩阵的逐点划分。简短的例子:

[12, 8] ./ [4, 2] == [12/4, 8/2] == [3, 4]

为了使其工作,两个矩阵必须具有完全相同的大小。在您的情况下,您尝试在1134x1134矩阵(图像)和1x2矩阵(chunk_size)上执行此类操作。

换句话说,你不能用它来将矩阵分成更小的矩阵。

然而,问题的解决方案是使用mat2cell函数来挑选矩阵的子集。可以在此处找到有关如何完成的说明(包括示例):http://se.mathworks.com/matlabcentral/answers/89757-how-to-divide-256x256-matrix-into-sixteen-16x16-blocks

希望有所帮助:)

答案 1 :(得分:1)

C=A./B命令后面循环遍历A(ii,jj,...)B(ii,jj,..)以及每个C(ii,jj,..)=A(ii,jj,...)/B(ii,jj,...)的所有元素。

因此,广告AB必须具有相同的维度。

如果要将矩阵拆分为组,可以使用

sc=cell(1134/3,1);
kk=0;ll=0;
for ii=2:3:1133
 kk=kk+1;
 for jj=2:3:1133
   ll=ll+1;
   sc{kk,ll}=image(ii-1:ii+1,jj-1:jj+1);
 end
end

代码为结果子矩阵和任意计数器sckk分配单元数组ll。然后它循环遍历iijj,步长为3,表示每个子矩阵的中心。

修改

或者你可以使用mat2cell命令(在matlab shell中输入help mat2celldoc mat2cell

sc=mat2cell(image,3,3);

在这两种情况下,结果都是单元格数组ii可以访问其jjsc{ii,jj}元素(矩阵)。如果您想在iijj矩阵中拨打kkll号码,请通过sc{kk,ll}(ii,jj)进行操作。

答案 2 :(得分:1)

简而言之,您将1134 x 1134除以2 x 1矩阵。这不起作用。

错误“Matrix dimension must agree **”来自将矩阵与另一个没有正确尺寸的矩阵分开。

你使用标量除以“./”将矩阵除以另一个矩阵。

你想要这样的东西:

n = 1134 / 3         % you should measure the length of the image
I1=image(1:n,1:n);   % first row
I2=image(1:n,n:2n);
I3=image(1:n,2n:3n);
I4=image(n:2n,1:n); % second row
I5=image(n:2n,n:2n);
I6=image(n:2n,2n:3n);
I7=image(2n:3n,1:n); % third row
I8=image(2n:3n,n:2n);
I9=image(2n:3n,2n:3n);

从这里: http://au.mathworks.com/matlabcentral/answers/46699-how-to-segment-divide-an-image-into-4-equal-halves

你可以做一个很好的循环,但有时思考很难。