Matplotlib - AGG Filter
AGG filter,即“聚合过滤器”,用于筛选大量数据,只显示满足特定条件的信息。想象你有一个装满玩具的大盒子,你只想看到红色的玩具。AGG filter 会帮助你快速从盒子里找出并挑出所有红色的玩具,而忽略其他玩具 −
Matplotlib 中的 AGG filter
在 Matplotlib 中,AGG filter(Anti-Grain Geometry filter,反锯齿几何过滤器)用于在图形元素(如线条、标记或文本)显示在图表上之前对其应用某些变换。AGG filter 允许我们修改图表中元素的外观,例如调整其透明度、模糊它们或应用其他视觉效果。
你可以使用 “FigureCanvasAgg()” function 来在 Matplotlib 中创建 AGG filter。此函数创建一个带有 AGG filter 的 canvas,允许你以更高的质量和清晰度显示图表和图像。
使用 AGG Filter 进行图像平滑
在 Matplotlib 中,使用 AGG filter 进行图像平滑是一种用于模糊或软化图像以减少噪声的技术。AGG filter 是图像平滑的可用选项之一,它对图像像素应用数学算法,平均相邻像素以创建更平滑的外观。此过程有助于去除不均匀的边缘并创建更具视觉吸引力的图像。
示例 - 图像平滑
在以下示例中,我们使用 AGG filter 执行图像平滑。我们首先生成一张随机噪声图像,然后使用 gaussian_filter() function 应用高斯平滑。随后,我们创建一个 Matplotlib figure,包含两个子图,并排显示原始图像和平滑后的图像 −
import matplotlib.pyplot as plt
from matplotlib.backends.backend_agg import FigureCanvasAgg
import numpy as np
from scipy.ndimage import gaussian_filter
# 生成随机噪声图像
np.random.seed(0)
image = np.random.rand(100, 100)
# 对图像应用高斯平滑
smoothed_image = gaussian_filter(image, sigma=2)
# 创建 figure 并绘制原始图像和平滑图像
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)')
# 隐藏坐标轴
for ax in axs:
ax.axis('off')
# 将 figure 保存为图像文件
canvas = FigureCanvasAgg(fig)
canvas.print_png('smoothed_image.png')
plt.show()
输出
以下是上述代码的输出 −

使用 AGG Filter 锐化图像
In Matplotlib 中,使用 AGG filter 锐化图像可以通过增加边缘处的对比度来增强图像的清晰度和细节。它涉及使用锐化 kernel 对图像进行卷积,该 kernel 通常在中心有正值,四周环绕负值。
示例 - 图像锐化
在这里,我们使用 AGG filter 执行图像锐化。我们首先加载图像,然后应用锐化 filter 来增强图像的边缘。这涉及定义一个锐化 kernel,并使用 scipy.ndimage.convolve() function 将其与图像进行卷积。最后显示图像 −
import matplotlib.pyplot as plt
from matplotlib.backends.backend_agg import FigureCanvasAgg
import numpy as np
from scipy.ndimage import convolve
# 加载示例图像
image = plt.imread('sun.jpg')
# Converting to grayscale if image has multiple channels
if len(image.shape) > 2:
image = image.mean(axis=2)
# 定义锐化 kernel
kernel = np.array([[-1, -1, -1],
[-1, 9, -1],
[-1, -1, -1]])
# 将 kernel 应用到图像上
sharpened_image = np.clip(convolve(image, kernel, mode='constant', cval=0.0), 0, 1)
# 创建 figure 并绘制原始图像和锐化图像
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)')
# 隐藏坐标轴
for ax in axs:
ax.axis('off')
# 将 figure 保存为图像文件
canvas = FigureCanvasAgg(fig)
canvas.print_png('sharpened_image.png')
plt.show()
输出
执行上述代码后,我们将得到以下输出 −
使用 AGG Filter 浮雕图像
In Matplotlib 中,使用 AGG filter 浮雕图像通过增强相邻像素之间的对比度来强调图像中的边缘,从而赋予其三维外观。它通过使用浮雕 kernel 对图像进行卷积来实现这一效果,该 kernel 通常包含负值和正值。浮雕图像通常具有凸起或凹陷的外观,模拟冲压或雕刻的效果。
示例 - 浮雕图像
在下面的示例中,我们使用 AGG filter 对图像进行浮雕处理。我们首先加载示例图像,然后定义一个浮雕 kernel,这是一个专为强调边缘而设计的特定矩阵。使用卷积将此 kernel 应用到图像上,即可生成浮雕图像 −
import matplotlib.pyplot as plt
from matplotlib.backends.backend_agg import FigureCanvasAgg
import numpy as np
from scipy.ndimage import convolve
# 加载示例图像
image = plt.imread('sun.jpg')
# Converting to grayscale if image has multiple channels
if len(image.shape) > 2:
image = image.mean(axis=2)
# 定义浮雕 kernel
kernel = np.array([[-2, -1, 0],
[-1, 1, 1],
[0, 1, 2]])
# 将 kernel 应用到图像上
embossed_image = np.clip(convolve(image, kernel, mode='constant', cval=0.0), 0, 1)
# 创建 figure 并绘制原始图像和浮雕图像
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)')
# 隐藏坐标轴
for ax in axs:
ax.axis('off')
# 将 figure 保存为图像文件
canvas = FigureCanvasAgg(fig)
canvas.print_png('embossed_image.png')
plt.show()
输出
执行上述代码后,我们得到以下输出 −
