Python Pillow 简明教程
Python Pillow - Reducing Noise
在 Pillow 中减少噪点是指对图像应用各种技术和滤波器以消除或减少可能降低图像质量的不需要的人工制品或不规则性的过程。图像噪点是图像中亮度或颜色的随机变化,通常由光线不足、电子干扰或图像传感器中的缺陷等因素引起。减少噪点是图像处理中改善图像整体质量的重要步骤。
Pillow (PIL) 提供了几个用于减少图像中噪点的内置滤波器和方法。Pillow 中用于减少噪点的一些常见技术和滤波器包括 −
-
Gaussian Blur :对图像应用高斯模糊滤波器有助于通过对每个像素邻近区域中的像素值求平均值来平滑地减少噪点。这会创建更平滑的外观并可以减少噪点的影响。可以调整模糊程度以控制噪点减少的程度。
-
Median Filter :中值滤波器用邻近像素的中值替换每个像素的值。中值滤波器对于去除孤立像素具有极值的椒盐噪点非常有效。它用邻近像素的中值替换每个像素值。
-
Bilateral Filter :双边滤波器在保留边缘的同时平滑图像。它可以在保持图像细节的同时有效减少噪点。
-
Denoising Algorithms :Pillow 支持各种去噪算法,例如双边滤波器、全变差 (TV) 去噪算法或非局部均值 (NLMeans) 滤波器,可用于在保留图像细节的同时减少噪点。
-
Thresholding :我们可以对图像应用阈值,通过将低于特定阈值的像素值转换为黑色,将高于阈值的像素值转换为白色,从而消除噪点,有效地对图像进行二值化。
Python Pillow - Image.filter() Method
Image.filter() 是 Python 影像库 (PIL) 或它衍生的 Pillow 中的一种方法。Pillow 用于对图像应用各种图像滤镜和增强。滤镜是图像处理操作,可用于不同方式修改图像,例如模糊、锐化或增强某些特征。此方法允许我们对图像应用各种预定义的滤镜。
Pillow 提供各种可与 Image.filter() 一起使用的预定义滤镜,包括 −
-
ImageFilter.BLUR − 对图像应用简单的模糊。
-
ImageFilter.CONTOUR − 增强图像中对象的轮廓。
-
ImageFilter.DETAIL − 增强图像的详细信息。
-
ImageFilter.EDGE_ENHANCE − 强调图像中的边缘。
-
ImageFilter.EMBOSS − 为图像添加 3D 浮雕效果。
-
ImageFilter.SHARPEN − 锐化图像。
Syntax
Image.filter() 使用的语法和参数如下 −
output_image = input_image.filter(filter_name, filter_parameters)
其中,
-
input_image − 这是我们要对其应用滤镜的源图像。
-
filter_name − 这是指定我们要应用的滤镜名称的字符串。Pillow 提供各种内置滤镜,我们可以将其中一个滤镜名称用作字符串。例如“高斯模糊”、“中值滤镜”、“锐化”等。我们还可以通过提供内核(值列表)作为滤镜来定义自定义滤镜。
-
filter_parameters (optional) − 某些滤镜可以接受控制滤镜行为的其他参数。这些参数特定于正在使用的特定滤镜。如果我们应用的滤镜需要参数,我们将在 filter_parameters 部分将它们作为参数传递。
Example
在此示例中,我们尝试通过将 ImageFilter.BLUR 作为输入参数传递给 Image.filter() 方法来模糊图像。
from PIL import Image, ImageFilter
#Open an image
input_image = Image.open("Images/flowers.jpg")
#Apply Gaussian blur to the image
output_image = input_image.filter(ImageFilter.BLUR())
#Save the resulting image
output_image.save("output Image/blur.jpg")
output_image.show()
Example
在此示例中,我们使用 ImageFilter.BoxBlur() 方法模糊图像的特定部分。
from PIL import Image, ImageFilter
#Open an image
input_image = Image.open("Images/rose.jpg")
#Apply Gaussian blur to the image
output_image = input_image.filter(ImageFilter.BoxBlur(20))
#Save the resulting image
output_image.save("output Image/blur.jpg")
output_image.show()