如何在matlab中使用蒙版平滑3D矩阵

时间:2013-10-28 09:35:42

标签: matlab filtering smooth

我需要平滑3D矩阵M。平滑的输出为S。 matlab代码可以是这样的:

S = smooth3(M, 'box', 3); 

问题是在平滑过程中只应考虑矩阵M中的某些部分。我有一个掩码A来识别这些部分的位置。 A的大小与M大小相同,1的值意味着要考虑这一点,0意味着忽略这一点。怎么做?

例如,如果我在下面有MA

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中使用蒙版进行这种平滑处理?提前谢谢。

1 个答案:

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

我测试了它。好像没事。