Matplotlib - AGG 滤镜



AGG 滤镜,即“聚合滤镜”,用于筛选大量数据,仅显示满足特定条件的信息。想象一下,你有一个大盒子装着玩具,你只想看到红色的玩具。AGG 滤镜可以帮助你快速找到并挑选出盒子里的所有红色玩具,而忽略其他的玩具。

AGG filter

Matplotlib 中的 AGG 滤镜

在 Matplotlib 中,AGG 滤镜,或抗锯齿几何滤镜,用于在图形元素(如线条、标记或文本)显示在绘图上之前对其应用某些变换。AGG 滤镜允许我们修改绘图中元素的外观,例如调整其透明度、模糊它们或应用其他视觉效果。

可以使用 "FigureCanvasAgg()" 函数在 Matplotlib 中创建 AGG 滤镜。此函数创建一个带有 AGG 滤镜的画布,允许你显示具有改进的质量和清晰度的绘图和图像。

使用 AGG 滤镜进行图像平滑

在 Matplotlib 中,使用 AGG 滤镜进行图像平滑是一种用于模糊或软化图像以减少噪声的技术。AGG 滤镜是用于图像平滑的可用选项之一,它将数学算法应用于图像像素,对相邻像素进行平均以创建更平滑的外观。此过程有助于去除不均匀的边缘并创建更具视觉吸引力的图像。

示例

在下面的示例中,我们使用 AGG 滤镜进行图像平滑。我们首先生成一个随机噪声图像,然后使用 gaussian_filter() 函数应用高斯平滑。之后,我们创建一个 Matplotlib 图形,其中包含两个子图,用于并排显示原始图像和平滑后的图像。

import matplotlib.pyplot as plt
from matplotlib.backends.backend_agg import FigureCanvasAgg
import numpy as np
from scipy.ndimage import gaussian_filter

# Generating random noisy image
np.random.seed(0)
image = np.random.rand(100, 100)

# Applying Gaussian smoothing to the image
smoothed_image = gaussian_filter(image, sigma=2)

# Creating a figure and plot the original and smoothed images
fig, axs = plt.subplots(1, 2, figsize=(10, 5))

axs[0].imshow(image, cmap='gray')
axs[0].set_title('Original Image')

axs[1].imshow(smoothed_image, cmap='gray')
axs[1].set_title('Smoothed Image (AGG Filter)')

# Hiding the axes
for ax in axs:
   ax.axis('off')

# Saving the figure as an image file
canvas = FigureCanvasAgg(fig)
canvas.print_png('smoothed_image.png')

plt.show()

输出

以下是上述代码的输出:

Image Smoothing with AGG Filter

使用 AGG 滤镜锐化图像

在 Matplotlib 中,使用 AGG 滤镜锐化图像通过增加边缘的对比度来增强图像的清晰度和细节。它涉及使用锐化核卷积图像,锐化核通常在中心具有正值,周围环绕着负值。

示例

在这里,我们使用 AGG 滤镜进行图像锐化。我们首先加载图像,然后应用锐化滤镜以增强图像的边缘。这涉及定义锐化核并使用 scipy.ndimage.convolve() 函数将其与图像进行卷积。最后,我们显示图像。

import matplotlib.pyplot as plt
from matplotlib.backends.backend_agg import FigureCanvasAgg
import numpy as np
from scipy.ndimage import convolve

# Loading an example image
image = plt.imread('sun.jpg')

# Converting to grayscale if image has multiple channels
if len(image.shape) > 2:
   image = image.mean(axis=2)

# Defining a sharpening kernel
kernel = np.array([[-1, -1, -1],
   [-1,  9, -1],
   [-1, -1, -1]])

# Applying the kernel to the image
sharpened_image = np.clip(convolve(image, kernel, mode='constant', cval=0.0), 0, 1)

# Creating a figure and plot the original and sharpened images
fig, axs = plt.subplots(1, 2, figsize=(10, 5))

axs[0].imshow(image, cmap='gray')
axs[0].set_title('Original Image')

axs[1].imshow(sharpened_image, cmap='gray')
axs[1].set_title('Sharpened Image (AGG Filter)')

# Hiding the axes
for ax in axs:
   ax.axis('off')

# Saving the figure as an image file
canvas = FigureCanvasAgg(fig)
canvas.print_png('sharpened_image.png')

plt.show()

输出

执行上述代码后,我们将得到以下输出:

Sharpening Image with AGG Filter

使用 AGG 滤镜压印图像

在 Matplotlib 中,使用 AGG 滤镜压印图像通过增强相邻像素之间的对比度来突出图像中的边缘,从而使其具有三维外观。它通过使用压印核卷积图像来实现此效果,压印核通常包含负值和正值。压印图像通常具有凸起或凹陷的外观,模拟冲压或雕刻的效果。

示例

在下面的示例中,我们使用 AGG 滤镜来压印图像。我们首先加载一个示例图像,然后定义一个压印核,这是一个旨在突出边缘的特定矩阵。使用卷积将此核应用于图像会生成压印图像。

import matplotlib.pyplot as plt
from matplotlib.backends.backend_agg import FigureCanvasAgg
import numpy as np
from scipy.ndimage import convolve

# Loading an example image
image = plt.imread('sun.jpg')

# Converting to grayscale if image has multiple channels
if len(image.shape) > 2:
   image = image.mean(axis=2)

# Defining an embossing kernel
kernel = np.array([[-2, -1, 0],
   [-1,  1, 1],
   [0, 1, 2]])

# Applying the kernel to the image
embossed_image = np.clip(convolve(image, kernel, mode='constant', cval=0.0), 0, 1)

# Creating a figure and plot the original and embossed images
fig, axs = plt.subplots(1, 2, figsize=(10, 5))

axs[0].imshow(image, cmap='gray')
axs[0].set_title('Original Image')

axs[1].imshow(embossed_image, cmap='gray')
axs[1].set_title('Embossed Image (AGG Filter)')

# Hiding the axes
for ax in axs:
   ax.axis('off')

# Saving the figure as an image file
canvas = FigureCanvasAgg(fig)
canvas.print_png('embossed_image.png')

plt.show()

输出

执行上述代码后,我们将得到以下输出:

Embossing Image with AGG Filter
广告