【问题标题】:convert 3d matrix to 4d matrix using matlab使用matlab将3d矩阵转换为4d矩阵
【发布时间】:2017-04-07 16:31:26
【问题描述】:

我有尺寸为 400 x 500 的二维矩阵,每个矩阵都显示一个图像。我的流程包含两个步骤:

1) 我必须对这些图像进行分区(将矩阵拆分为大小相等的子矩阵)

2) 我必须将这些拆分中的每一个保存在一个矩阵中

第一步完成,矩阵尺寸从 2D-->3D 变化(最后一个索引显示分割索引)

现在对于第 2 步,我有 100 张图像,我想要有 4 个维度的矩阵,其中最后一个索引显示图像的数量

示例:用于访问图像 40 的拆分 3:[:,:,3,40]

我已经尝试使用 permut 和 reshape 但没有成功

这是我的代码

nCol = 10;
nRow = 4;
K=dir(p);
Len=length(K);

for i=3:Len
    x1=imread(strcat(p,'\',K(i).name));
    [m,n,d1]=size(x1);
    if d1==1
        x=double(x1);
    else
        x=double(rgb2gray(x1));
    end
    x=imresize(x,NN);

   %% determined width and height of divided matrix %%%%%%%%%%%%%%%%%%%%%%%%%% 

   m = size(x,1)/nRow;
   n = size(x,2)/nCol;

   T = permute(reshape(permute(reshape(x, size(x, 1), n, []), [2 1 3]), n, m, []), [2 1 3]);

   Im=[Im T(:,:,:,i-2)];
end

任何想法都将不胜感激。

【问题讨论】:

  • 如果您在T 中有新图像的3D 矩阵,是否可以通过将最后一行更改为Im(:,:,:,i-2)=T 来将其存储在Im 中?
  • @Wolfie 我试过了,但没有答案!
  • 来自 Python,正要告诉你修复缩进 :)
  • @Some Guy 在下面给出了一个很好的答案。了解您打算如何处理处理后的图像以了解输出格式是否重要会很有帮助。

标签: matlab matrix octave


【解决方案1】:

reshape 选择列主要排序中的元素,因此您可能必须编写复杂的代码才能使其工作。而不是使用permutereshape 创建4D 矩阵并可能遇到内存不足的问题,我建议使用mat2cell 将矩阵拆分为一个单元格数组,因为mat2cell 拆分了一个像您想要分割图像一样的矩阵。

这里我展示了一个带有图像的示例

RGB = imread('peppers.png');
x = rgb2gray(RGB); % x is a 384 x 512 matrix, we want to split in 3 rows and 2 columns
x2 = mat2cell(x,384*ones(3,1)/3,512*ones(2,1)/2); % 2D cell array, each cell holds a part of the image
imshow(x2{1,1}) % Top left part of the image

您可以遍历所有图像并创建一个 3D 元胞数组,其中数组中的每一层代表每个图像被分割成多个片段。我建议您预先分配数组并在循环内的正确层中分配矩阵,而不是逐步增加矩阵的大小。

似乎还有一个图像处理工具箱特定的功能可以做你想做的事情:检查这个:How to divide an image into blocks in MATLAB?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    相关资源
    最近更新 更多