我有一个256x256的图像,我想将其划分为4个128x128的块,并将它们寻址为A1到A4.现在,我想分别调用它们并对其进行一些操作.我知道可以使用
blkproc
功能-但究竟如何?
我给维兹威兹打电话吗 这样吗?
blkproc
我用什么代替"?",如何处理创建的4个块?
B=blkproc(I,[4 4],?)
- 2021-1-81 #
- 2021-1-82 #
blockproc
是blkproc
的新名称 (已弃用).它可用于将功能应用于图像中的每个块.例如,如果您想将矩阵I划分为8x8的块并计算每个块的平均值,则可以这样做:B=blockproc(I, [8 8], @(x) mean(x.data(:)));
B是一个包含块均值的矩阵。
这里要注意两件事:
The specifier
[8 8]
指定块的size,而不是块的number。在传递给
blockproc
的函数之外,您无法访问自身的块 .如果您自己需要块,则必须按照Adrien的建议进行操作:A1=I(1:128, 1:128); A2=I(129:256, 1:128); A3=I(1:128, 129:256); A4=I(129:256, 129:256);
当然,在实际程序中,您可能应该使用循环来完成此操作。
p如果
myImage
是您的256x256图片,不是吗image_top_left = myImage(1:128,1:128); image_top_right = myImage(1:128,129:256); image_bottom_left = myImage(129:256,1:128); image_bottom_right = myImage(129:256,129:256);
?
- 2021-1-83 #
最好让您的程序适用于所有尺寸的图像,而不仅仅是256 * 256。
[row, col]=size(your_image); mr = round(row/2); % median of rows mc = round(col/2); % median of columns % Now divide your image and call each of them separately and do what ever you want top_left = your_image(1:mr , 1:mc); top_right = your_image(1:mr , (mc+1):col); bot_left = your_image((mr+1):row , 1:mc); bot_right = your_image((mr+1):row , (mc+1):col); % final stage is to combining these parts again to return to its original shape Back_to_original = [top_left,top_right ; bot_left,bot_right];
%hope这将对您有用.
相关问题
- Matlab旋转图像而不使用旋转matlabimageprocessinginterpolation2021-01-12 01:27
- matlab:使用双线性插值调整图像大小,而无需调整大小imagematlabimageprocessinginterpolation2021-01-09 00:25
- matlab:OCR的字符重建和填充matlabimageprocessingocredgedetection2021-01-07 17:54
- arrays:我在将MATLAB代码转换为Python时遇到问题pythonarraysmatlabimageprocessing2020-12-29 03:56
- matlab:对齐已捕获的RGB和深度图像matlabimageprocessingkinectimageregistration2020-12-27 03:55
自
blockproc
起 (以及已弃用的blkproc
)都是Image Processing Toolbox中的功能,我想我会添加一个基本的MATLAB解决方案,不需要其他工具箱...如果要将矩阵划分为子矩阵,一种方法是使用
mat2cell
分解矩阵并将每个子矩阵存储在单元阵列的单元中.对于您的情况,语法如下所示:C
现在是2 x 2单元格阵列,每个单元格存储I
的128 x 128子矩阵 .如果要对每个单元执行操作,则可以使用功能cellfun
.例如,如果要取每个子矩阵中值的平均值,则可以执行以下操作:第一个参数是匿名函数的函数句柄,该函数首先将每个子矩阵整形为列向量,然后取均值.输出是每个子矩阵的平均值的2×2矩阵.如果您将函数传递给
cellfun
为每个单元创建不同大小或类型的输出,然后cellfun
连接它们会遇到问题,并会引发错误:如果添加
..., 'UniformOutput', false);
到cellfun
的通话结束 ,则在上述情况下的输出将改为2 x 2单元格数组,其中包含对每个子矩阵执行操作的结果。