Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Arrays 如何在Matlab中从矩阵的单元数组中创建单个图像?_Arrays_Image_Matlab_Cell - Fatal编程技术网

Arrays 如何在Matlab中从矩阵的单元数组中创建单个图像?

Arrays 如何在Matlab中从矩阵的单元数组中创建单个图像?,arrays,image,matlab,cell,Arrays,Image,Matlab,Cell,我需要将灰度图像分成相等的部分,因此我使用了函数mat2cell。然后我必须分别均衡每个部分,为此我使用了函数histeq。我为此重复使用了相同的cell数组变量。代码如下: height=round(size(img,1)/number_of_divisions); length=round(size(img,2)/number_of_divisions); M=zeros(number_of_divisions,1); N=zeros(1,number_of_divisions); M(1:

我需要将灰度图像分成相等的部分,因此我使用了函数
mat2cell
。然后我必须分别均衡每个部分,为此我使用了函数
histeq
。我为此重复使用了相同的cell数组变量。代码如下:

height=round(size(img,1)/number_of_divisions);
length=round(size(img,2)/number_of_divisions);
M=zeros(number_of_divisions,1);
N=zeros(1,number_of_divisions);
M(1:number_of_divisions)=height;
N(1:number_of_divisions)=length;
aux=mat2cell(img,M,N);

for i=1:size(aux,1)
    for j=1:size(aux,2)
        aux{i,j}=histeq(aux{i,j},256);
    end
end

那么现在如何将每个单元格合并为一个图像呢?

使用
cell2mat

img2=cell2mat(aux);
为了获得更好的性能,请将代码替换为
blockproc

blocksize=ceil(size(img)./number_of_divisions);
img2=blockproc(img,blocksize,@(block_struct)histeq(block_struct.data));

是的,成功了!我应该猜到,matlab对每个问题都有一个函数:DJust注意到你的前两行并不总是有效。对于大小
[10011001]
分区数
则失败。使用blockproc的另一个原因是对的,谢谢。我一直试图自己发现它,但我仍然不明白
blockproc
对像素做了什么,当像素除以块数不是整数时,这些像素不会被“接受”(这是为什么它对mat2cell不起作用)。您能解释一下吗?
blockproc
使用您传递的大小,如果需要,最后一行/列的块会更小。