繁体   English   中英

如何在Matlab中使用遮罩平滑3D矩阵

[英]How to smooth a 3D matrix with a mask in matlab

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

我找到了解决方案:

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;

我测试了 好像还可以

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM