OpenCV滤波器 龙门石窟篇【Python-Open_CV系列(九)】(均值滤波器、中值滤波器、高斯滤波器、双边滤波器)
OpenCV濾波器專題@ 龍門石窟篇
?
?????????【Python-Open_CV系列(九)】
文章目錄
- 1. 濾波器
- 1.1 什么是濾波器?
- 1.2 關(guān)于濾波核
- 1.3 素材選擇
- 2.均值濾波器 cv2.blur()
- 2.1 語法簡介
- 2.2 代碼示例
- 2.2.1 3×3 濾波核為例
- 2.2.2 5×5 濾波核為例
- 2.2.3 10×10濾波核為例
- 3. 中值濾波器 cv2.medianBlur()
- 代碼示例
- 4. 高斯濾波器 cv2.GaussianBlur()
- 5. 雙邊濾波器 cv2.bilateralFilter()
??????????????????????????????????????????????????????????????????????????????????????????????
?????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????????????
大家好,我是侯小啾!
?今天分享的內(nèi)容是,OpenCV濾波器,本文將介紹的濾波器有均值濾波器、中值濾波器、高斯濾波器、雙邊濾波器。如果對您有所幫助,還請留下您寶貴的支持過的痕跡。
?????????????????????????????????????
1. 濾波器
1.1 什么是濾波器?
??濾波器是對圖像做平滑處理 的一種常用工具。
?
??平滑處理即在盡可能地保留原圖像信息的情況下,對像素值進(jìn)行微調(diào),使鄰近的像素值之間,值的大小趨于“平滑”,以去除圖像內(nèi)的噪聲、降低細(xì)節(jié)層次信息等的一系列的操作過程。本篇blog將為大家展示OpenCV中的均值濾波器 、中值濾波器 、高斯濾波器 和 雙邊濾波器。
??濾波器的算法邏輯為,指定一個濾波核的大小(該大小表示參與計(jì)算的像素?cái)?shù)據(jù)的范圍),以圖像中的每一個像素都作為波的核心,通過該范圍內(nèi)的數(shù)據(jù),以一定的計(jì)算方式進(jìn)行計(jì)算,將計(jì)算結(jié)果該值賦值給該像素。
1.2 關(guān)于濾波核
??以大小為n×n的濾波核為例,對于每一個像素?cái)?shù)據(jù),我們可以在數(shù)組中得到以一個像素為中心的n×n的矩陣,此即參與計(jì)算的數(shù)據(jù)的范圍(邊界)。這樣的矩陣結(jié)構(gòu)即被稱為濾波核。
1.3 素材選擇
使用圖像《龍門石窟》(longmen.jpg) shape:(350, 600, 3)
??????
2.均值濾波器 cv2.blur()
2.1 語法簡介
均值濾波器,也稱低通濾波器
顧名思義,均值濾波器即對濾波核內(nèi)的數(shù)據(jù)求均值,然后將這個值賦值給矩陣核心位置。
均值濾波器可以使用cv2.blur() 方法實(shí)現(xiàn)
cv2.blur()的語法:
dst = blur(src, ksize, dst=None, anchor=None, borderType=None)
其中
?
scr 即圖像
?
ksize 濾波核大小。使用一個元組表示,形如(a, b),a表示height(高度),b表示width(寬度)。
?
anchor 波核錨點(diǎn)
?
borderType 邊界類型
下邊以3×3,5×5,10×10三種濾波核為例,分別展示圖像經(jīng)過均值濾波器處理后的效果。
2.2 代碼示例
2.2.1 3×3 濾波核為例
import cv2 img = cv2.imread("longmen.jpg") dst1 = cv2.blur(img, (3, 3)) cv2.imshow("3*3", dst1) cv2.waitKey() cv2.destroyAllWindows()濾波效果如下:
??????
2.2.2 5×5 濾波核為例
import cv2 img = cv2.imread("longmen.jpg") dst2 = cv2.blur(img, (5, 5)) cv2.imshow("5*5", dst2) cv2.waitKey() cv2.destroyAllWindows()濾波效果如下:
??????
2.2.3 10×10濾波核為例
import cv2 img = cv2.imread("longmen.jpg") dst3 = cv2.blur(img, (10, 10)) cv2.imshow("10*10", dst3) cv2.waitKey() cv2.destroyAllWindows()????????
可以看出,濾波核大小越大,圖像越趨于模糊。
3. 中值濾波器 cv2.medianBlur()
中值濾波器,即對濾波核內(nèi)所有數(shù)據(jù)排序,將中間值賦值給濾波核核心位置的數(shù)字。
?
medianBlur(src, ksize, dst=None)
其中 ksize必須是奇數(shù),是偶數(shù)的話會發(fā)生報(bào)錯。
?
不同于均值濾波器的方法,cv2.blur(),cv2.blur()的ksize參數(shù)是一個元組,而cv2.blur()的ksize參數(shù)是一個數(shù)值。
代碼示例
import cv2 img = cv2.imread("longmen.jpg") dst1 = cv2.medianBlur(img, 3) cv2.imshow("3*3", dst1) cv2.waitKey() cv2.destroyAllWindows()濾波后效果如下:
?????
4. 高斯濾波器 cv2.GaussianBlur()
高斯濾波器也被稱為高斯模糊 或 高斯平滑 。
高斯濾波器可以在降低圖片噪聲、細(xì)節(jié)層次的同時保留更多的圖像信息,使經(jīng)過處理的圖像呈現(xiàn)出“磨砂玻璃”的濾鏡效果。
?
使用均值濾波時,每個像素都是均等權(quán)重的。使用高斯濾波器求的是不同權(quán)重下的均值,越靠近核心的像素的權(quán)重越大,約靠近邊緣的像素的權(quán)重則越小。
與濾波核對應(yīng)的由每個數(shù)據(jù)權(quán)重組成的矩陣結(jié)構(gòu),是一個卷積核。卷積核中所有權(quán)重值的和為1。卷積核中的數(shù)值會隨著核的大小而變化。
OpenCV使用cv2.GaussianBlur()方法實(shí)現(xiàn)高斯濾波器。其語法如下:
GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
其中
?
src 為目標(biāo)圖像
?
ksize 是濾波核大小,寬高必須是奇數(shù) 。格式為是元組形式。
?
修改sigmaX 和 sigmaY都會改變卷積核中的權(quán)重值。這里涉及卷積方面的知識。
?
borderType 是邊界類型。
以9×9的濾波核為例
import cv2 img = cv2.imread("longmen.jpg") dst1 = cv2.GaussianBlur(img, (9, 9), 0, 0) cv2.imshow("9*9", dst1) cv2.waitKey() cv2.destroyAllWindows()濾波后效果如下:
?????
5. 雙邊濾波器 cv2.bilateralFilter()
前三種濾波方式都會使圖像變得平滑的同時,邊緣區(qū)域變得模糊不清。
雙邊濾波是可以在濾波過程中起到保護(hù)圖像邊界信息作用的濾波操作方法。
?
其邏輯為:
如果圖像在邊緣區(qū)域,則加大邊緣像素的權(quán)重,盡可能地讓邊緣區(qū)域的像素值保持不變。如果不在邊緣區(qū)域(在平坦區(qū)域),則使用類似高斯濾波器的算法進(jìn)行。
雙邊濾波器的語法為:
?
bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
?
scr ??即目標(biāo)圖像
?
d ??過濾期間使用的每個像素鄰域的直徑。如果為非正,則根據(jù)sigmaSpace計(jì)算。即如果為15,則表示15×15的濾波核。
?
sigmaColor ??參與計(jì)算的顏色的范圍,只有像素小于這個值時,以其為核心的濾波核才參與濾波計(jì)算。否則不參與。當(dāng)sigmaColor值為255時,表示所有像素值為核心的濾波核都會參與。
?
sigmaSpace ??坐標(biāo)空間的σ\sigmaσ值,σ\sigmaσ越大,參與計(jì)算的像素?cái)?shù)量就越多。
?
borderType ??邊界的樣式。
還以圖片"longmen.jpg"為例,
選擇20×20的濾波核,
參與計(jì)算的像素值范圍為:小于125的像素值;
坐標(biāo)空間的σ\sigmaσ值為,200
雙邊濾波效果如下:
?????
可以看出,相比以上濾波效果,雙邊濾波保留了較清晰的圖像邊緣信息。
本次分享就到這里。小啾感謝您的關(guān)注與支持!更多精彩內(nèi)容敬請期待!
🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??🌹??
🌹??本系列blog傳送門:
?
?OpenCV圖像處理基本操作 【Python-Open_CV系列(一)】
?
?OpenCV像素處理基本操作 【Python-Open_CV系列(二)】
?
?OpenCV之 BGR、GRAY、HSV色彩空間&色彩通道專題 【Python-Open_CV系列(三)】
?
?OpenCV繪制圖像與文字(可作為腳手架代碼)(python) 【Python-Open_CV系列(四)】
?
?OpenCV圖像幾何變換專題(縮放、翻轉(zhuǎn)、仿射變換及透視)【python-Open_CV系列(五)】
?
?基于梵·高《向日葵》的 圖像閾值處理專題(二值處理、反二值處理、截?cái)嗵幚?、自適應(yīng)處理及Otsu方法)【Python-Open_CV系列(六)】
?
?OpenCV基本功 之 圖像的掩模、運(yùn)算 & 合并專題 -小啾帶學(xué)【Python-Open_CV系列(七)】
?
?《三英戰(zhàn)呂布》 - 圖像模板匹配 【Python-Open_CV系列(八)】
?
?OpenCV濾波器 龍門石窟篇【Python-Open_CV系列(九)】(均值濾波器、中值濾波器、高斯濾波器、雙邊濾波器)
?
?Open_CV形態(tài)學(xué)運(yùn)算專題 (腐蝕&膨脹、開&閉運(yùn)算、梯度運(yùn)算、頂帽運(yùn)算黑帽運(yùn)算 )【Python-Open_CV系列(十)】
?
?霍夫變換看不懂?小啾帶你串一遍:OpenCV圖形檢測專題 這樣學(xué)最簡單【Python-Open_CV系列(十一)】
?
?小啾帶你開天眼 之 開啟py-OpenCV攝像頭及視頻處理【Python-Open_CV系列(十二)】
?
?小啾帶你開天眼 之 人臉檢測與識別(以及華強(qiáng)、皇叔、高祖配墨鏡特效)【Python-Open_CV系列(十三)】
總結(jié)
以上是生活随笔為你收集整理的OpenCV滤波器 龙门石窟篇【Python-Open_CV系列(九)】(均值滤波器、中值滤波器、高斯滤波器、双边滤波器)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UE4联网机制和多人游戏总结 (第一部分
- 下一篇: (CODE)计算机视觉引论及数字成像系统