一、实验介绍
1. 实验内容
本实验将学习高斯模糊。
2. 实验要点
- 高斯模糊图像
- 使用高通滤波器测试性能
3. 实验环境
- Python 3.6.6
- numpy
- matplotlib
- cv2
二、实验步骤
1 导入资源并显示图像
In [1]:
import numpy as npimport matplotlib.pyplot as pltimport cv2%matplotlib inline# 读入图像image = cv2.imread('images/brain_MR.jpg')
# 制作图像副本image_copy = np.copy(image)# 将颜色更改为RGB(从BGR)image_copy = cv2.cvtColor(image_copy, cv2.COLOR_BGR2RGB)plt.imshow(image_copy)
Out[1]:
<matplotlib.image.AxesImage at 0x7f3ab5ebd0b8>
2 高斯模糊图像
In [2]:
# 转换为灰度用于过滤gray = cv2.cvtColor(image_copy, cv2.COLOR_RGB2GRAY)# 创建高斯模糊图像gray_blur = cv2.GaussianBlur(gray, (9, 9), 0)f, (ax1, ax2) = plt.subplots(1, 2, figsize=(20,10))ax1.set_title('original gray')ax1.imshow(gray, cmap='gray')ax2.set_title('blurred image')ax2.imshow(gray_blur, cmap='gray')
Out[2]:
<matplotlib.image.AxesImage at 0x7f3a84244cf8>
3 使用高通滤波器测试性能
In [3]:
# 高通滤波器# 3x3 Sobel滤波器用于边缘检测sobel_x = np.array([[ -1, 0, 1],[ -2, 0, 2],[ -1, 0, 1]])sobel_y = np.array([[ -1, -2, -1],[ 0, 0, 0],[ 1, 2, 1]])# 使用filter2D过滤原始和模糊的灰度图像filtered = cv2.filter2D(gray, -1, sobel_x)filtered_blurred = cv2.filter2D(gray_blur, -1, sobel_y)f, (ax1, ax2) = plt.subplots(1, 2, figsize=(20,10))ax1.set_title('original gray')ax1.imshow(filtered, cmap='gray')ax2.set_title('blurred image')ax2.imshow(filtered_blurred, cmap='gray')
Out[3]:
<matplotlib.image.AxesImage at 0x7ff2b0216518>
In [4]:
# 创建一个阈值,将所有过滤的像素设置为白色# 在一定的阈值之上retval, binary_image = cv2.threshold(filtered_blurred, 50, 255, cv2.THRESH_BINARY)plt.imshow(binary_image, cmap='gray')
Out[4]:
<matplotlib.image.AxesImage at 0x7ff2b018be10>