图像降噪算法——图像噪声模型
圖像降噪算法——圖像噪聲模型
- 圖像降噪算法——圖像噪聲模型
- 1. 圖像噪聲建模
- 2. C++代碼實現(xiàn)
- 3. 結(jié)論
圖像降噪算法——圖像噪聲模型
1. 圖像噪聲建模
首先,我們要區(qū)分圖像傳感器噪聲和圖像噪聲,圖像傳感器噪聲我在博客圖像傳感器與信號處理——詳解圖像傳感器噪聲中有過總結(jié),圖像傳感器噪聲會造成各種各樣的圖像噪聲。
其次,我們需要了解圖像降噪模型,圖像降噪模型可以建模為:y=x+ny=x+ny=x+n其中,yyy是觀察到的噪聲圖像,xxx是圖像真值,nnn是圖像噪聲,圖像降噪過程就是通過yyy獲取xxx,在許多論文中將這個過程描述為不可逆過程,這也就是為什么圖像降噪難。本博客就是對圖像噪聲nnn進行建模:
《數(shù)字圖像處理》一書中對噪聲建模主要有一下幾種類型:
(1)高斯噪聲
高斯噪聲是最常見也是最重要的的一種噪聲,眾多的圖像降噪算法都是以降低高斯噪聲為目標設(shè)計的,其概率密度函數(shù)如下所示:p(z)=12πσ2e?(z?μ)2/2σ2p(z)=\frac{1}{\sqrt{2 \pi \sigma^{2}}} e^{-(z-\mu)^{2}} /_{2 \sigma^{2}}p(z)=2πσ2?1?e?(z?μ)2/2σ2?其中,σ\sigmaσ是標準偏差,μ\muμ是灰度值的平均值,這個公式說明的是灰度值為zzz的概率為多少。
(2)瑞利噪聲
瑞麗噪聲的概率密度函數(shù)如下所示:p(z)={2b(z?a)e?(z?a)2/b,z?a0,z<ap(z)=\left\{\begin{array}{ll} \frac{2}(z-a) \mathrm{e}^{-(z-a)^{2} / b}, & z \geqslant a \\ 0, & z<a \end{array}\right.p(z)={b2?(z?a)e?(z?a)2/b,0,?z?az<a?概率密度的均值和方法分別為:zˉ=a+πb/4\bar{z}=a+\sqrt{\pi b / 4}zˉ=a+πb/4?σ2=b(4?π)4\sigma^{2}=\frac{b(4-\pi)}{4}σ2=4b(4?π)?瑞利噪聲對于圖像直方圖近似傾斜的圖像中的噪聲建模較為有效。
(3)伽馬噪聲
伽馬噪聲的概率密度函數(shù)如下所示:p(z)={abzb?1(b?1)!e?az,z?a0,z<ap(z)=\left\{\begin{array}{cl} \frac{a^ z^{b-1}}{(b-1) !} \mathrm{e}^{-a z}, & z \geqslant a \\ 0, & z<a \end{array}\right.p(z)={(b?1)!abzb?1?e?az,0,?z?az<a?其中均值和方差分別為zˉ=ba\bar{z}=\frac{a}zˉ=ab?σ2=ba2\sigma^{2}=\frac{a^{2}}σ2=a2b?伽馬噪聲相對瑞利噪聲分布會更加傾斜
(4)指數(shù)噪聲
指數(shù)噪聲的概率密度函數(shù)如下所示:p(z)={ae?az,z?00,z<0p(z)=\left\{\begin{array}{ll} a \mathrm{e}^{-a z}, & z \geqslant 0 \\ 0, & z<0 \end{array}\right.p(z)={ae?az,0,?z?0z<0?其概率密度函數(shù)的均值和方差分別為zˉ=1a\bar{z}=\frac{1}{a}zˉ=a1?σ2=1a2\sigma^{2}=\frac{1}{a^{2}}σ2=a21?指數(shù)噪聲分布相對伽馬噪聲又會進一步傾斜
(5)量化噪聲
量化噪聲又稱均勻噪聲,此類噪聲是由于將模擬數(shù)據(jù)轉(zhuǎn)換為數(shù)字數(shù)據(jù)而引起的,因此是幅度量化過程中固有的,其概率密度函數(shù)如下:p(z)={1b?a,a?z?b0otherwisep(z)=\left\{\begin{array}{ll} \frac{1}{b-a}, & a \leqslant z \leqslant b \\ 0 & otherwise \end{array}\right.p(z)={b?a1?,0?a?z?botherwise?
(6)椒鹽噪聲
椒鹽噪聲又稱脈沖噪聲、尖峰噪聲,在圖像上表現(xiàn)為隨機分布的黑白點,其概率密度函數(shù)如下圖所示:
p(z)={Pa,z=aPb,z=b1?Pa?Pb,otherwisep(z)=\left\{\begin{array}{ll} P_{a}, & z=a \\ P_, & z=b \\ 1-P_{a}-P_, & otherwise \end{array}\right.p(z)=????Pa?,Pb?,1?Pa??Pb?,?z=az=botherwise?椒鹽噪聲可以通過中值濾波器進行消除。
以上即《數(shù)字圖像處理》中對各個圖像噪聲的建模,對于的概率密度函數(shù)的不同,書中給出了這樣一張圖予以區(qū)分:
那么除了《數(shù)字圖像處理》中提到的幾種圖像噪聲模型外,一般還有如下幾種模型:
(7)泊松噪聲
泊松噪聲又稱散粒噪聲,我們知道,光源每秒發(fā)射的光子到達CMOS的越多,則該像素的灰度值越大。但是因為光源發(fā)射和CMOS接收之間都有可能存在一些因素導(dǎo)致某個光子并沒有被CMOS接收到或者某個像素一時間段內(nèi)發(fā)射的光子特別多,所以這就導(dǎo)致了灰度值的波動,也就產(chǎn)生了泊松噪聲,方程描述為:p[(N(t+τ)?N(t))=k]=e?λτ(λτ)kk!k=0,1,…p[(N(t+\tau)-N(t))=k]=\frac{e^{-\lambda \tau}(\lambda \tau)^{k}}{k !} \quad k=0,1, \dotsp[(N(t+τ)?N(t))=k]=k!e?λτ(λτ)k?k=0,1,…這個公式說明的是某個像素在間隔時間τ\tauτ內(nèi)接收到kkk個光子的概率為多少。
(8)斑點噪聲
在相干成像系統(tǒng)(如雷達,激光和聲學等)中可以看到斑點噪聲的出現(xiàn),其概率密度函數(shù)如下:p(z)=za?1e?z/aa?1!aap(z)=\frac{z^{a-1} e^{-z / a}}{a-1 ! a^{a}}p(z)=a?1!aaza?1e?z/a?斑點噪聲在光學成像系統(tǒng)中很少出現(xiàn),因此這里不作贅述。
(6)周期性噪聲
周期性噪聲無法用概率密度函數(shù)進行描述,也無法在空間域中進行消除,通常的方法是通過頻域中的帶阻濾波器進行消除,如下圖所示,從左至右,第一幅圖原始圖像,第二幅圖為頻域圖像,第三幅圖為帶阻濾波器,第四幅圖為濾波后的圖像。
2. C++代碼實現(xiàn)
下面分別是生成椒鹽噪聲和高斯噪聲的函數(shù):
at Noise::CreateSaltNoise(const Mat &src, int n) {Mat dst = src.clone();for(int k = 0; k<n; k++){int i = rand() % dst.rows;int j = rand() % dst.cols;if(dst.channels() == 1){dst.at<uchar>(i,j) = 255;}else{dst.at<Vec3b>(i,j)[0] = 255;dst.at<Vec3b>(i,j)[1] = 255;dst.at<Vec3b>(i,j)[2] = 255;}}for(int k = 0; k<n; k++){int i = rand() % dst.rows;int j = rand() % dst.cols;if(dst.channels() == 1){dst.at<uchar>(i,j) = 0;}else{dst.at<Vec3b>(i,j)[0] = 0;dst.at<Vec3b>(i,j)[1] = 0;dst.at<Vec3b>(i,j)[2] = 0;}}return dst; }Mat Noise::CreateGaussianNoise(const Mat &src, double mu, double sigma) {Mat dst = src.clone();int row = dst.rows;int col = dst.cols;for(int i = 0; i<row; i++){for(int j = 0; j<col; j++){if(dst.channels() == 1){//構(gòu)建高斯噪聲double u1, u2;do{u1 = rand() * (1.0 / RAND_MAX);u2 = rand() * (1.0 / RAND_MAX);} while (u1 <= numeric_limits<double>::min());//u1不能為0double z = sigma * sqrt(-2.0 * log(u1)) * cos(2 * CV_PI * u2) + mu;//double z = sigma * sqrt(-2.0 * log(u1)) * sin(2 * CV_PI * u2) + mu;int val = dst.at<uchar>(i,j) + z * 32;val = (val<0)?0:val;val = (val>255)?255:val;dst.at<uchar>(i,j) = (uchar)val;}else{for(int k = 0; k<dst.channels(); k++){//構(gòu)建高斯噪聲double u1, u2;do{u1 = rand() * (1.0 / RAND_MAX);u2 = rand() * (1.0 / RAND_MAX);} while (u1 <= numeric_limits<double>::min());//u1不能為0double z = sigma * sqrt(-2.0 * log(u1)) * cos(2 * CV_PI * u2) + mu;//double z = sigma * sqrt(-2.0 * log(u1)) * sin(2 * CV_PI * u2) + mu;int val = dst.at<Vec3b>(i,j)[k] + z * 32;int test = dst.at<Vec3b>(i,j)[k];val = (val<0)?0:val;val = (val>255)?255:val;dst.at<Vec3b>(i,j)[k] = (uchar)val;}}}}return dst; }下面是運行結(jié)果:
首先,下面是原圖:
加上高斯噪聲后的結(jié)果
加上椒鹽噪聲后的結(jié)果:
3. 結(jié)論
那這一小節(jié)就總結(jié)到這兒啦,有問題歡迎交流~
此外,這里我寫一個各種算法的總結(jié)目錄圖像降噪算法——圖像降噪算法總結(jié),對圖像降噪算法感興趣的同學歡迎參考
總結(jié)
以上是生活随笔為你收集整理的图像降噪算法——图像噪声模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图像传感器与信号处理——SFR算法/IS
- 下一篇: 图像降噪算法——中值滤波/均值滤波/高斯