Matplotlib AGG filter 怎么用?如何在图表中应用 AGG 渲染过滤器?

文章导读
Previous Quiz Next AGG filter,即“聚合过滤器”,用于筛选大量数据,只显示满足特定条件的信息。想象你有一个装满玩具的大盒子,你只想看到红色的玩具。AGG filter 会帮助你快速从盒子里找出并挑出所有红色的玩具,而忽略其他玩具 −
📋 目录
  1. Matplotlib 中的 AGG filter
  2. 使用 AGG Filter 进行图像平滑
  3. 使用 AGG Filter 锐化图像
  4. 使用 AGG Filter 浮雕图像
A A

Matplotlib - AGG Filter



Previous
Quiz
Next

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()

输出

以下是上述代码的输出 −

Image Smoothing with AGG Filter

使用 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()

输出

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

Sharpening Image with AGG Filter

使用 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()

输出

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

Embossing Image with AGG Filter