<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OpenCV圖像降噪算法的中值濾波與高斯濾波詳解

OpenCV學堂 ? 來源:OpenCV學堂 ? 2024-04-03 14:58 ? 次閱讀

1. 圖像噪聲

圖像降噪(Image Denoising)是指從圖像中去除噪聲的過程,目的是提高圖像質量,增強圖像的視覺效果。

圖像噪聲是指圖像中不希望出現的隨機亮度或顏色變化,通常會降低圖像的清晰度和可辨識度,以及會降低圖像的質量并使圖像分析和理解更加困難。

圖像噪聲主要有以下幾個原因來產生的:

光線不足:光線不足會導致光子噪聲增加,從而降低圖像的信噪比。

電子元器件的熱噪聲電子元器件在工作時會產生熱噪聲,這種噪聲會影響圖像的質量。

電路噪聲:電路中的電磁干擾也會導致圖像噪聲的產生。

圖像傳輸過程中的錯誤:圖像在傳輸過程中可能會受到各種干擾,從而導致圖像噪聲的產生。

根據噪聲的統計特性來分類,可以將圖像噪聲分為以下幾類:

椒鹽噪聲:圖像中隨機出現黑白像素的噪聲。

高斯噪聲:最常見的噪聲類型,其概率密度函數服從高斯分布。

泊松噪聲:光子噪聲的一種類型,其概率密度函數服從泊松分布。

斑點噪聲:由圖像傳感器壞點或污點引起的噪聲。

下面的例子,分別展示了在圖像中添加椒鹽噪聲、高斯噪聲、泊松噪聲和斑點噪聲。

#include
#include
#include
#include

usingnamespacestd;
usingnamespacecv;

voidaddSaltNoise(Mat&src,intnum,Mat&dst)
{
dst=src.clone();

//隨機數產生器
std::random_devicerd;//種子
std::mt19937gen(rd());//隨機數引擎

autorows=src.rows;//行數
autocols=src.cols*src.channels();

for(inti=0;i(gen()%rows);
autocol=static_cast(gen()%cols);

autop=dst.ptr(row);
p[col++]=255;
p[col++]=255;
p[col]=255;
}
}

voidaddGaussianNoise(Mat&src,intmu,intsigma,Mat&dst)
{
dst=src.clone();

//產生高斯分布的隨機數發生器
std::random_devicerd;
std::mt19937gen(rd());

std::normal_distribution<>d(mu,sigma);

autorows=src.rows;//行數
autocols=src.cols*src.channels();//列數

for(inti=0;i(i);//取得行首指針
for(intj=0;j255?255:tmp;
tmp=tmpPixel;

voidaddPoissonNoise(constMat&src,doublelambda,Mat&dst){
dst=src.clone();

//產生泊松分布的隨機數生成器
std::random_devicerd;
std::mt19937gen(rd());
std::poisson_distributiondistribution(lambda);

dst.forEach([&](Pixel&p,constint*position)->void{
introw=position[0];
intcol=position[1];

intcount=distribution(gen);
dst.at(row,col)=dst.at(row,col)+Vec3b(count,count,count);
});
}

voidaddSpeckleNoise(Mat&image,doublescale,Mat&dst){
dst=image.clone();
RNGrng;

dst.forEach([&](Pixel&p,constint*position)->void{
introw=position[0];
intcol=position[1];

doublerandom_value=rng.uniform(0.0,1.0);
doublenoise_intensity=random_value*scale;
dst.at(row,col)=dst.at(row,col)+Vec3b(noise_intensity*255,noise_intensity*255,noise_intensity*255);
});
}

intmain(){
Matsrc=imread(".../girl.jpg");

imshow("src",src);

Matdst1;
addSaltNoise(src,100000,dst1);
imshow("addSaltNoise",dst1);

Matdst2;
addGaussianNoise(src,0,50,dst2);
imshow("addGaussianNoise",dst2);

Matdst3;
addPoissonNoise(src,60,dst3);
imshow("addPoissonNoise",dst3);

Matdst4;
addSpeckleNoise(src,0.5,dst4);
imshow("addSpeckleNoise",dst4);

waitKey(0);
return0;
}

2. 圖像降噪方法

傳統的圖像處理是基于濾波器的方式進行降噪,比如使用空域濾波、頻域濾波、非局部均值濾波等等,還有使用形態學降噪,當然也可以深度學習的方式進行降噪。

本文介紹兩種空域濾波的方式進行降噪。

2.1 中值濾波

中值濾波是一種非線性濾波器,它通過對圖像中的像素值進行排序并取中間值來進行濾波處理。

70432518-f105-11ee-a297-92fbcf53809c.jpg

中值濾波.png

中值濾波的特性:

對于圖像中的每個像素,選取其周圍一定區域內的所有像素值,并對其進行排序。

將排序后的像素值的中位數賦予該像素。

中值濾波的優點:

能夠有效去除椒鹽噪聲和脈沖噪聲,對圖像中的孤立噪聲點具有較強的抑制能力。

能夠較好地保留圖像的邊緣和細節信息,不會造成圖像模糊。

中值濾波的缺點:

對高斯噪聲的去除效果不佳。

計算量相對較大,特別是對于大尺寸圖像而言。

2.2 高斯濾波

高斯濾波是一種線性平滑濾波器,它利用高斯函數對圖像進行加權平均,可以有效地去除高斯噪聲,同時平滑圖像。

高斯濾波的優點:

高斯濾波具有良好的平滑效果,能夠有效地抑制圖像中的噪聲。

高斯濾波是一種線性濾波器,具有可分離性,可以提高計算效率。

高斯濾波在頻域上具有低通濾波器的特性,能夠去除圖像中的高頻噪聲。

高斯濾波的缺點:

高斯濾波會造成圖像細節丟失,降低圖像銳度。

高斯濾波對椒鹽噪聲等非平滑噪聲的去除效果不佳。

高斯濾波以使用兩種方法實現:一種是離散化窗口滑窗卷積,另一種方法是通過傅里葉變化。最常見的就是滑窗卷積實現。

先來回顧一下一維高斯函數:

705908c4-f105-11ee-a297-92fbcf53809c.jpg

一維高斯函數.png

其中,是 x 的均值,是 x 的方差。x 是卷積核內任意一點的坐標,是卷積核中心的坐標。當 = 0 時,

由于圖像是二維的,二維的高斯函數則是對 x、y 兩個方向的一維高斯函數的乘積:

當時,就是我們比較熟悉的二維高斯函數公式:

7073b8d6-f105-11ee-a297-92fbcf53809c.jpg

二維高斯函數.png

常用的高斯模板有如下幾種形式,它們是基于高斯函數計算出來的。

7084bce4-f105-11ee-a297-92fbcf53809c.jpg

高斯模版.png

高斯濾波具有以下性質:

線性: 高斯濾波器是線性的,這意味著它可以與其他濾波器組合使用。例如,可以先使用高斯濾波器去除噪聲,然后再使用邊緣檢測濾波器檢測邊緣。

可分離性: 高斯濾波器可以分離為兩個一維濾波器,即水平方向和垂直方向的濾波器。這使得高斯濾波器的計算效率更高。

傅里葉變換: 高斯濾波器的傅里葉變換是一個低通濾波器,這意味著它可以抑制圖像中的高頻成分,而保留低頻成分。

旋轉不變性: 高斯濾波器在各個方向上具有相同的平滑效果,這意味著它不會改變圖像的旋轉方向。

尺度不變性: 高斯濾波器的尺度可以通過調整高斯函數的標準差來控制。標準差越大,濾波器的平滑效果越強。

下面的例子,分別使用中值濾波和高斯濾波消除椒鹽噪聲和高斯噪聲。

intmain(){
Matsrc=imread(".../girl.jpg");

imshow("src",src);

Matresult;

Matdst1;
addSaltNoise(src,100000,dst1);
imshow("addSaltNoise",dst1);

inta=7;
medianBlur(dst1,result,a);
imshow("removeSaltNoise",result);

Matdst2;
addGaussianNoise(src,0,50,dst2);
imshow("addGaussianNoise",dst2);

GaussianBlur(dst2,result,Size(15,15),0,0);
imshow("removeGaussianNoise",result);

waitKey(0);
return0;
}

3. 總結

圖像降噪可以提高圖像質量、提高圖像分析和處理的準確性、提高圖像壓縮效率以及擴展圖像應用范圍。

本文介紹了兩種簡單的降噪算法。中值濾波適用于去除椒鹽噪聲和脈沖噪聲,常用于圖像修復和增強。高斯濾波適用于去除高斯噪聲、平滑圖像,常用于圖像預處理和模糊處理。

審核編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 濾波器
    +關注

    關注

    158

    文章

    7392

    瀏覽量

    175296
  • 高斯濾波
    +關注

    關注

    0

    文章

    12

    瀏覽量

    8048
  • 電磁干擾
    +關注

    關注

    36

    文章

    2129

    瀏覽量

    104923
  • 圖像降噪
    +關注

    關注

    0

    文章

    7

    瀏覽量

    6659
  • OpenCV
    +關注

    關注

    29

    文章

    612

    瀏覽量

    40870

原文標題:OpenCV圖像降噪算法之中值濾波與高斯濾波

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于FPGA的中值濾波算法實現

    一些黑白色的斑點,我以為是椒鹽噪聲,然后在做基于FPGA的中值濾波算法的實驗時,我發現黑白斑點并沒有消除,中值濾波本來是可以很好的濾掉椒鹽噪
    發表于 09-01 07:04

    對ADC數據進行濾波可以用中值濾波算法嗎?

    對ADC數據進行濾波可以用中值濾波算法
    發表于 10-09 06:29

    基于開關3-D中值濾波的視頻序列去噪算法

    為提高含噪視頻序列的質量和效果,提出一種基于開關噪聲檢測與三維中值濾波相結合的開關3-D中值濾波算法。該
    發表于 04-23 09:32 ?17次下載

    基于醫學圖像的有效中值濾波算法研究

    本文對于由Visible Human 所提供的人體CT 圖像序列所形成的體數據場,提出了一種有效的快速中值濾波方法。中值濾波是一種非常有用的
    發表于 08-13 14:39 ?10次下載

    一種改進的各向異性高斯濾波算法

    一種改進的各向異性高斯濾波算法摘 要:為了抑制更好的抑制噪聲保留邊緣信息, 提出了一種各向異性高斯濾波的改進方法, 該方法先用
    發表于 04-23 14:59 ?19次下載

    ×字形濾波窗口在Matlab自適應中值濾波算法中的應用

    本文對Matlab工具箱中的中值濾波算法進行改進,提出一種基于×字形濾波窗口的自適應中值濾波
    發表于 07-08 08:55 ?2567次閱讀
    ×字形<b class='flag-5'>濾波</b>窗口在Matlab自適應<b class='flag-5'>中值</b><b class='flag-5'>濾波</b><b class='flag-5'>算法</b>中的應用

    測井圖像的多級中值濾波算法及其FPGA實現

    微電阻率成像測井儀傳輸上來的地層信息數據需要濾波處理后才能真實地反映出地層中油層的信息,而中值濾波圖像預處理中常用的技術。本文介紹了標準中值
    發表于 12-31 09:20 ?8次下載

    基于FPGA的實時圖像中值濾波算法及實現_蔣濤

    基于FPGA的實時圖像中值濾波算法及實現_蔣濤
    發表于 03-19 11:38 ?15次下載

    基于FPGA灰度圖像高斯濾波算法的實現

    FPGA仿真篇-使用腳本命令來加速仿真二 基于FPGA的HDMI高清顯示借口驅動 基于FPGA灰度圖像高斯濾波算法的實現 FPGA為什么比CPU和GPU快 基于Xilinx FPGA的
    發表于 02-20 20:49 ?7359次閱讀
    基于FPGA灰度<b class='flag-5'>圖像</b><b class='flag-5'>高斯</b><b class='flag-5'>濾波</b><b class='flag-5'>算法</b>的實現

    圖像處理基礎自適應中值濾波器(基于OpenCV實現)

    本文主要介紹了自適應的中值濾波器,并基于OpenCV實現了該濾波器,并且將自適應的中值濾波器和常
    的頭像 發表于 03-05 17:02 ?1.1w次閱讀
    <b class='flag-5'>圖像</b>處理基礎自適應<b class='flag-5'>中值</b><b class='flag-5'>濾波</b>器(基于<b class='flag-5'>OpenCV</b>實現)

    圖像加窗中值濾波算法的研究分析

    提出了一種實用的圖像濾波算法,即圖像加窗中值濾波算法
    發表于 11-30 11:11 ?4次下載
    <b class='flag-5'>圖像</b>加窗<b class='flag-5'>中值</b><b class='flag-5'>濾波</b><b class='flag-5'>算法</b>的研究分析

    四種常見的圖像濾波算法介紹

    濾波算法,并附上源碼,包括自適應中值濾波、高斯濾波、雙邊濾波
    的頭像 發表于 02-15 09:50 ?9554次閱讀

    如何使用FPGA實現圖像中值濾波算法

    圖像濾波圖像預處理過程中葦要的組成部分,而基于FPGA的濾波算法相對軟件算法而言具有高度的并行
    發表于 04-01 11:21 ?42次下載
    如何使用FPGA實現<b class='flag-5'>圖像</b>的<b class='flag-5'>中值</b><b class='flag-5'>濾波</b><b class='flag-5'>算法</b>

    labview圖像中值濾波實例分享

    labview圖像中值濾波實例分享
    發表于 12-15 14:55 ?31次下載

    詳解從均值濾波到非局部均值濾波算法的原理及實現方式

    將再啰嗦一次,詳解從均值濾波到非局部均值濾波算法的原理及實現方式。 細數主要的2D降噪算法,如下
    的頭像 發表于 12-19 16:30 ?530次閱讀
    <b class='flag-5'>詳解</b>從均值<b class='flag-5'>濾波</b>到非局部均值<b class='flag-5'>濾波</b><b class='flag-5'>算法</b>的原理及實現方式
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>