下面就来讲解用Python在图像上应用高斯滤波器的完整攻略。
什么是高斯滤波器?
高斯滤波器是一种线性平滑滤波器,它可以对噪声信号进行平滑处理。高斯滤波器的核心思想是使用高斯函数作为卷积核,对图像中的每个像素进行加权平均处理。通过调整高斯函数的标准差,可以控制滤波器的大小。
用Python实现高斯滤波器的步骤
下面将介绍用Python实现高斯滤波器的步骤:
- 导入相关的库:
import cv2
import numpy as np
from matplotlib import pyplot as plt
- 加载图像:可以使用
cv2.imread()
函数加载图像。
img = cv2.imread("lena.jpg", 0)
- 定义高斯卷积核:
kernel_size = (5, 5)
sigma = 1.5
kernel = np.zeros(kernel_size)
sum = 0
for i in range(kernel_size[0]):
for j in range(kernel_size[1]):
kernel[i, j] = np.exp(-(np.square(i - kernel_size[0] // 2) + np.square(j - kernel_size[1] // 2)) / (2 * np.square(sigma)))
sum += kernel[i, j]
kernel /= sum
- 对图像进行高斯滤波:
filtered_img = cv2.filter2D(img, -1, kernel)
- 显示原图和处理后的图像:
plt.subplot(121), plt.imshow(img, cmap="gray"), plt.title("Original")
plt.subplot(122), plt.imshow(filtered_img, cmap="gray"), plt.title("Filtered")
plt.show()
示例
下面给出两个示例。
示例1
原始图像:
代码:
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread("test1.png", 0)
kernel_size = (7, 7)
sigma = 1.5
kernel = np.zeros(kernel_size)
sum = 0
for i in range(kernel_size[0]):
for j in range(kernel_size[1]):
kernel[i, j] = np.exp(-(np.square(i - kernel_size[0] // 2) + np.square(j - kernel_size[1] // 2)) / (2 * np.square(sigma)))
sum += kernel[i, j]
kernel /= sum
filtered_img = cv2.filter2D(img, -1, kernel)
plt.subplot(121), plt.imshow(img, cmap="gray"), plt.title("Original")
plt.subplot(122), plt.imshow(filtered_img, cmap="gray"), plt.title("Filtered")
plt.show()
处理后的图像:
示例2
原始图像:
代码:
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread("test2.jpg")
kernel_size = (11, 11)
sigma = 2
kernel = np.zeros(kernel_size)
sum = 0
for i in range(kernel_size[0]):
for j in range(kernel_size[1]):
kernel[i, j] = np.exp(-(np.square(i - kernel_size[0] // 2) + np.square(j - kernel_size[1] // 2)) / (2 * np.square(sigma)))
sum += kernel[i, j]
kernel /= sum
filtered_img = cv2.filter2D(img, -1, kernel)
plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)), plt.title("Original")
plt.subplot(122), plt.imshow(cv2.cvtColor(filtered_img, cv2.COLOR_BGR2RGB)), plt.title("Filtered")
plt.show()
处理后的图像:
以上就是用Python在图像上应用高斯滤波器的完整攻略和两个示例的说明,希望能对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解用Python在图像上应用高斯滤波器 - Python技术站