1

我需要平滑 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中使用掩码进行这种平滑?先感谢您。

4

1 回答 1

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;

我测试了它。好像没问题。

于 2013-10-28T10:44:08.590 回答