操作小記(圖像平滑處理)

圖像平滑處理

描述:使用均值濾波、中值濾波、高斯濾波、雙邊濾波和自定義卷積覈對同一幅圖像進行處理,觀察其結果的不同

代碼

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

效果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章