当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python skimage.restoration.denoise_nl_means用法及代码示例


用法:

skimage.restoration.denoise_nl_means(image, patch_size=7, patch_distance=11, h=0.1, multichannel=False, fast_mode=True, sigma=0.0, *, preserve_range=False, channel_axis=None)

对 2D-4D 灰度或 RGB 图像执行非局部方法去噪。

参数

image2D 或 3D ndarray

输入要去噪的图像,可以是2D或3D,灰度或RGB(仅限2D图像,见multichannel参数)。可以有任意数量的通道(不一定是 RGB)。

patch_sizeint 可选

用于去噪的补丁大小。

patch_distanceint 可选

搜索用于去噪的补丁的最大像素距离。

h浮点数,可选

Cut-off 距离(灰度)。 h 越高,接受补丁的可能性就越大。较高的 h 会导致图像更平滑,但会以模糊特征为代价。对于标准差 sigma 的高斯噪声,经验法则是选择 h 的值略小于 sigma。

multichannel布尔型,可选

图像的最后一个轴是否被解释为多个通道或另一个空间维度。不推荐使用此参数:改为指定 channel_axis。

fast_mode布尔型,可选

如果为 True(默认值),则使用非本地均值算法的快速版本。如果为 False,则使用原始版本的非本地方法。有关算法的更多详细信息,请参阅注释部分。

sigma浮点数,可选

(高斯)噪声的标准偏差。如果提供,则计算更稳健的补丁权重计算,将预期噪声方差考虑在内(请参阅下面的注释)。

preserve_range布尔型,可选

是否保持原来的取值范围。否则,输入图像将根据以下约定进行转换img_as_float.另见https://scikit-image.org/docs/dev/user_guide/data_types.html

channel_axisint 或无,可选

如果为 None,则假定图像是灰度(单通道)图像。否则,此参数指示数组的哪个轴对应于通道。

返回

resultndarray

去噪后的图像,形状与图像相同。

其他参数

multichannelDEPRECATED

已弃用以支持channel_axis。

注意

非局部均值算法非常适合对具有特定纹理的图像进行去噪。该算法的原理是将给定像素的值与有限邻域中的其他像素的值进行平均,前提是以其他像素为中心的补丁与以感兴趣的像素为中心的补丁足够相似。

在算法[1]的原始版本中,对应于fast=False,计算复杂度为:

image.size * patch_size ** image.ndim * patch_distance ** image.ndim

因此,改变补丁的大小或它们的最大距离对计算时间有很大的影响,尤其是对于 3D 图像。

但是,默认行为对应于 fast_mode=True ,为此使用了另一个版本的非本地方法 [2] ,对应的复杂度为:

image.size * patch_distance ** image.ndim

由于计算了给定移位的补丁距离积分,计算时间仅取决于补丁大小,这减少了操作[1] 的数量。因此,该算法比经典算法 (fast_mode=False) 执行得更快,但代价是使用了两倍的内存。与其他替代方案相比,此实现已被证明更有效,参见例如[3]

与经典算法相比,一个patch的所有像素都对到另一个具有相同权重的patch的距离有贡献,无论它们到patch中心的距离如何。这种更粗略的距离计算会导致去噪性能稍差。此外,对于小图像(线性大小仅为补丁大小几倍的图像),由于边界效应,经典算法可以更快。

图像在去噪前使用skimage.util.pad的反射模式进行填充。

如果噪声标准差,西格玛, 提供了更稳健的补丁权重计算。从计算的块距离中减去已知的噪声方差可以改进块相似度的估计,从而适度提高去噪性能[4].它也被提到作为算法的快速变体的一个选项[3].

什么时候西格玛提供了一个较小的h通常应用于避免过度平滑。的最佳值h取决于图像内容和噪声水平,但合理的起点是h = 0.8 * sigmafast_modeTrue, 或者h = 0.6 * sigmafast_modeFalse.

参考

1(1,2)

A. Buades, B. Coll, & J-M. Morel. A non-local algorithm for image denoising. In CVPR 2005, Vol. 2, pp. 60-65, IEEE. DOI:10.1109/CVPR.2005.38

2

J. Darbon, A. Cunha, T.F. Chan, S. Osher, and G.J. Jensen, Fast nonlocal filtering applied to electron cryomicroscopy, in 5th IEEE International Symposium on Biomedical Imaging: From Nano to Macro, 2008, pp. 1331-1334. DOI:10.1109/ISBI.2008.4541250

3(1,2)

Jacques Froment. Parameter-Free Fast Pixelwise Non-Local Means Denoising. Image Processing On Line, 2014, vol. 4, pp. 300-326. DOI:10.5201/ipol.2014.120

4

A. Buades, B. Coll, & J-M. Morel. Non-Local Means Denoising. Image Processing On Line, 2011, vol. 1, pp. 208-212. DOI:10.5201/ipol.2011.bcm_nlm

例子

>>> a = np.zeros((40, 40))
>>> a[10:-10, 10:-10] = 1.
>>> rng = np.random.default_rng()
>>> a += 0.3 * rng.standard_normal(a.shape)
>>> denoised_a = denoise_nl_means(a, 7, 5, 0.1)

相关用法


注:本文由纯净天空筛选整理自scikit-image.org大神的英文原创作品 skimage.restoration.denoise_nl_means。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。