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

OpenCV學(xué)習(xí)之圖像加噪與濾波的實(shí)現(xiàn)詳解

 更新時(shí)間:2023年02月16日 08:54:45   作者:是Dream呀  
這篇文章主要為大家詳細(xì)介紹了OpenCV中圖像的加噪與濾波操作的相關(guān)資料,文中的示例代碼簡潔易懂,具有一定的借鑒價(jià)值,需要的可以參考一下

一、實(shí)驗(yàn)內(nèi)容

編寫一Python程序,要求實(shí)現(xiàn)以下功能:

  • 讀入一幅圖像。
  • 使用兩種以上的方法分別向圖像中添加噪聲。
  • 輸出一幅二值圖像,圖像中未加入噪聲的區(qū)域?yàn)楹谏尤朐肼暤膮^(qū)域?yàn)榘咨?/li>
  • 使用三種濾波方法對(duì)上述添加了噪聲的圖像進(jìn)行濾波處理。
  • 輸出濾波處理后的圖像。

撰寫實(shí)驗(yàn)報(bào)告,將上述處理的原理與處理流程進(jìn)行介紹;并添加原圖、加入噪聲的圖像、描述噪聲位置的二值圖像以及三種濾波方法處理后的圖像;最終對(duì)處理結(jié)果進(jìn)行分析,并附加程序。

二、實(shí)驗(yàn)環(huán)境和配置

解釋器:Python3.9、開發(fā)環(huán)境:PyCharm

三、實(shí)驗(yàn)原理及操作

實(shí)驗(yàn)中我們使用opencv中imread讀入圖片,imwrite保存圖片。

1. 添加噪聲

在本次實(shí)驗(yàn)中使用到的兩種噪聲分別為椒鹽噪聲及白噪聲。

椒鹽噪聲是將圖片中一定比例的像素點(diǎn)隨機(jī)置為0或255,使圖片上隨機(jī)分布黑色和白色的噪聲點(diǎn)。 實(shí)驗(yàn)中,我們建立一閾值參數(shù)per(添加噪聲的比例),隨機(jī)生成與輸入圖片相同尺寸的0到1的隨機(jī)數(shù)矩陣,記錄隨機(jī)數(shù)矩陣中小于per/2和處于per/2與per之間的元素位置。將原圖像中與矩陣小于per/2對(duì)應(yīng)位置相同的像素置為255,處于per/2與per之間的置為0,這就完成為圖像添加椒鹽噪聲。

白噪聲與椒鹽噪聲類似,不同的是椒鹽噪聲可能添加黑色或白色的噪聲點(diǎn),而白噪聲只會(huì)添加白色噪聲點(diǎn)。實(shí)驗(yàn)中,我們同樣建立一閾值比例參數(shù)per,與輸入圖片尺寸相同的0到1的隨機(jī)矩陣,將矩陣中小于per的元素對(duì)應(yīng)位置的原圖像素點(diǎn)置為255,這就完成了對(duì)圖像添加白噪聲。

2.噪聲二值化

實(shí)驗(yàn)中將我們將原圖與添加噪聲后的圖片進(jìn)行減法操作,未添加噪聲點(diǎn)的部分即為原始像素與原始像素相減,得到的值為0(黑色)。添加噪聲點(diǎn)的部分為噪聲點(diǎn)與原始圖像相減,無規(guī)律的某一特殊值。之后將非0點(diǎn)認(rèn)定為噪聲點(diǎn)所在位置,使用二值化操作將非0點(diǎn)置為255(白色),0點(diǎn)仍保持為0(黑色),這就實(shí)現(xiàn)了輸出標(biāo)志位置信息的二值圖像。

3. 濾波處理

實(shí)驗(yàn)中使用均值濾波、中值濾波、高斯濾波對(duì)添加噪聲后的圖像進(jìn)行處理。

均值濾波是將濾波器中心的像素點(diǎn)替換為處于濾波器中全部像素點(diǎn)的均值,使用opencv中blur實(shí)現(xiàn);中值濾波是將濾波器中心的像素點(diǎn)替換為處于濾波器中全部像素點(diǎn)的中值,使用opencv中medianBlur實(shí)現(xiàn);高斯濾波的濾波器參數(shù)與離中心像素的距離有關(guān),其參數(shù)符合高斯分布,使用opencv中GaussianBlur實(shí)現(xiàn)。使用濾波器在原圖像進(jìn)行掃描,以實(shí)現(xiàn)降噪等目的。

四、實(shí)驗(yàn)結(jié)果

1.原圖、添加椒鹽噪聲、添加白噪聲對(duì)比

圖1 原圖(上)、添加椒鹽噪聲(中)、添加白噪聲(下)對(duì)比圖

2.椒鹽噪聲二值圖與白噪聲二值圖

椒鹽噪聲二值圖(per=0.02)與白噪聲二值圖(per=0.05)

3.椒鹽噪聲處理圖經(jīng)處理后圖像

椒鹽噪聲處理圖經(jīng)均值濾波(上)、中值濾波(中)、高斯濾波(下)后圖像:

4.白噪聲處理圖經(jīng)處理后圖像

白噪聲處理圖經(jīng)均值濾波(上)、中值濾波(中)、高斯濾波(下)后圖像

五、結(jié)果分析

由圖1可知,對(duì)原圖像添加噪聲后,添加椒鹽噪聲的圖像上呈現(xiàn)出不規(guī)律的黑白像素點(diǎn),添加白噪聲的圖像上呈現(xiàn)出不規(guī)律的白色像素點(diǎn),說明添加噪聲成功。

從運(yùn)行結(jié)果可以得出低通濾波操作可對(duì)圖像進(jìn)行降噪處理。其中中值濾波對(duì)椒鹽噪聲和白噪聲降噪效果顯著,原因是椒鹽噪聲點(diǎn)和白噪聲點(diǎn)與周圍像素點(diǎn)差異較大,當(dāng)有中值濾波器經(jīng)過時(shí)會(huì)將偏差值較大的點(diǎn)(黑噪聲和白噪聲)置為濾波器中的中值,這就過濾了這些差異較大的點(diǎn),實(shí)現(xiàn)了圖像降噪。椒鹽噪聲點(diǎn)和白噪聲點(diǎn)經(jīng)均值濾波與高斯濾波后噪聲點(diǎn)顏色變淡、面積變大,是因?yàn)檫@兩種濾波相當(dāng)于對(duì)處于濾波器中的像素值進(jìn)行加權(quán)求和,當(dāng)噪聲點(diǎn)被濾波器處理時(shí),與周圍像素加權(quán)求和,噪聲顏色變淺;當(dāng)處理的像素點(diǎn)周圍有噪聲時(shí),與噪聲點(diǎn)加權(quán)求和,該像素點(diǎn)被“污染”,噪聲點(diǎn)變大。

六、實(shí)驗(yàn)源碼

# @Time : 2022/10/10 16:29
# @Author : 是Dream呀
# @File : 圖像加噪與濾波.py
import cv2 as cv
import numpy as np

img = cv.imread('photo.jpg')
cv.imshow('test',img)
cv.waitKey(0)
cv.destroyAllWindows()

#  定義sp_Noise()來作為椒鹽噪聲
def sp_Noise(image, per):
    img = image.copy()
    threshold = per/2
    w,h = img.shape[0], img.shape[1]
    rand = np.random.random([w,h])
    #  標(biāo)注噪聲區(qū)域的二值圖像,背景為黑色,噪聲區(qū)域?yàn)榘咨?
    noise = np.zeros(img.shape)
    noise[rand<per] = 1
    img[rand<threshold] = 0
    img[(rand<per) & (rand>=threshold)] = 255
    return noise*255,img

#  定義white_Noise()來作為白噪聲
def white_Noise(image, per):
    img = image.copy()
    w,h = img.shape[0], img.shape[1]
    rand = np.random.random([w,h])
    #  標(biāo)注噪聲區(qū)域的二值圖像,背景為黑色,噪聲區(qū)域?yàn)榘咨?
    noise = np.zeros(img.shape)
    noise[rand < per] = 1
    img[rand < per] = 255
    return noise*255, img

white_noise, white_img = white_Noise(img, 0.05)
sp_noise, sp_img = sp_Noise(img, 0.02)

#  使用圖像減法與二值化處理獲取噪聲點(diǎn)
sp_noise1 = np.float32(sp_img) - np.float32(img)
sp_noise1 = np.where(sp_noise1 == 0, 0, 255)
sp_noise1 = np.uint8(sp_noise1)

white_noise1 = np.float32(white_img) - np.float32(img)
white_noise1 = np.where(white_noise1 == 0, 0, 255)
white_noise1 = np.uint8(white_noise1)
cv.imshow('white_noise1',white_noise1)
cv.imshow('sp_noise1',sp_noise1)
cv.waitKey(0)
cv.destroyAllWindows()

cv.imshow('img',img)
cv.imshow('white_img',white_img)
cv.imshow('sp_img',sp_img)
#  cv.imshow('white_noise',white_noise)
#  cv.imshow('sp_noise',sp_noise)
cv.waitKey(0)
cv.destroyAllWindows()

img_sp_blur = cv.blur(sp_img,(3,3))
img_white_blur = cv.blur(white_img,(3,3))
cv.imshow('img',img)
cv.imshow('white_img',white_img)
cv.imshow('sp_img',sp_img)
cv.imshow('img_sp_blur',img_sp_blur)
cv.imshow('img_white_blur',img_white_blur)
cv.waitKey(0)
cv.destroyAllWindows()


img_sp_med = cv.medianBlur(sp_img, 3)
img_white_med = cv.medianBlur(white_img, 3)
cv.imshow('img',img)
cv.imshow('white_img',white_img)
cv.imshow('sp_img',sp_img)
cv.imshow('img_sp_med',img_sp_med)
cv.imshow('img_white_med',img_white_med)
cv.waitKey(0)
cv.destroyAllWindows()

img_sp_gs = cv.GaussianBlur(sp_img,(5,5),1)
img_white_gs = cv.GaussianBlur(white_img,(5,5),1)
cv.imshow('img',img)
cv.imshow('white_img',white_img)
cv.imshow('sp_img',sp_img)
cv.imshow('img_sp_gs',img_sp_gs)
cv.imshow('img_white_gs',img_white_gs)
cv.waitKey(0)
cv.destroyAllWindows()

cv.imwrite('white_noise1.jpg',white_noise1)
cv.imwrite('sp_noise1.jpg',sp_noise1)
cv.imwrite('white_img.jpg',white_img)
cv.imwrite('sp_img.jpg',sp_img)

cv.imwrite('img_sp_blur.jpg',img_sp_blur)
cv.imwrite('img_white_blur.jpg',img_white_blur)
cv.imwrite('img_sp_med.jpg',img_sp_med)
cv.imwrite('img_white_med.jpg',img_white_med)
cv.imwrite('img_sp_gs.jpg',img_sp_gs)
cv.imwrite('img_white_gs.jpg',img_white_gs)

dx = cv.Sobel(sp_img,-1,1,0,3)
dy = cv.Sobel(sp_img,-1,0,1,3)
d = cv.addWeighted(dx,0.5,dy,0.5,0)
d = cv.convertScaleAbs(d)
cv.imshow('img_gs_med',d)
cv.waitKey(0)
cv.destroyAllWindows()

以上就是OpenCV學(xué)習(xí)之圖像加噪與濾波的實(shí)現(xiàn)詳解的詳細(xì)內(nèi)容,更多關(guān)于OpenCV圖像加噪濾波的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 多進(jìn)程和數(shù)據(jù)傳遞的理解

    Python 多進(jìn)程和數(shù)據(jù)傳遞的理解

    這篇文章主要介紹了Python 多進(jìn)程和數(shù)據(jù)傳遞的理解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • PyCharm使用Docker鏡像搭建Python開發(fā)環(huán)境

    PyCharm使用Docker鏡像搭建Python開發(fā)環(huán)境

    這篇文章主要介紹了PyCharm使用Docker鏡像搭建Python開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • JavaScript中的模擬事件和自定義事件實(shí)例分析

    JavaScript中的模擬事件和自定義事件實(shí)例分析

    這篇文章主要介紹了JavaScript中的模擬事件和自定義事件,結(jié)合實(shí)例形式分析了JavaScript模擬事件和自定義事件相關(guān)操作步驟、實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • Python實(shí)現(xiàn)查找數(shù)據(jù)庫最接近的數(shù)據(jù)

    Python實(shí)現(xiàn)查找數(shù)據(jù)庫最接近的數(shù)據(jù)

    這篇文章主要介紹了Python實(shí)現(xiàn)查找數(shù)據(jù)庫最接近的數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python 實(shí)現(xiàn)RSA加解密文本文件

    Python 實(shí)現(xiàn)RSA加解密文本文件

    這篇文章主要介紹了Python 實(shí)現(xiàn)RSA加解密文本文件的方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 關(guān)于numpy數(shù)組軸的使用詳解

    關(guān)于numpy數(shù)組軸的使用詳解

    今天小編就為大家分享一篇關(guān)于numpy數(shù)組軸的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Django中使用Celery的方法步驟

    Django中使用Celery的方法步驟

    這篇文章主要介紹了Django中使用Celery,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 50行Python代碼獲取高考志愿信息的實(shí)現(xiàn)方法

    50行Python代碼獲取高考志愿信息的實(shí)現(xiàn)方法

    這篇文章主要介紹了50行Python代碼獲取高考志愿信息的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python三元運(yùn)算與lambda表達(dá)式實(shí)例解析

    Python三元運(yùn)算與lambda表達(dá)式實(shí)例解析

    這篇文章主要介紹了Python三元運(yùn)算與lambda表達(dá)式實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 超簡單的scrapy實(shí)現(xiàn)ip動(dòng)態(tài)代理與更換ip的方法實(shí)現(xiàn)

    超簡單的scrapy實(shí)現(xiàn)ip動(dòng)態(tài)代理與更換ip的方法實(shí)現(xiàn)

    這篇文章主要介紹了超簡單的scrapy實(shí)現(xiàn)ip動(dòng)態(tài)代理與更換ip的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論