我需要从图像中提取一个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]
依旧......
你可以为我建议代码或内置函数吗?
答案 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
的零。