【问题标题】:How to smooth a 3D matrix with a mask in matlab如何在matlab中使用蒙版平滑3D矩阵
【发布时间】:2013-11-07 00:25:31
【问题描述】:

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

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

问题只是矩阵M中的某些部分在平滑过程中应该被考虑。我有一个面具A 来识别这些部件的位置。 AM的大小相同,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 中使用掩码进行这种平滑?提前谢谢你。

【问题讨论】:

  • 你不能平滑整个数组,然后用原始像素值替换任何被遮盖的东西吗?
  • 没有。因为如果邻居中包含A=0,则中心点的平滑结果是不正确的。
  • 在这种情况下,您可能需要编写一个可以处理 NaN 的平滑例程。

标签: matlab filtering smooth


【解决方案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;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-24
    • 2013-06-16
    • 2015-01-24
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    相关资源
    最近更新 更多