【问题标题】:MATLAB - Merge submatricesMATLAB - 合并子矩阵
【发布时间】:2011-06-08 19:11:32
【问题描述】:

我正在MATLAB 从事图像处理项目。为了更轻松地对图像进行预处理,我将其划分为行和列,因此从原始图像(2D uint8 矩阵),现在我有一个 3D 矩阵,就像一个堆栈。

处理完每个块后,我想重新组合图像。问题是行数和列数是动态的,所以我不能使用(或者不知道这里如何使用)cat 命令或[firstsubmatrix secondsubmatrix] 语法。

顺便说一句,我是这样划分的:

numRows = 3
numCols = 3
blockHeight = originalHeight / numRows;
blockWidth = originalWidth / numCols;

blocks = uint8(zeros(numCols * numRows, blockHeight, blockWidth));

所以对于每个块,我使用填充其内容

y0 = (row - 1) * rowHeight + 1;
y1 = row * rowHeight;
x0 = (col - 1) * rowWidth + 1;
x1 = col * rowWidth;

blocks(numBlock, :, :) = originalImage(y0:y1, x0:x1);

有没有更好的方法,以及任何将块连接起来的方法?

【问题讨论】:

标签: matlab image-processing matrix


【解决方案1】:

如果我正确理解了您的问题,那么我会这样做: 假设我们有一些尺寸为 m × n 的数据矩阵

[m n] = size(data);

rows_wanted = 10;
cols_wanted = 10;
submatrix_rows = rows_wanted*ones(1,m/rows_wanted);
submatrix_cols = cols_wanted*ones(1,n/cols_wanted);
data_cells = mat2cell(data,submatrix_rows,submatrix_cols);
for k1 = 1:submatrix_rows;
    for k2 = 1:submatrix_cols;
        proc_data_cells{k1,k2} = function_for_matrics(data_cells{k,l});
    end
end
proc_data_mtx = cell2mat(proc_data_cells);

将您的数据转换为一个单元格,其中单元格的每个元素都是一个子矩阵,然后遍历每个元素,执行您的函数,并将其输出到一个新单元格。使用 cell2mat 输出一个完全连接的处理矩阵。

如果您可以访问图像处理工具箱,我还会查看“blkproc”功能。

【讨论】:

  • 我对细胞一无所知。谢谢!
【解决方案2】:

关于您如何根据您的图表在 2-D 矩阵和 3-D 矩阵之间来回转换的具体问题,我首先假设 originalHeightoriginalWidth 可以是分别除以numRowsnumCols。在之前提出的 a solution I gavea similar problem 的基础上,这是一个仅使用矩阵的重塑和排列的解决方案:

%# Convert from 2-D to 3-D:
blocks = reshape(permute(reshape(originalImage,blockHeight,blockWidth,[]),...
                         [1 3 2]),blockHeight,blockWidth,[]);

%# Convert from 3-D to 2-D:
newImage = reshape(permute(reshape(blocks,blockHeight,[],blockWidth),...
                           [1 3 2]),originalHeight,originalWidth);

请注意,3-D 矩阵中的块沿第三维连接,因此blocks(:,:,i) 是 2-D 矩阵中的第 ith 块。另请注意,这些解决方案将以逐行方式提取和填充二维矩阵中的块。也就是说,如果originalImage = [A1 A2; A3 A4];,那么blocks(:,:,1) = A1;blocks(:,:,2) = A2;等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2014-05-18
    相关资源
    最近更新 更多