Как сгладить 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;
Я проверял это. Кажется, хорошо.