1. 程式人生 > >Python3+OpenCV學習筆記(四):影象濾波基礎(均值、高斯、中值、雙邊)

Python3+OpenCV學習筆記(四):影象濾波基礎(均值、高斯、中值、雙邊)

OpenCV中還可以在影象上進行繪圖操作,由於資料都比較完善,所以附上鍊接,自行參悟。

好了,進入正題。在一張影象,在資料儲存或傳輸的過程中,或多或少都會引入噪聲,常見的影象噪聲如高斯噪聲、瑞利噪聲、椒鹽噪聲等,可參加連結:數字影象噪聲

為了避免噪聲對影象資訊進行干擾或者說為了更有利於影象的後續處理,所以需要對影象進行濾波。在OpenCV中,有幾種最基礎的影象濾波函式,cv2.blur(),cv2.GaussianBlur(),cv2.medianBlur(),cv2.bilateralFiter() ,可以分別進行均值濾波、高斯濾波、中值濾波和雙邊濾波。

首先,看看原圖:


下面的示例中,分別進行了四種方式的濾波:

import cv2
from matplotlib import pyplot as plt

img = cv2.imread('An.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 低通濾波器的效果是對影象進行模糊和平滑,減弱了
# 物體邊緣可見的快速變化。它是一種線性濾波器,原
# 理是:與核進行卷積運算,此時的核內定當我們需要
# 指定核函式進行卷積時可以用filter2D函式。

# ksize為模板寬度,奇數
# 均值平滑濾波:每個畫素替換為相鄰矩形內畫素的平均值
blur = cv2.blur(img, (7, 7))

# 高斯平滑濾波:核為高斯核
gauss = cv2.GaussianBlur(img, (9, 9), sigmaX=2)

# 中值濾波:原理是計算這組數的中值
# 並用中值替換當前的畫素值
median = cv2.medianBlur(img, 5)

# 雙邊濾波:很好地減少不必要的噪聲,同時保持邊緣
# 相當銳利。但是,與大多數過濾器相比,速度非常慢
bilateral = cv2.bilateralFilter(img, 5, 31, 31)

plt.subplot(221), plt.imshow(bilateral), plt.title('Bilateral')
plt.subplot(222), plt.imshow(blur), plt.title('Blur')
plt.subplot(223), plt.imshow(gauss), plt.title('Gaussian')
plt.subplot(224), plt.imshow(median), plt.title('Median')
plt.show()
均值濾波和高斯濾波屬於線性濾波,而中值濾波和雙邊濾波則是非線性濾波。

執行示例:


參考連結: