-2

我需要从图像中提取一个 3x3 矩阵并将其单独存储,它应该像这样一直持续到图像结束。例如,我的图像是以下矩阵:

p = [ 1 2 3 4 5 6 7 8 9; ...
      1 2 3 4 5 6 7 8 9; ...
      1 2 3 4 5 6 7 8 9; ...
      1 2 3 4 5 6 7 8 9; ...
      1 2 3 4 5 6 7 8 9; ...
      1 2 3 4 5 6 7 8 9 ]

输出应该是这样的:

p1 = [1 2 3; 1 2 3; 1 2 3]
p2 = [4 5 6; 4 5 6; 4 5 6]
p3 = [7 8 9; 7 8 9; 7 8 9]

等等....

您能否为此建议我的代码或内置函数?

4

2 回答 2

1

提取子矩阵的最简单方法:

p1 = img(1:3, 1:3);
p2 = img(4:6, 4:6);
p3 = img(7:9, 7:9);

进行切片的功能。

function imgsl = img_slice( img, ry, rx )
    [ Y X ] = meshgrid(ry, rx);
    imgsl = reshape(img(sub2ind(size(img),Y(:),X(:))),[length(rx) length(ry)]).';

按如下方式使用它:

p1 = img_slice( p, 1:3, 1:3 );
p2 = img_slice( p, 4:6, 4:6 );
p3 = img_slice( p, 7:9, 7:9 );
于 2013-06-17T15:57:06.710 回答
0

图像处理工具箱有一个im2col功能(链接)

B = im2col(p, [3 3], 'distinct');

然后 的每一列B都是一个 3x3 的块做成一个向量,你可以用它reshape(B(:, i), 3, 3)来恢复第 i 个 3x3 的块。请注意,有零填充到p.

于 2013-06-17T16:04:16.473 回答