Arrays Matlab将图像拆分为8x8 2D数组,并将其保存在另一个数组中

Arrays Matlab将图像拆分为8x8 2D数组,并将其保存在另一个数组中,arrays,matlab,Arrays,Matlab,下面是我的代码,我只能保存图像的最后一个数组(88位置)。我知道错误在w11行,但无论我如何尝试,我似乎无法使w11成为3D阵列。请帮忙 Ie=imread('Untitled-1.014.jpg'); % size 256x160 len = 256/8 ; wid = 160/8 ; for m = 1:8 x1(m) = (len*m); end for n = 1:8 y1(n)= (wid*n); end for m = 1:8 x2(m)= (len*

下面是我的代码,我只能保存图像的最后一个数组(88位置)。我知道错误在w11行,但无论我如何尝试,我似乎无法使w11成为3D阵列。请帮忙

Ie=imread('Untitled-1.014.jpg');  % size 256x160
len = 256/8 ;
wid = 160/8 ;

for m = 1:8
    x1(m) = (len*m);
end

for n = 1:8
    y1(n)= (wid*n);
end

for m = 1:8
    x2(m)= (len*m)-len+1;
end

for n = 1:8
    y2(n)= (wid*n)-wid+1;
end

for m = 1:8
    for n=1:8
        w11 = Ie(x2(m):x1(m),y2(n):y1(n));
    end
end

据我所知,您希望将完整的2D图像分割为8x8个小块,并将所有这些块保存在3D阵列中。为此,
w11
必须从一开始就是3D的,并且您有子指定元素:

% The image (replaced with random data)
height = 256;
width = 160;        
Ie = rand(height, width);

% Preallocation of smaller 8x8 blocks in 3D
blocksize = 8;
nw = width / blocksize;
nh = height / blocksize;
blockCount = nw*nh;
blocks = zeros(blocksize, blocksize, blockCount);

% Splitting image
index = 1;
sub = (1:blocksize);    
for wi = 1: nw,

    wsub =  sub + (wi-1)*blocksize; % sub indices along width

    for hi = 1: nh,

        hsub = sub + (hi-1)*blocksize; % sub indices along height

        blocks(:, :, index) = Ie(hsub, wsub); % subset assignement
        index = index + 1;

    end
end
然后,您可以访问更小的块,如下所示:

block = blocks(:,:,5); % The 5th block (of size 8x8)

注意:我把块索引作为最后一个维度,以便自动压缩尾随的单例维度(这避免了一直打电话。

欢迎使用StackOverflow。下次请花点时间正确格式化代码以确保可读性。此外,我已删除了一些空行。请检查我没有弄乱任何内容。我对您的问题描述感到非常困惑。您希望实现什么?您的代码对我来说不是很清楚。