例如,我有一个4x4矩阵,我想将max分成2x2子区域。并在sub_region上执行max。
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
13, 14, 15, 16
\|/
6, 6, 8, 8
6, 6, 8, 8
14, 14, 16, 16
14, 14, 16, 16
答案 0 :(得分:3)
这是否符合您的需求?
(假设您的数据位于名为M
的矩阵中)
>> cellfun(@(x) max(x(:)), mat2cell(M, [2 2], [2 2]))
ans =
6 8
14 16
修改强>
您还可以添加kron以获得所需的输出:
>> kron(cellfun(@(x) max(x(:)), mat2cell(M, [2 2], [2 2])), ones(2))
ans =
6 6 8 8
6 6 8 8
14 14 16 16
14 14 16 16
答案 1 :(得分:2)
colfilt
将完成工作:
>> M = 2; N = 2;
>> B = colfilt(A,[M N],'distinct',@(x)repmat(max(x),[M*N 1]))
B =
6 6 8 8
6 6 8 8
14 14 16 16
14 14 16 16
关键是使用'distinct'
块类型选项。测试数据:A = reshape(1:16,4,4).'
。
如果您愿意,也可以使用blockproc
:
B = blockproc(A,[M N],@(b) repmat(max(b.data(:)),[M N]))
OR
B = kron(blockproc(A,[M N],@(b) max(b.data(:))),ones(M,N))
注意:两者都需要图像处理工具箱。