我可以使用matlab对sub_blocks进行最大过滤

时间:2014-04-24 02:10:37

标签: matlab

例如,我有一个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

2 个答案:

答案 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))

注意:两者都需要图像处理工具箱。