MATLAB - 合并子矩阵

标签 matlab image-processing matrix

我正在 MATLAB 从事图像处理项目.为了更容易地预处理图像,我将它分成行和列,所以从原始图像(2D uint8 矩阵),现在我有一个 3D 矩阵,就像一个堆栈。

Image decomposition

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

顺便说一下,我是这样除法的:

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

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

所以对于每个 block ,我使用

填充它的内容
y0 = (row - 1) * rowHeight + 1;
y1 = row * rowHeight;
x0 = (col - 1) * rowWidth + 1;
x1 = col * rowWidth;

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

有没有更好的方法,有什么方法可以连接 block ?

最佳答案

如果我没有正确理解您的问题,那么我会这样做: 假设我们有一些尺寸为 m x 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”函数。

关于MATLAB - 合并子矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6283918/

相关文章:

javascript - 如何在 Webos Palm js 中替换图像像素

c - 将动态分配的数组作为C中的参数传递

MATLAB - 如何找到值大于阈值的第一个索引

matlab - 计算前 36 行中某项出现的次数

python - 从文本图像中删除分界 - 图像处理

c - C中的填充矩阵

python - bool numpy 数组的子矩阵求和

MATLAB TeX 字符表?

java - 如何在 Matlab 中使用用户定义的 Java 类?

php - 使用PHP改变图像亮度