我正在MATLAB中开展一个图像处理项目.为了更容易地预处理图像,我将其划分为行和列,因此从原始图像(2D uint8矩阵)开始,现在我有一个3D矩阵,就像堆栈一样.
处理完每个块之后,我想再次重新构图.问题是行数和列数是动态的,所以我不能使用(或者不知道如何在这里使用它)cat
命令或[firstsubmatrix secondsubmatrix]
语法.
顺便说一句,我这样做了这个部门:
numRows = 3
numCols = 3
blockHeight = originalHeight / numRows;
blockWidth = originalWidth / numCols;
blocks = uint8(zeros(numCols * numRows, blockHeight, blockWidth));
Run Code Online (Sandbox Code Playgroud)
因此,对于每个块,我使用填充其内容
y0 = (row - 1) * rowHeight + 1;
y1 = row * rowHeight;
x0 = (col - 1) * rowWidth + 1;
x1 = col * rowWidth;
blocks(numBlock, :, :) = originalImage(y0:y1, x0:x1);
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法,以及任何方式使块加入?
我一直在使用blockproc
块状处理图像.不幸的是,它blockproc
是图像处理工具箱的一部分,我个人电脑上没有.
基础Matlab中是否有可以替代的功能组合blockproc
?
我最初的猜测是用于im2col
将每个块转换为列,然后arrayfun
处理每个列.然后我意识到这im2col
也是图像处理工具箱的一部分,所以这不能解决我的问题.