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


Python skimage.filters.unsharp_mask用法及代码示例


用法:

skimage.filters.unsharp_mask(image, radius=1.0, amount=1.0, multichannel=False, preserve_range=False, *, channel_axis=None)

不锐化掩蔽滤镜。

清晰的细节被识别为原始图像与其模糊版本之间的差异。然后将这些细节缩放,并添加回原始图像。

参数

image[P, ..., ]M[, N][, C] ndarray

输入图像。

radius标量或标量序列,可选

如果给定一个标量,那么它的值将用于所有维度。如果给出了序列,那么除了多通道图像的最后一个维度之外,每个维度都必须有一个半径。请注意,0 半径表示没有模糊,并且不允许使用负值。

amount标量,可选

细节将被这个因子放大。该因子可以为 0 或负数。通常,它是一个小的正数,例如1.0。

multichannel布尔型,可选

如果为真,最后一个image维度被视为颜色通道,否则视为空间。颜色通道是单独处理的。此参数已弃用:指定channel_axis反而。

preserve_range布尔型,可选

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

channel_axisint 或无,可选

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

返回

output[P, ..., ]M[, N][, C] ndarray of float

应用了模糊蒙版的图像。

其他参数

multichannelDEPRECATED

已弃用以支持channel_axis。

注意

Unsharp masking 是一种图像锐化技术。它是一种线性图像操作,并且数值稳定,不像是ill-posed 问题的反卷积。由于这种稳定性,它通常比反卷积更受欢迎。

主要思想如下:锐利的细节被识别为原始图像与其模糊版本之间的差异。这些细节在缩放步骤后被添加回原始图像:

增强图像 = 原始 + 数量 *(原始 - 模糊)

将此滤镜单独应用于多个颜色层时,可能会发生颜色渗色。通过仅在适当的色彩空间(例如 HSV、HSL、YUV 或 YCbCr)中处理亮度/明度/强度通道,可以获得更视觉上令人愉悦的结果。

大多数介绍性数字图像处理书籍中都说明了锐化遮罩。此实现基于 [1]

参考

1

Maria Petrou, Costas Petrou “Image Processing: The Fundamentals”, (2010), ed ii., page 357, ISBN 13: 9781119994398 DOI:10.1002/9781119994398

2

Wikipedia. Unsharp masking https://en.wikipedia.org/wiki/Unsharp_masking

例子

>>> array = np.ones(shape=(5,5), dtype=np.uint8)*100
>>> array[2,2] = 120
>>> array
array([[100, 100, 100, 100, 100],
       [100, 100, 100, 100, 100],
       [100, 100, 120, 100, 100],
       [100, 100, 100, 100, 100],
       [100, 100, 100, 100, 100]], dtype=uint8)
>>> np.around(unsharp_mask(array, radius=0.5, amount=2),2)
array([[0.39, 0.39, 0.39, 0.39, 0.39],
       [0.39, 0.39, 0.38, 0.39, 0.39],
       [0.39, 0.38, 0.53, 0.38, 0.39],
       [0.39, 0.39, 0.38, 0.39, 0.39],
       [0.39, 0.39, 0.39, 0.39, 0.39]])
>>> array = np.ones(shape=(5,5), dtype=np.int8)*100
>>> array[2,2] = 127
>>> np.around(unsharp_mask(array, radius=0.5, amount=2),2)
array([[0.79, 0.79, 0.79, 0.79, 0.79],
       [0.79, 0.78, 0.75, 0.78, 0.79],
       [0.79, 0.75, 1.  , 0.75, 0.79],
       [0.79, 0.78, 0.75, 0.78, 0.79],
       [0.79, 0.79, 0.79, 0.79, 0.79]])
>>> np.around(unsharp_mask(array, radius=0.5, amount=2, preserve_range=True), 2)
array([[100.  , 100.  ,  99.99, 100.  , 100.  ],
       [100.  ,  99.39,  95.48,  99.39, 100.  ],
       [ 99.99,  95.48, 147.59,  95.48,  99.99],
       [100.  ,  99.39,  95.48,  99.39, 100.  ],
       [100.  , 100.  ,  99.99, 100.  , 100.  ]])

相关用法


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