高斯噪聲,椒鹽噪聲的思想及多種噪聲的實現

圖像噪聲:

概念:

? 圖像噪聲是圖像在獲取或是傳輸過程中受到隨機信號干擾,妨礙人們對圖像理解及分析處理 的信號。
? 很多時候將圖像噪聲看做多維隨機過程,因而描述噪聲的方法完全可以借用隨機過程的描述, 也就是使用隨機過程的描述,也就是用它的高斯分布函數和概率密度分布函數。
? 圖像噪聲的產生來自圖像獲取中的環境條件和傳感元器件自身的質量,圖像在傳輸過程中產 生圖像噪聲的主要因素是所用的傳輸信道受到了噪聲的污染。

信噪比:

在噪聲的概念中,通常采用信噪比(Signal-Noise Rate, SNR)衡量圖像噪聲。
通俗的講就是信號占多少,噪聲占多少,SNR越小,噪聲占比越大。 在信號系統中,計量單位為dB,為10lg(PS/PN), PS和PN分別代表信號和噪聲的有效功率。 在這里,采用信號像素點的占比充當SNR,以衡量所添加噪聲的多少。
舉個例,假設一張圖像的寬x高 = 10x10 ,共計100個像素,想讓其中20個像素點變為噪聲,其余80 個像素點保留原值,則這里定義的SNR=80/100 = 0.8 。

高斯噪聲:

概念:

? 高斯噪聲(Gaussian noise)是指它的概率密度函數服從高斯分布的一類噪聲。
? 特別的,如果一個噪聲,它的幅度分布服從高斯分布,而它的功率譜密度又是均勻分布的,則稱 它為高斯白噪聲。
? 必須區分高斯噪聲和白噪聲兩個不同的概念。高斯噪聲是指噪聲的概率密度函數服從高斯分布, 白噪聲是指噪聲的任意兩個采樣樣本之間不相關,兩者描述的角度不同。白噪聲不必服從高斯分 布,高斯分布的噪聲不一定是白噪聲。

產生原因:

1)圖像傳感器在拍攝時不夠明亮、亮度不夠均勻;
2)電路各元器件自身噪聲和相互影響;
3)圖像傳感器長期工作,溫度過高

實現方法:

一個正常的高斯采樣分布公式G(d), 得到輸出像素
*Pout. Pout = Pin + XMeans + sigma G(d)
其中d為一個線性的隨機數,G(d)是隨機數的高斯分布隨機值。

給一副數字圖像加上高斯噪聲的處理順序如下:
a. 輸入參數sigma 和 X mean
b. 以系統時間為種子產生一個偽隨機數
c. 將偽隨機數帶入G(d)得到高斯隨機數
d. 根據輸入像素計算出輸出像素
e. 重新將像素值放縮在[0 ~ 255]之間 f. 循環所有像素
g. 輸出圖像

手動代碼實現:

#隨機生成符合正態(高斯)分布的隨機數,means,sigma為兩個參數
import numpy as np
import cv2
from numpy import shape 
import random
def GaussianNoise(src,means,sigma,percetage):   #means是均值,percetage是信噪比NoiseImg=srcNoiseNum=int(percetage*src.shape[0]*src.shape[1])for i in range(NoiseNum):#每次取一個隨機點#把一張圖片的像素用行和列表示的話,randX 代表隨機生成的行,randY代表隨機生成的列#random.randint生成隨機整數#高斯噪聲圖片邊緣不處理,故-1randX=random.randint(0,src.shape[0]-1)randY=random.randint(0,src.shape[1]-1)#此處在原有像素灰度值上加上隨機數NoiseImg[randX,randY]=NoiseImg[randX,randY]+random.gauss(means,sigma)#若灰度值小于0則強制為0,若灰度值大于255則強制為255if  NoiseImg[randX, randY]< 0:NoiseImg[randX, randY]=0elif NoiseImg[randX, randY]>255:NoiseImg[randX, randY]=255return NoiseImg
img = cv2.imread('lenna.png',0)
img1 = GaussianNoise(img,2,4,0.5)
img = cv2.imread('lenna.png')
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#cv2.imwrite('lenna_GaussianNoise.png',img1)
cv2.imshow('source',img2)
cv2.imshow('lenna_GaussianNoise',img1)
cv2.waitKey(0)

實現結果展示:

在這里插入圖片描述

椒鹽噪聲

椒鹽噪聲概念:

? 椒鹽噪聲又稱為脈沖噪聲,它是一種隨機出現的白點或者黑點。
? 椒鹽噪聲 = 椒噪聲 (pepper noise)+ 鹽噪聲(salt noise)。 椒鹽噪聲的值為0(椒)或者255(鹽)。
? 前者是低灰度噪聲,后者屬于高灰度噪聲。一般兩種噪聲同時出現,呈現在圖像上就是黑白雜點。
? 對于彩色圖像,也有可能表現為在單個像素BGR三個通道隨機出現的255或0。
? 如果通信時出錯,部分像素的值在傳輸時丟失,就會發生這種噪聲。
? 鹽和胡椒噪聲的成因可能是影像訊號受到突如其來的強烈干擾而產生等。例如失效的感應器導致像 素值為最小值,飽和的感應器導致像素值為最大值。

實現方法:

給一副數字圖像加上椒鹽噪聲的處理順序:
1.指定信噪比 SNR ,其取值范圍在[0, 1]之間
2.計算總像素數目 SP, 得到要加噪的像素數目 NP = SP * (1-SNR)
3.隨機獲取要加噪的每個像素位置P(i, j)
4.指定像素值為255或者0。
5.重復3, 4兩個步驟完成所有NP個像素的加噪

手動代碼實現:

import numpy as np
import cv2  #pip install opencv_python
from numpy import shape
import random
def  fun1(src,percetage):     NoiseImg=src    NoiseNum=int(percetage*src.shape[0]*src.shape[1])    for i in range(NoiseNum):   #返還一個迭代器 #每次取一個隨機點 #把一張圖片的像素用行和列表示的話,randX 代表隨機生成的行,randY代表隨機生成的列#random.randint生成隨機整數#椒鹽噪聲圖片邊緣不處理,故-1randX=random.randint(0,src.shape[0]-1)       randY=random.randint(0,src.shape[1]-1) #random.random生成隨機浮點數,隨意取到一個像素點有一半的可能是白點255,一半的可能是黑點0      if random.random()<=0.5:           NoiseImg[randX,randY]=0       else:            NoiseImg[randX,randY]=255    return NoiseImg#導入圖片
img=cv2.imread('lenna.png',0)#調fun1函數,0.2為參數
img1=fun1(img,0.2)
#在文件夾中寫入命名為lenna_PepperandSalt.png的加噪后的圖片
#cv2.imwrite('lenna_PepperandSalt.png',img1)img = cv2.imread('lenna.png')
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('source',img2)
cv2.imshow('lenna_PepperandSalt',img1)
cv2.waitKey(0)

實現結果展示:

在這里插入圖片描述

其他多種噪聲:

概念:

泊松噪聲:
符合泊松分布的噪聲模型,泊松分布適合于描述單位時間內隨機事件發生的次數的概率分布。 如某一服務設施在一定時間內受到的服務請求的次數,電話交換機接到呼叫的次數、汽車站臺的候客人 數、機器出現的故障數、自然災害發生的次數、DNA序列的變異數、放射性原子核的衰變數等等。
乘性噪聲:
一般由信道不理想引起,它們與信號的關系是相乘,信號在它在,信號不在他也就不在。
瑞利噪聲:
相比高斯噪聲而言,其形狀向右歪斜,這對于擬合某些歪斜直方圖噪聲很有用。瑞利噪聲的 實現可以借由平均噪聲來實現。
伽馬噪聲:
其分布服從了伽馬曲線的分布。伽馬噪聲的實現,需要使用b個服從指數分布的噪聲疊加而 來。指數分布的噪聲,可以使用均勻分布來實現。(b=1時為指數噪聲,b>1時通過若干個指數噪聲疊 加,得到伽馬噪聲)

多種噪聲接口代碼實現:

import cv2 as cv
import numpy as np
from PIL import Image
from skimage import util'''
def random_noise(image, mode='gaussian', seed=None, clip=True, **kwargs):
功能:為浮點型圖片添加各種隨機噪聲
參數:
image:輸入圖片(將會被轉換成浮點型),ndarray型
mode: 可選擇,str型,表示要添加的噪聲類型gaussian:高斯噪聲localvar:高斯分布的加性噪聲,在“圖像”的每個點處具有指定的局部方差。poisson:泊松噪聲salt:鹽噪聲,隨機將像素值變成1pepper:椒噪聲,隨機將像素值變成0或-1,取決于矩陣的值是否帶符號s&p:椒鹽噪聲speckle:均勻噪聲(均值mean方差variance),out=image+n*image
seed: 可選的,int型,如果選擇的話,在生成噪聲前會先設置隨機種子以避免偽隨機
clip: 可選的,bool型,如果是True,在添加均值,泊松以及高斯噪聲后,會將圖片的數據裁剪到合適范圍內。如果誰False,則輸出矩陣的值可能會超出[-1,1]
mean: 可選的,float型,高斯噪聲和均值噪聲中的mean參數,默認值=0
var:  可選的,float型,高斯噪聲和均值噪聲中的方差,默認值=0.01(注:不是標準差)
local_vars:可選的,ndarry型,用于定義每個像素點的局部方差,在localvar中使用
amount: 可選的,float型,是椒鹽噪聲所占比例,默認值=0.05
salt_vs_pepper:可選的,float型,椒鹽噪聲中椒鹽比例,值越大表示鹽噪聲越多,默認值=0.5,即椒鹽等量
--------
返回值:ndarry型,且值在[0,1]或者[-1,1]之間,取決于是否是有符號數
'''img = cv.imread("lenna.png")
noise_gs_img=util.random_noise(img,mode='gaussian') #自由選擇想要的噪聲cv.imshow("source", img)
cv.imshow("lenna",noise_gs_img)
#cv.imwrite('lenna_noise.png',noise_gs_img)
cv.waitKey(0)
cv.destroyAllWindows()

根據mode的不同,可自由實現多種噪聲~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389518.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389518.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389518.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

bzoj1095 [ZJOI2007]Hide 捉迷藏

據說是道很厲害的題。。。。黃學長的安利啊。。。。 然而我卻用它學分治。。。。 一個坑就擺在這里了。。。。 轉載于:https://www.cnblogs.com/LLppdd/p/9124394.html

如何識別媒體偏見_描述性語言理解,以識別文本中的潛在偏見

如何識別媒體偏見TGumGum can do to bring change by utilizing our Natural Language Processing technology to shed light on potential bias that websites may have in their content. The ideas and techniques shared in this blog are a result of the GumGum Hackatho…

分享 : 警惕MySQL運維陷阱:基于MyCat的偽分布式架構

分布式數據庫已經進入了全面快速發展階段。這種發展是與時俱進的&#xff0c;與人的需求分不開&#xff0c;因為現在信息時代的高速發展&#xff0c;導致數據量和交易量越來越大。這種現象首先導致的就是存儲瓶頸&#xff0c;因為MySQL數據庫實質上還是一個單機版本的數據庫&am…

opencv:圖像讀取BGR變成RGB

opencv大坑之BGR opencv對于讀進來的圖片的通道排列是BGR&#xff0c;而不是主流的RGB&#xff01;謹記&#xff01; #opencv讀入的矩陣是BGR&#xff0c;如果想轉為RGB&#xff0c;可以這么轉 img cv2.imread(1.jpg) img cv2.cvtColor(img4,cv2.COLOR_BGR2RGB)

數據不平衡處理_如何處理多類不平衡數據說不可以

數據不平衡處理重點 (Top highlight)One of the common problems in Machine Learning is handling the imbalanced data, in which there is a highly disproportionate in the target classes.機器學習中的常見問題之一是處理不平衡的數據&#xff0c;其中目標類別的比例非常…

最小二乘法以及RANSAC(隨機采樣一致性)思想及實現

線性回歸–最小二乘法&#xff08;Least Square Method&#xff09; 線性回歸&#xff1a; 什么是線性回歸&#xff1f; 舉個例子&#xff0c;某商品的利潤在售價為2元、5元、10元時分別為4元、10元、20元&#xff0c; 我們很容易得出商品的利潤與售價的關系符合直線&#xf…

軟鍵盤彈起,導致底部被頂上去

計算出可視界面的高度&#xff0c;當軟鍵盤彈起時讓底部元素隱藏掉&#xff0c;當鍵盤收起時再讓它顯示&#xff0c;實在沒辦法時這種方法也不失為一種方法1 var hdocument.documentElement.clientHeight; 2 $(window).resize(function(){ 3 let heightdocument.documentEl…

關于LaaS,PaaS,SaaS一些個人的理解

關于LaaS,PaaS,SaaS一些個人的理解 關于LaaS,PaaS,SaaS一些個人的理解 其實如果從整個程序運營的角度來考慮比較好 第一個LaaS 這個也叫做Haas 就是硬件或者基礎設置即服務 比如現在的 aws azure 阿里云 騰訊云 百度云 都是提供服務器基礎設置服務的 包括服務器的硬件…

糖藥病數據集分類_使用optuna和mlflow進行心臟病分類器調整

糖藥病數據集分類背景 (Background) Data science should be an enjoyable process focused on delivering insights and real benefits. However, that enjoyment can sometimes get lost in tools and processes. Nowadays it is important for an applied data scientist to…

Android MVP 框架

為什么80%的碼農都做不了架構師&#xff1f;>>> 前言 根據網絡上的MVP套路寫了一個辣雞MVP DEMO 用到的 android studio MVPHelper插件,方便自動生成框架代碼rxjavaretrofit什么是MVP MVP就是英文的Model View Presenter&#xff0c;然而實際分包并不是只有這三個包…

相似圖像搜索的哈希算法思想及實現(差值哈希算法和均值哈希算法)

圖像相似度比較哈希算法: 什么是哈希&#xff08;Hash&#xff09;&#xff1f; ? 散列函數&#xff08;或散列算法&#xff0c;又稱哈希函數&#xff0c;英語&#xff1a;Hash Function&#xff09;是一種從任何一種數據中創建小 的數字“指紋”的方法。散列函數把消息或數…

騰訊云AI應用產品總監王磊:AI 在傳統產業的最佳實踐

歡迎大家前往騰訊云社區&#xff0c;獲取更多騰訊海量技術實踐干貨哦~ 背景&#xff1a;5月23-24日&#xff0c;以“煥啟”為主題的騰訊“云未來”峰會在廣州召開&#xff0c;廣東省各級政府機構領導、海內外業內學術專家、行業大咖及技術大牛等在現場共議云計算與數字化產業創…

標準化(Normalization)和歸一化實現

概念&#xff1a; 原因&#xff1a; 由于進行分類器或模型的建立與訓練時&#xff0c;輸入的數據范圍可能比較大&#xff0c;同時樣本中各數據可 能量綱不一致&#xff0c;這樣的數據容易對模型訓練或分類器的構建結果產生影響&#xff0c;因此需要對其進行標準 化處理&#x…

Toast源碼深度分析

目錄介紹 1.最簡單的創建方法 1.1 Toast構造方法1.2 最簡單的創建1.3 簡單改造避免重復創建1.4 為何會出現內存泄漏1.5 吐司是系統級別的 2.源碼分析 2.1 Toast(Context context)構造方法源碼分析2.2 show()方法源碼分析2.3 mParams.token windowToken是干什么用的2.4 schedul…

序列化框架MJExtension詳解 + iOS ORM框架

當開發中你的模型中屬性名稱和 字典(JSON/XML) 中的key 不能一一對應時, 或者當字典中嵌套了多層字典數組時..., 以及教你如何用 MJExtension 配置類來統一管理你的模型配置, 下面羅列了開發中常見的一些特殊情況, 請參考!(MJExtension/github) 最基本用法: // 將字典轉為模型 …

運行keras出現 FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecated解決辦法

運行keras出現 FutureWarning: Passing (type, 1) or ‘1type’ as a synonym of type is deprecated; in a future version of numpy, 原則來說&#xff0c;沒啥影響&#xff0c;還是能運行&#xff0c;但是看著難受 解決辦法&#xff1a; 點擊藍色的鏈接&#xff1a; 進入 …

RedirectToAction()轉移方式及參數傳遞

今天在做一個功能的時&#xff0c;使用RedirectToAction()需要從這里傳幾個參數&#xff0c;從網上查了一下&#xff0c;這樣解決。真好。 Return RedirectToAction("Index","ManageInfo",new{type0,page1});轉載于:https://www.cnblogs.com/ZaraNet/p/978…

軟件項目風險管理

近幾年來軟件開發技術、工具都有了很大的進步&#xff0c;但是軟件項目開發超時、超支、甚至不能滿足用戶需求而根本沒有得到實際使用的情況仍然比比皆是。軟件項目開發和管理中一直存在著種種不確定性&#xff0c;嚴重影響著項目的順利完成和提交。但這些軟件風險并未得到充分…

mongdb 群集_群集文檔的文本摘要

mongdb 群集This is a part 2 of the series analyzing healthcare chart notes using Natural Language Processing (NLP)這是使用自然語言處理(NLP)分析醫療保健圖表筆記的系列文章的第2部分。 In the first part, we talked about cleaning the text and extracting sectio…

keras框架實現手寫數字識別

詳細細節可學習從零開始神經網絡&#xff1a;keras框架實現數字圖像識別詳解&#xff01; 代碼實現&#xff1a; [1]將訓練數據和檢測數據加載到內存中(第一次運行需要下載數據&#xff0c;會比較慢): &#xff08;mnist是手寫數據集&#xff09; train_images是用于訓練系統…