Openev3 python基礎學習4——基礎濾波算法

概念說明

觀察圖像中這些變化的頻率就構成了另一條分類圖像的方法。這個觀點稱爲頻域。而通過觀察圖像灰度分佈來分類圖像稱爲空間域
頻域分析將圖像分成從低頻到高頻的不同部分。低頻對應圖像強度變化小的區域,而高頻是圖像強度變化非常大的區域。目前已存在若干轉換方法,如傅立葉變換或餘弦變換,可以用來清晰的顯示圖像的頻率內容。注意,由於圖像是一個二維實體,所以其由水平頻率(水平方向的變化)和豎直頻率(豎直方向的變化)共同組成。
在頻率分析領域的框架中,濾波器是一個用來增強圖像中某個波段或頻率並阻塞(或降低)其他頻率波段的操作。低通濾波器是消除圖像中高頻部分,但保留低頻部分。高通濾波器消除低頻部分

基礎算法

用低通濾波來平滑圖像

低通濾波器的目標是降低圖像的變化率。如將每個像素替換爲該像素周圍像素的均值。這樣就可以平滑並替代那些強度變化明顯的區域。

高斯模糊

在某些情況下,需要對一個像素的周圍的像素給予更多的重視。因此,可通過分配權重來重新計算這些周圍點的值。這可通過高斯函數(鐘形函數,即喇叭形數)的權重方案來解決。

區別

低通濾波與高斯濾波的不同之處在於:低通濾波中,濾波器中每個像素的權重是相同的,即濾波器是線性的。而高斯濾波器中像素的權重與其距中心像素的距離成比例。

使用中值濾波消除噪點

前面介紹的是線性過濾器,這裏介紹非線性過濾器——中值濾波器。中值濾波器對消除椒鹽現象特別有用

雙邊濾波(Bilateral filter)

是一種可以保邊去噪的濾波器。之所以可以達到此去噪效果,是因爲濾波器是由兩個函數構成。一個函數是由幾何空間距離決定濾波器係數。另一個由像素差值決定濾波器係數。

代碼

import cv2
import numpy as np

img  = cv2.imread("test.jpg")

#低通濾波
result_1 = cv2.blur(img,(5,5))   #低通濾波。參數一是輸入的待處理圖像,參數2是低通濾波器的大小

cv2.imshow("blur",result_1)

#高斯模糊
gaussianResult = cv2.GaussianBlur(img,(5,5),1.5)
cv2.imshow("Gaussian",gaussianResult)


#中通濾波
def salt(img,n):     #椒鹽噪聲
    for k in range(n):
        i = int(np.random.random() * img.shape[1])    #隨機設置噪聲點的座標
        j = int(np.random.random() * img.shape[0])
        if img.ndim == 2:     #
            img[j,i] = 255
        elif img.ndim == 3:
            img[j,i,0] = 255
            img[j, i, 1] = 255
            img[j, i, 2] = 255
    return img

salted = salt(img,500)
cv2.imshow("Salt",salted)

result_2 = cv2.medianBlur(img,5)   #中通濾波。第一個參數是待處理圖像,第二個參數是孔徑的尺寸,一個大於1的奇數
cv2.imshow("MedianBlur",result_2)

#雙邊濾波
blur_2=cv2.bilateralFilter(img,9,75,75)
cv2.imshow("bilateralFilter",blur_2)

cv2.waitKey(0)
cv2.destroyAllWindows()

參考:
【1】http://blog.csdn.net/sunny2038/article/details/9155893

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