操作小记(图像平滑处理)
程序员文章站
2022-07-14 09:47:01
...
图像平滑处理
描述:使用均值滤波、中值滤波、高斯滤波、双边滤波和自定义卷积核对同一幅图像进行处理,观察其结果的不同
代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.close('all')
img = cv2.cvtColor(cv2.imread("lena.jpg", 1), cv2.COLOR_BGR2RGB)
# 均值滤波
avg = cv2.blur(img, (5, 5))
# 中值滤波
median = cv2.medianBlur(img, 3)
# 高斯滤波器
guass = cv2.GaussianBlur(img, (5, 5), 0, 0)
# 双边滤波器
bi = cv2.bilateralFilter(img, 55, 100, 100)
# 锐化效果,提高图像对比度
kenerl = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
sharpen = cv2.filter2D(img, -1, kernel=kenerl)
titles = ['ori', 'mean', 'Guass', 'median', 'bilateral', 'filter2D']
images = [img, avg, guass, median, bi, sharpen]
for i in range(6):
plt.subplot(2, 3, i + 1), plt.imshow(images[i])
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
效果
思考
1.读取一幅带有纹理的图像,使用cv2.GuassianBlur()平滑,使用对称3x3、5x5、9x9和11x11大小窗口平滑并显示结果
代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.close('all')
img = cv2.cvtColor(cv2.imread("lena.jpg", 1), cv2.COLOR_BGR2RGB)
# 高斯滤波器
guass1 = cv2.GaussianBlur(img, (3, 3), 0, 0)
guass2 = cv2.GaussianBlur(img, (5, 5), 0, 0)
guass3 = cv2.GaussianBlur(img, (11, 11), 0, 0)
titles = ['ori', '3x3', '5x5', '11x11']
images = [img, guass1, guass2, guass3]
for i in range(4):
plt.subplot(2, 2, i + 1), plt.imshow(images[i])
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
效果
2.通过5x5高斯滤波器平滑图像两次,输出结是否和11x11滤波器平滑一次几乎相同?为什么?
答:不一样,高斯滤波是对周围像素计算加权平均值,较近的像素具有较大的权重值,所以11x11的范围算出的加权平均值,与5x5算两次得到的值不可能相同
代码
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.close('all')
img = cv2.cvtColor(cv2.imread("lena.jpg", 1), cv2.COLOR_BGR2RGB)
# 高斯滤波器
guass1 = cv2.GaussianBlur(img, (3, 3), 0, 0)
guass2 = cv2.GaussianBlur(guass1, (5, 5), 0, 0)
guass3 = cv2.GaussianBlur(img, (11, 11), 0, 0)
titles = ['ori', 'first 5x5', 'second 5x5', '11x11']
images = [img, guass1, guass2, guass3]
for i in range(4):
plt.subplot(2, 2, i + 1), plt.imshow(images[i])
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
效果
上一篇: 【MATLAB】三维图形的绘制mesh