我有一个M
x N
x D
卷,我需要一个l
x h
x w
个滑动窗口音量的所有体素。在每个滑动窗口中,我需要计算Root Mean Square Contrast。这是更聪明的方法吗?
我想限制for
循环的使用,因为音量非常大,1024x1024x146。
答案 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帮助)