在Matlab中最大池操作?

时间:2017-03-28 21:28:34

标签: matlab opencv image-processing imagefilter

是否有一个函数允许在Matlab中使用预定义的内核大小和窗口跨度计算2d最大池?

我环顾四周但到目前为止找不到任何东西......

假设我有一个3D立方体数据[HxWxC],我想分别在每个通道上运行2d max-pooling(类似于神经网络中已知的max-pool操作)。
一个类似的opencv函数也可以帮助我......

2 个答案:

答案 0 :(得分:0)

我最终使用matconvnet

k = 3; % kernel_size
p = 1; % padding size
data_pooled = vl_nnpool(single(data),[k,k],'Pad',[p,p,p,p]);

答案 1 :(得分:0)

这是另一个不需要神经网络功能的解决方案。

您可以在每个通道上对内核进行卷积,然后选择要保留的结果矩阵的切片(对应于步幅)。这是线性平均合并的一般情况的代码示例。

% pool
kernel = ones(k)/k^2;
temp = conv2(padarray(data, [p p]), kernel, 'valid');
% downsample 
pooled_data = temp(1:stride:end, 1:stride:end);

当然,您可以使用订单统计过滤器而不是此示例中的线性平均值,或任何其他池功能。您还可以使用padarray值参数来获取所需的填充行为。