我需要平滑3D矩阵M
。平滑的输出为S
。 matlab代码可以是这样的:
S = smooth3(M, 'box', 3);
问题是在平滑过程中只应考虑矩阵M
中的某些部分。我有一个掩码A
来识别这些部分的位置。 A
的大小与M
大小相同,1
的值意味着要考虑这一点,0
意味着忽略这一点。怎么做?
例如,如果我在下面有M
和A
:
M=zeros(7,7,7); M(2:6,2:6,2:6)=ones(5,5,5); M(4,4,4)=28;
A=zeros(7,7,7); A(2:6,2:6,2:6)=ones(5,5,5);
平滑后,我希望得到如下结果:
S=zeros(7,7,7); S(2:6,2:6,2:6)=smooth3(M(2:6,2:6,2:6), 'box', 3);
任何人都知道如何在matlab中使用蒙版进行这种平滑处理?提前谢谢。
答案 0 :(得分:0)
我找到了解决方案:
index=find(A==0);
M(index) = 0;
k=ones(3,3,3);
counts = convn(A,k,'same');
sums = convn(M,k,'same');
S= sums ./counts .* A;
我测试了它。好像没事。