天天看點

OpenCv-Python學習筆記(八):圖像平滑(圖像模糊)概述平均濾波器 高斯模糊中值模糊雙邊濾波

目錄

概述

平均濾波器

 高斯模糊

中值模糊

雙邊濾波

概述

低通濾波(LPF)可以去除圖像噪音,模糊圖像。高通濾波(HPF)可以找到圖像的邊緣。接下來我麼探讨圖像模糊即低通濾波的相關知識。圖像模糊其實定義一個卷積核,與圖進行卷積運算,去除圖像中的高頻部分,例如:噪音,邊界,是以邊界也會被模糊一點,當然,也有一些模糊技術不會模糊掉邊界。

平均濾波器

使用3*3的歸一化卷積核與圖像進行卷積操作,用卷積框區域所有像素的平均值來代替中心元素。y用到了cv2.blur()或cv2.boxFilter()函數。

OpenCv-Python學習筆記(八):圖像平滑(圖像模糊)概述平均濾波器 高斯模糊中值模糊雙邊濾波
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('../data/image/6.png')
#使用5*5的歸一化卷積框
blur1 = cv2.blur(img,(5,5))
#第二個參數表示輸出圖像深度,-1表示輸出圖像深度與輸入圖像相同
blur2 = cv2.boxFilter(img,-1,(5,5),normalize=True)
plt.subplot(131),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(132),plt.imshow(blur1),plt.title('Blurred1')
plt.xticks([]), plt.yticks([])
plt.subplot(133),plt.imshow(blur2),plt.title('Blurred2')
plt.xticks([]), plt.yticks([])
plt.show()
           
OpenCv-Python學習筆記(八):圖像平滑(圖像模糊)概述平均濾波器 高斯模糊中值模糊雙邊濾波

 高斯模糊

将卷積核換成高斯核,即卷積核中的值符合高斯分布(卷積核中心的值最大,其餘值根據距離中心元素的距離遞減)。用到的函數是cv2.GrussianBlur()。我們隻需要指定卷積核的大小即可,函數可以設定參數自動計算高斯核的值。

第一個參數表示輸入圖像

第二個參數表示卷積核的大小

第三個參數表示高斯核的X方向的标準差,例子中的0,表示根據卷積核的大小來計算高斯函數的标準差。

注:如果隻設定了X方向的值,Y方向的值預設等于X方向的值。

import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('../data/image/6.png')
blur = cv2.GaussianBlur(img,(5,5),0)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred1')
plt.xticks([]), plt.yticks([])
plt.show()
           
OpenCv-Python學習筆記(八):圖像平滑(圖像模糊)概述平均濾波器 高斯模糊中值模糊雙邊濾波

中值模糊

用卷積核對應像素的中值代替中心像素的值,這個濾波器經常用來去除椒鹽噪聲。前面的濾波器是用計算出的新值取代中心像素的值,而中值濾波是用中心像素周圍的值來取代。用到的函數是cv2.medianBlur()。

import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('../data/image/11.png')
blur = cv2.medianBlur(img,5)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred1')
plt.xticks([]), plt.yticks([])
plt.show()
           
OpenCv-Python學習筆記(八):圖像平滑(圖像模糊)概述平均濾波器 高斯模糊中值模糊雙邊濾波

雙邊濾波

 雙邊濾波能在保持邊界清晰的情況下有效的去除噪音,但是這種操作與其他濾波器相比比較慢。雙邊濾波器在同時使用空間高斯權重和灰階值相似性高斯權重。空間高斯函數確定隻有臨近區域的像素對中心點有影響,灰階值相似性高斯函數確定隻有與中心像素灰階值相近的才會被用來做模糊運算。是以這種方法會確定邊界不會被模糊掉。用到的函數是cv2.bilateralFilter()。

第一個參數表示輸入圖像

第二個參數表示鄰域直徑

第三個參數表示空間高斯函數标準差

第四個參數表示灰階值相似行高斯函數标準差

import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('../data/image/12.png')
blur = cv2.bilateralFilter(img,9,75,75)
plt.subplot(121),plt.imshow(img),plt.title('Original')
plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(blur),plt.title('Blurred1')
plt.xticks([]), plt.yticks([])
plt.show()
           
OpenCv-Python學習筆記(八):圖像平滑(圖像模糊)概述平均濾波器 高斯模糊中值模糊雙邊濾波

這裡的空間高斯函數和灰階相似性高斯函數還不能了解,目前這一個知識沒有在項目中用到,在後期項目實戰部分,如果有遇到再來補充。

繼續閱讀