我目前有一个包含正值和负值的大矩阵M
(~100x100x50 元素)。目前,如果我想平滑该矩阵,我可以使用 smooth3
函数在整个 3-D 矩阵上应用高斯核。
我想要实现的是该矩阵内的可变平滑级别 - 即矩阵 M
的不同部分根据类似 3-D 中的值平滑到不同级别的 sigma矩阵,d
(值范围从 0 到 1)。当 d
为 0 时,不会发生平滑;当 d
为 1 时,会发生最大程度的平滑。
矩阵是 3-D 的事实是微不足道的。 3 维平滑很好,但不是必需的,而且我当前的代码(执行各种其他操作)无论如何都会单独处理 M
的 50 个切片中的每一个。我很高兴将 smooth3
替换为带有高斯函数的 M
卷积,并分别对每个切片执行此卷积。我不知道的是如何改变这个高斯函数的西格玛水平(基于d
)给定其在M
中的位置并相应地输出结果。
另一种方法可能是使用矩阵 d
作为矩阵 Ms
的非常平滑版本的掩码,并以某种方式操纵 M
和 Ms
给出等效的结果,但是我不相信这会起作用,因为我想不出结合 M
和 Md
的函数> 当 0 <d
< 1 时,不会给出 M
或 Ms
中的每一个的伪影...有什么想法吗?
[我使用的是 2009b,并且只能访问信号处理工具箱。]
最佳答案
您应该看看引导图像过滤器。它是双边滤波器的计算高效的概括。
http://research.microsoft.com/en-us/um/people/jiansun/papers/guidedfilter_eccv10.pdf
它将允许您根据指导矩阵进行适当的平滑。
关于matlab - 同一 Matlab 矩阵内的不同平滑级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13530417/