Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何利用MATLAB实现图像分割_Matlab_Image Processing - Fatal编程技术网

如何利用MATLAB实现图像分割

如何利用MATLAB实现图像分割,matlab,image-processing,Matlab,Image Processing,我得到了一张大小为[17935 10968]像素的卫星图像,我想平均切割图像,并在各个部分上处理我所需的算法(例如:我需要将以上像素范围切割成4个相等的部分) 如何在不丢失中间像素的情况下分割图像?我的要求是(1到5600和5601到末端像素) 有人知道如何在MATLAB中分割这么大的图像吗?您可以使用重塑从图像中生成4个矩阵: A=reshape(Img, 17935 , 10968/4,[]); 然后处理A(:,:,1)等。假设A是您的17935x10968x3矩阵,我想您可以: B =

我得到了一张大小为[17935 10968]像素的卫星图像,我想平均切割图像,并在各个部分上处理我所需的算法(例如:我需要将以上像素范围切割成4个相等的部分)

如何在不丢失中间像素的情况下分割图像?我的要求是(1到5600和5601到末端像素)


有人知道如何在MATLAB中分割这么大的图像吗?

您可以使用
重塑
从图像中生成4个矩阵:

A=reshape(Img, 17935 , 10968/4,[]);

然后处理
A(:,:,1)
等。

假设
A
是您的
17935x10968x3
矩阵,我想您可以:

B = reshape(A, 17935, 10968 / 4, 4, 3);
这样,最后一个维度仍然表示
RGB
。唯一的区别是它变成了
4-D
数组。

方法1 如果您有图像处理工具箱,这是首选且最有效的方法。它利用了非常有用的
blockproc
功能,该功能专为处理大块图像而设计。例如,当图像没有等分为相同大小的块并将块处理的结果连接到一个结果矩阵中时,它负责填充

您最好看一下,但在您的案例中,它是这样的:

vSize = [17935 10968];
imBig = rand([vSize 3]);
nParts = [2 2]; %means divide into 4 parts, 2 horizontal, 2 vertical

blockproc(imBig, ceil(vSize ./ nParts), @yourAlgorithm);


function res = yourAlgorithm(blockStruct)
   %do your processing of the block here and 
   %optionally return a result in 'res'

   %for example, just return the RGB vector of the first pixel
   res = blockStruct.data(1,1,:);
end
方法2 如果没有图像处理工具箱,可以使用
mat2cell
函数。首先计算出所需的块大小,然后得到包含不同块的单元数组。但对于如此大的图像,速度和内存可能会成为一个问题。该代码是从Matlab中央答案中借用的

vSize = [17935 10968];
imBig = rand([vSize 3]);
nParts = [2 2]; %means divide into 4 parts, 2 horizontal, 2 vertical

%figure out the size of "regular" block and the last block

vRegBlockSize = ceil(vSize ./ nParts);
vLastBlockSize = vSize - vRegBlockSize .* (nParts - 1);

%put the sizes into a vector
vSplitR = [vRegBlockSize(1)*ones(1,nParts(1)-1), vLastBlockSize(1)];
vSplitC = [vRegBlockSize(2)*ones(1,nParts(2)-1), vLastBlockSize(2)];

%split the image
C = mat2cell(imBig, vSplitR, vSplitC, 3);

%access RGB pixel (x,y) in top left {1,1} block
p = C{1,1}(x, y, :);

使用以下代码将图像分为4个不同的图像:

A=reshape(Img, 17935 , 10968/4, 3, []);

然后A(:,:,:,1)是第一张图像。

那么问题是处理大数据或剪切图像的方式出了问题吗?@Ray我两者都有。。任何想法。?Thq的回答,这是帮助充分;但是有没有办法在RGB组合图像中获得输出,因为我的输入RGB图像得到12张图片(17935x10968x3),我需要将其切割成X和y两个维度,如4个相等的正方形部分。。谢谢你的帮助…@ravi这么四个矩形,即使
17935
不能使它们相等?我的意思是,如果图像像A4纸一样,我需要从中间剪成两半,然后再把一半剪成两半。所以我将得到4个部分。
upperLeft = theImage(1:5600, 1:5600, :);
upperRight = theImage(1:5600, 5601:end, :);
lowerLeft = theImage(5601:end, 1:5600, :);
lowerLeft = theImage(5601:end, 1:5601:end, :);