Как сгладить 3D матрицу с помощью маски в Matlab

Мне нужно сгладить 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? Заранее спасибо.

1 ответ

Я нашел решение:

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;

Я проверял это. Кажется, хорошо.

Другие вопросы по тегам