卷上的MATLAB 3D滑动窗口

时间:2015-06-10 22:08:36

标签: matlab image-processing 3d sliding-window

我有一个M x N x D卷,我需要一个l x h x w个滑动窗口音量的所有体素。在每个滑动窗口中,我需要计算Root Mean Square Contrast。这是更聪明的方法吗?

我想限制for循环的使用,因为音量非常大,1024x1024x146。

2 个答案:

答案 0 :(得分:0)

听起来你想分成l x h x w的体素。如果是这种情况,并假设您的矩阵被称为q size(q) = [M, N, D]

function N = test(q, l, h, w)
    qPrime = mat2cell(q, ...
        [l*ones(1, floor(size(q,1)/l)), mod(size(q,1), l)], ...
        [h*ones(1, floor(size(q,2)/h)), mod(size(q,2), h)], ...
        [w*ones(1, floor(size(q,3)/w)), mod(size(q,3), w)]);

    N = cellfun(@RMS, qPrime, 'uni', 0);
end

function N = RMS(M)
    var = M - mean(M(:));
    N = sqrt(sum(var(:).^2)) ./ numel(M);
end

这使得单元格中的每个体素都具有单元格阵列。使用cellfun(@foo, qPrime, 'uni', 0)将函数应用于每个体素。

答案 1 :(得分:0)

我已经能够使用MATLAB的stdfilt函数解决这个特定问题,因为均方根对比度是滑动窗口内像素强度的标准偏差。 stdfilt功能允许您定义

  

零和1的多维数组,其中非零元素指定邻居。 (MATLAB帮助)