从图像中提取3x3矩阵

时间:2013-06-17 15:47:52

标签: matlab matrix matrix-indexing

我需要从图像中提取一个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]

依旧......

你可以为我建议代码或内置函数吗?

2 个答案:

答案 0 :(得分: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 );

答案 1 :(得分:0)

图像处理工具箱具有im2col函数(link)

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

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