欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenCV-Python實(shí)現(xiàn)圖像平滑處理操作

 更新時(shí)間:2021年06月08日 15:40:39   作者:一天一篇Python庫(kù)  
圖像平滑處理的噪聲取值主要有6種方法,本文主要介紹了這6種方法的具體使用并配置實(shí)例方法,具有一定的參考價(jià)值,感興趣的可以了解一下

什么是圖像平滑處理

在盡量保留圖像原有信息的情況下,過(guò)濾掉圖像內(nèi)部的噪聲,這一過(guò)程我們稱之為圖像的平滑處理,所得到的圖像稱為平滑圖像。

那么什么是圖像的噪聲呢?

圖像的噪聲就是圖像中與周圍像素點(diǎn)差異較大的像素點(diǎn)。噪聲的處理就是將其更改為臨近像素點(diǎn)的近似值,使圖像更平滑。

圖像平滑處理的噪聲取值的方式有以下6種:

(1)均值濾波

(2)方框?yàn)V波

(3)高斯濾波

(4)中值濾波

(5)雙邊濾波

(6)2D卷積(自定義濾波)

均值濾波

均值濾波是指用當(dāng)前像素點(diǎn)周圍N*N個(gè)像素點(diǎn)的均值來(lái)代替當(dāng)前像素值。使用該方法遍歷處理圖像內(nèi)的每一個(gè)像素點(diǎn),即可完成整幅圖像的均值濾波。

在進(jìn)行均值濾波處理時(shí),我們需要考慮對(duì)周圍多少個(gè)像素點(diǎn)取平均值。通常情況下,我們會(huì)以當(dāng)前像素點(diǎn)為中心,對(duì)行數(shù)和列數(shù)相等的一塊區(qū)域內(nèi)的所有像素點(diǎn)取平均值。

但是邊緣像素點(diǎn)可能不能這樣做,畢竟比如左上角的像素點(diǎn)是沒有左上像素點(diǎn)的,這個(gè)時(shí)候我們常常會(huì)取圖像內(nèi)存在的周圍鄰域點(diǎn)的平均值。

在OpenCV中,它給我們提供的均值濾波函數(shù)為cv2.blur(),其完整定義如下:

def blur(src, ksize, dst=None, anchor=None, borderType=None): 

src:原始圖像

kszie:濾波中心的大小,也就是取平均值的周圍像素點(diǎn)的高度與寬度,比如(5,5),就是取5*5鄰域像素點(diǎn)均值作為結(jié)果。

anchor:錨點(diǎn),其默認(rèn)值為(-1,1),表示當(dāng)前計(jì)算均值的點(diǎn)位于核的中心點(diǎn)位置。一般使用默認(rèn)值即可。

borderType:邊界樣式,該值決定了以何種方式處理邊界,一般情況下不需要更改。

了解了該函數(shù)的定義,下面我們簡(jiǎn)單的來(lái)完成一個(gè)去噪圖像,具體代碼如下所示:

import cv2

img = cv2.imread("5.jpg")
result_5img = cv2.blur(img, (5, 5))
result_30img= cv2.blur(img, (30, 30))
cv2.imshow("img", img)
cv2.imshow("result_5img", result_5img)
cv2.imshow("result_30img", result_30img)
cv2.waitKey()
cv2.destroyAllWindows()

運(yùn)行之后,效果如下所示:

530

從上圖可以看出來(lái),使用(5,5)卷積進(jìn)行均值濾波處理后圖像雖然模糊,但還可以辨認(rèn)。而使用(30,30)卷積進(jìn)行均值濾波,圖像失真非常嚴(yán)重。

所以,我們可以得出來(lái),卷積核越大,去噪效果越好,花費(fèi)的時(shí)間越長(zhǎng),同時(shí)圖像失真也越嚴(yán)重。而實(shí)際的處理中,我們需要在失真與去噪之間取得平衡,選取合適的卷積大小。

方框?yàn)V波

方框?yàn)V波與均值濾波的不同之處在于,方框?yàn)V波不會(huì)計(jì)算像素均值,它可以自由選擇是否對(duì)均值濾波的結(jié)果進(jìn)行歸一化,即可以自由選擇濾波結(jié)果是鄰域像素值之和的平均值,還是鄰域像素值之和。

在OpenCV中,它提供cv2.boxFilter()函數(shù)來(lái)實(shí)現(xiàn)方框?yàn)V波,其完整定義如下:

def boxFilter(src, ddepth, ksize, dst=None, anchor=None, normalize=None, borderType=None): 

src:原始圖像

ddepth:處理結(jié)果圖像的圖像深度,一般使用-1表示與原圖像使用相同的圖像深度

ksize:濾波核心的大小

normalize:是否在濾波時(shí)進(jìn)行歸一化處理。當(dāng)它為1時(shí),表示要進(jìn)行歸一化處理,也就是鄰域像素值的和除以面積,比如(3,3),公式如下:

公式

當(dāng)它為0時(shí),表示不需要進(jìn)行歸一化處理,直接使用鄰域像素值的和。

下面,我們來(lái)用程序分別實(shí)現(xiàn)歸一化與不歸一化的效果,代碼如下:

import cv2

img = cv2.imread("5.jpg")
result1 = cv2.boxFilter(img, -1, (5, 5))
result2 = cv2.boxFilter(img, -1, (30, 30))
result3 = cv2.boxFilter(img, -1, (2, 2),normalize=0)
cv2.imshow("img", img)
cv2.imshow("result1", result1)
cv2.imshow("result2", result2)
cv2.imshow("result3", result3)
cv2.waitKey()
cv2.destroyAllWindows()

運(yùn)行之后,顯示的效果如下所示:

效果

可以看到,左下角不需要?dú)w一化處理,這里只?。?,2),如果你取大了,可以試試。因?yàn)榉秶罅?,和一般都?huì)大于255,那么就會(huì)造成圖像全是白色。

高斯濾波

在進(jìn)行均值濾波與方框?yàn)V波時(shí),其鄰域內(nèi)每個(gè)像素的權(quán)重是相等的。而高斯濾波會(huì)將中心點(diǎn)的權(quán)重加大,遠(yuǎn)離中心點(diǎn)的權(quán)重減小,以此來(lái)計(jì)算鄰域內(nèi)各個(gè)像素值不同權(quán)重的和。

在OpenCV中,它給我們提供cv2.GaussianBlur()函數(shù)進(jìn)行高斯濾波,其完整定義如下:

def GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None):

src:原始圖像

ksize:濾波核的大小

sigmaX:卷積和在水平方向上(X軸方向)的標(biāo)準(zhǔn)差,其控制的是權(quán)重比例

sigmaY:卷積和在垂直方向上(Y軸方向)的標(biāo)準(zhǔn)差,也是控制的是權(quán)重比例。如果它為0,只采用sigmaX的值,如果sigmaX與sigmaY都是0,則通過(guò)ksize.width和ksize.height計(jì)算得到(可選參數(shù))

下面,我們來(lái)使用高斯濾波看看效果,代碼如下所示:

import cv2

img = cv2.imread("5.jpg")
result = cv2.GaussianBlur(img, (3, 3), 0, 0)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()

運(yùn)行之后,效果如下所示:

高斯濾波

中值濾波

中值濾波與前面的三種濾波都不同,它不在采用加權(quán)求均值的方式計(jì)算濾波結(jié)果,而是用鄰域內(nèi)所有像素值的中間值來(lái)代替當(dāng)前像素點(diǎn)的像素值。

簡(jiǎn)單點(diǎn)說(shuō),就是取當(dāng)前像素點(diǎn)及其周圍臨近像素點(diǎn)的像素值,將這些值進(jìn)行排序后,取中間位置的像素值作為當(dāng)前位置的像素值。

在OpenCV中,它提供給我們cv2.medianBlur()函數(shù)來(lái)進(jìn)行中值濾波,其完整定義如下:

def medianBlur(src, ksize, dst=None): 

src:原始圖像

kszie:濾波核的大小

參數(shù)就兩個(gè),下面我們來(lái)用代碼測(cè)試一下:

import cv2

img = cv2.imread("5.jpg")
result = cv2.medianBlur(img, 3)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()

運(yùn)行之后,顯示效果如下:

中值濾波

可以看到,這里我們將臉上的紅點(diǎn)去掉了。需要特別注意的是,濾波核的大小必須是奇數(shù),矩陣中心點(diǎn)向外衍生必然是奇數(shù),不信可以隨便矩陣取一點(diǎn)試試。

雙邊濾波

雙邊濾波是綜合考慮空間信息和色彩信息的濾波方式,在濾波的過(guò)程中能夠有效地保護(hù)圖像內(nèi)的邊緣信息。

前面濾波方式基本只考慮了空間的權(quán)重信息,這種情況計(jì)算起來(lái)比較方便,但是邊緣信息的處理上存在較大問(wèn)題。而雙邊濾波在處理邊緣時(shí),與當(dāng)前點(diǎn)色彩相近的像素點(diǎn)給與較大的權(quán)重值,而與當(dāng)前像素點(diǎn)色彩差別大的會(huì)給較小的權(quán)重,這樣就保護(hù)了邊緣信息。

簡(jiǎn)單點(diǎn)概括,雙邊濾波在計(jì)算某一個(gè)像素點(diǎn)的新值時(shí),不僅考慮距離信息,還考慮色彩信息。雙邊濾波即能有效地去除噪聲,又能很好地保護(hù)邊緣信息。

在OpenCV中,它給我們提供cv2.bilateralFilter()函數(shù)來(lái)實(shí)現(xiàn),其完整定義如下:

def bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None):

src:原始圖像

d:在濾波時(shí)選取的空間距離參數(shù),這里表示以當(dāng)前像素點(diǎn)為中心點(diǎn)的直徑。如果該值為非正數(shù),則會(huì)從參數(shù)sigmaSpace計(jì)算得到。如果濾波空間較大,比如d>5,則速度較慢。因此,在實(shí)際的應(yīng)用中,推薦d=5。對(duì)于噪聲較大的離線濾波,可以選擇d=9。

sigmaColor:在濾波處理時(shí),選擇的顏色范圍,該值決定了周圍哪些像素點(diǎn)能夠參與到濾波中來(lái)。與當(dāng)前像素點(diǎn)的像素值差值小于sigmaColor的像素點(diǎn),能夠參與到當(dāng)前的濾波中。該值越大,就說(shuō)明周圍有越多的像素點(diǎn)可以參與到運(yùn)算中。該值為0時(shí),濾波失去意義;該值為255,指定直徑內(nèi)的所有點(diǎn)都能夠參與運(yùn)算。

sigmaSpace:坐標(biāo)空間中的sigma值。它的值越大,說(shuō)明有越多的點(diǎn)能夠參與到濾波計(jì)算中來(lái)。當(dāng)d>0時(shí),無(wú)論sigmaSpace的值如何,d都指定鄰域大??;否則,d域sigmaSpace的值成比例。

為了簡(jiǎn)單起見,博主這里將兩個(gè)sigmaColor與sigmaSpace值設(shè)置為相同的。如果它們的值比較小,比如小于10,濾波的效果不太明顯;如果它們的值較大,比如大于150,則濾波效果會(huì)比較明顯。

代碼如下所示:

import cv2

img = cv2.imread("5.jpg")
result = cv2.bilateralFilter(img,25,50,50)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()

運(yùn)行之后,顯示效果如下所示:

雙邊濾波

2D卷積

在OpenCV中,除了提供上面這些常用的濾波方式之外,還允許用戶自定義卷積核實(shí)現(xiàn)卷積操作。這個(gè)函數(shù)是cv2.Filter2D(),其完整定義如下:

def filter2D(src, ddepth, kernel, dst=None, anchor=None, delta=None, borderType=None): 

src:原始圖像

ddepth:處理結(jié)果圖像的深度,-1與原圖像一致。

kernel:卷積核,是一個(gè)單通道數(shù)組。如果想在處理彩色圖像時(shí),讓每個(gè)通道使用不同的核,則必須將彩色圖像分解后使用不同的核完成。

delta:修正值,可選參數(shù)。如果該值存在,會(huì)在基礎(chǔ)濾波的結(jié)果上加上該值作為最終的濾波結(jié)果。

下面,我們來(lái)使用這個(gè)函數(shù)看看效果,具體代碼如下所示:

import cv2
import numpy as np

img = cv2.imread("5.jpg")
kernel = np.ones((9,9), np.float32) / 81
result = cv2.filter2D(img, -1, kernel)
cv2.imshow("img", img)
cv2.imshow("result", result)
cv2.waitKey()
cv2.destroyAllWindows()

運(yùn)行之后,效果如下所示:

2D卷積

到此這篇關(guān)于OpenCV-Python實(shí)現(xiàn)圖像平滑處理操作的文章就介紹到這了,更多相關(guān)OpenCV 圖像平滑處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PyCharm如何導(dǎo)入python項(xiàng)目的方法

    PyCharm如何導(dǎo)入python項(xiàng)目的方法

    這篇文章主要介紹了PyCharm如何導(dǎo)入python項(xiàng)目的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Python3正則表達(dá)式之:(?(id/name)yes-pattern|no-pattern)條件性匹配

    Python3正則表達(dá)式之:(?(id/name)yes-pattern|no-pattern)條件性匹配

    (?(id/name)yes-pattern|no-pattern)的作用是對(duì)于給出的id或者name,先嘗試去匹配 yes-pattern部分的內(nèi)容,如果id或name條件不滿足,則去匹配no-pattern部分的內(nèi)容
    2021-10-10
  • Python實(shí)現(xiàn)清理重復(fù)文件功能的示例代碼

    Python實(shí)現(xiàn)清理重復(fù)文件功能的示例代碼

    在電腦上或多或少的存在一些重復(fù)文件,體積小的倒沒什么,如果體積大的就很占內(nèi)存了。本文用python制作了一個(gè)刪除重復(fù)文件的小工具,核心代碼很簡(jiǎn)單,希望對(duì)你有所幫助
    2022-07-07
  • Keras自定義IOU方式

    Keras自定義IOU方式

    這篇文章主要介紹了Keras自定義IOU方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • vscode 與pycharm 配置 autopep8自動(dòng)格式化代碼

    vscode 與pycharm 配置 autopep8自動(dòng)格式化代碼

    autopep8是一個(gè)可以將Python代碼自動(dòng)排版為PEP8風(fēng)格第三方包,使用它可以輕松地排版出格式優(yōu)美整齊的代碼,這里就為大家分享一下具體的方法
    2023-09-09
  • Python入門篇之函數(shù)

    Python入門篇之函數(shù)

    本篇文章將介紹如何將語(yǔ)句組織成函數(shù),以及參數(shù)概念以及在程序中的用途,需要的朋友可以參考下
    2014-10-10
  • 基于python使MUI登錄頁(yè)面的美化

    基于python使MUI登錄頁(yè)面的美化

    之前的文章Python用HBuilder創(chuàng)建交流社區(qū)APP我們已經(jīng)在HBuilder上創(chuàng)建的APP ,現(xiàn)HBuilder中已經(jīng)有了登錄頁(yè)面的相關(guān)的html文件,但是按照html已有的頁(yè)面來(lái)看,它缺少外觀的美化,本篇文章主要講的是MUI登錄頁(yè)面的美化。,需要的朋友可以參考一下
    2021-11-11
  • python利用tkinter實(shí)現(xiàn)屏保

    python利用tkinter實(shí)現(xiàn)屏保

    這篇文章主要為大家詳細(xì)介紹了python利用tkinter實(shí)現(xiàn)屏保,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 拓?fù)渑判騊ython實(shí)現(xiàn)的過(guò)程

    拓?fù)渑判騊ython實(shí)現(xiàn)的過(guò)程

    這篇文章主要介紹了拓?fù)渑判騊ython實(shí)現(xiàn)的過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 利用機(jī)器學(xué)習(xí)預(yù)測(cè)房?jī)r(jià)

    利用機(jī)器學(xué)習(xí)預(yù)測(cè)房?jī)r(jià)

    這篇文章主要介紹了利用機(jī)器學(xué)習(xí)回歸模型預(yù)測(cè)房?jī)r(jià),解釋清晰,代碼詳細(xì),是很不錯(cuò)的機(jī)器學(xué)習(xí)實(shí)戰(zhàn)演練,對(duì)機(jī)器學(xué)習(xí)感興趣的朋友可以參考一下
    2021-04-04

最新評(píng)論