对一个二维矩阵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
运行结果: