提取二维矩阵中分块后指定的块

对一个二维矩阵I(N×N)进行分块(块大小为n×n),并提取其中第ii块中的元素

 

% 对二维矩阵I进行[n n]分块,取其中第ii块中的元素
function x = getBlock(I, n, ii)
    N = size(I, 1);
    n1 = N / n;
    n2 = n * n;
    [a, b] = ind2sub([n1 n1], ii);
    p = (b-1) * n * (n1 * n) + (a-1) * n;   % 计算I中第ii块之前的元素个数
    c = 1;
    for i = 1 : n
        for j = 1 : n                       % 从p点向下走n步
            x(c) = I(p+j);
            c = c + 1;
        end
        p = p + N;                          % 从p点向右走N步(因为I中每一列有N个元素)
    end
    x = reshape(x, n, n);

 

测试代码:(分别提取I中各块的数据)

clear;
clc;
I = magic(4);
N = size(I, 1);
n = 2;
blockNum = round(N * N / (n * n));      % 取整
for ii = 1 : blockNum
    x(:, :, ii) = getBlock(I, n, ii);   % 取得第ii块中的元素
end

% 输出块中的内容
for ii = 1 : blockNum
    I, ii
    y = x(:, :, ii)
end

 

 

运行结果:

你可能感兴趣的:(Matlab)