圖像降噪處理主要分為2D(空域)與3D降噪(時(shí)域/多幀),而2D降噪由于相關(guān)的實(shí)現(xiàn)算法豐富,效果各異,初學(xué)入門(mén)有著豐富的研究?jī)r(jià)值。理解2D降噪算法的流程,也對(duì)其他的增強(qiáng)算法有很大的幫助,因此本文將再啰嗦一次,詳解從均值濾波到非局部均值濾波算法的原理及實(shí)現(xiàn)方式。
細(xì)數(shù)主要的2D降噪算法,如下圖所示,從最基本的均值濾波到相對(duì)最好的BM3D降噪,本文將盡量用最同屬的語(yǔ)言,詳解這些算法的實(shí)現(xiàn)流程,并給予一定的FPGA加速實(shí)現(xiàn)的實(shí)現(xiàn)思路。其中BM3D由于篇幅較大,后面再補(bǔ)上。

1.1.均值/中值濾波
首先所有濾波算法都是通過(guò)當(dāng)前像素周邊的像素,以一定的權(quán)重來(lái)計(jì)算濾波的像素值。因此主要涉及兩個(gè)變量:窗口的大小,以及窗口內(nèi)像素的權(quán)重。以最簡(jiǎn)單的均值濾波/中值濾波,3*3窗口為例,計(jì)算及優(yōu)缺點(diǎn)如下:

對(duì)于FPGA的硬件加速實(shí)現(xiàn),過(guò)程還好,唯一頭疼的就是涉及了除法,由于除法計(jì)算時(shí)鐘周期長(zhǎng)且耗費(fèi)LE,我們需要升級(jí)改造下,因此優(yōu)化公式如下(sum為9個(gè)像素累加的結(jié)果),將除法巧妙變成乘法:

因此實(shí)現(xiàn)的流程如下
1)sum1=P0+P1+P2; sum1=P3+P4+P5; sum3=P6+P7+P8,即先求每行3像素累加
2)sum=sum1+sum2+sum3,即求三行9像素累加
3)sum*144,取結(jié)果的[17:10],即為均值濾波的結(jié)果。
4)以上過(guò)程流水線,最終每個(gè)clk輸出一個(gè)計(jì)算結(jié)果。
備注:這里1024/9取了floor,這樣保證不會(huì)溢出。
對(duì)于中值濾波而言,本身計(jì)算并不復(fù)雜,就看怎么取巧最快得到中間數(shù),網(wǎng)上流傳了一個(gè)三步法,即如下圖所示,

那么FPGA硬件加速實(shí)現(xiàn),流程如下:
1)計(jì)算每行3個(gè)像素的最大中、中值、最小值
2)計(jì)算三個(gè)最大值的最小值,中間值的中間值,以及最小值的最大值。
3)對(duì)上述三個(gè)值求得中間值。
4)以上過(guò)程流水線,最終每個(gè)clk輸出一個(gè)計(jì)算結(jié)果。
中值濾波計(jì)算相對(duì)均值濾波稍微復(fù)雜一點(diǎn),但是好處是只用了比較器,沒(méi)用乘法器,比均值濾波更省資源。
對(duì)于椒鹽圖像的均值濾波、中值濾波計(jì)算效果對(duì)比,如下所示,分別為椒鹽圖像、均值濾波、中值濾波結(jié)果。

1.2.高斯濾波
1)
前面講的均值/中值濾波,對(duì)于窗口內(nèi)每個(gè)像素的權(quán)重都是一樣的,噪聲在圖像當(dāng)中常表現(xiàn)為一引起較強(qiáng)視覺(jué)效果的孤立像素點(diǎn)或像素塊,那么他必然不是平均分布。
正態(tài)分布是最重要的一種概率分布,相關(guān)概念上是由德國(guó)的數(shù)學(xué)家和天文學(xué)家Moivre與1733年首次提出的,但由于德國(guó)數(shù)學(xué)家Gauss率先將其用于天文學(xué)研究,因此也叫做高斯分布。在正態(tài)分布里,人為中間狀態(tài)是常態(tài),過(guò)高和過(guò)低都屬于少數(shù),因此正態(tài)分布具有相當(dāng)?shù)钠毡樾裕湫偷谋热缟?、壽命、血壓、成?jī)、測(cè)量誤差等都遵從正太分布。

因此以概率論及中心極限定理(https://wiki.mbalib.com/wiki/中心極限定律)猜想,大部分噪聲應(yīng)該也符合正態(tài)分布/高斯分布(高斯白噪聲),所以也就有了高斯濾波,及根據(jù)正態(tài)分布進(jìn)行權(quán)重計(jì)算的濾波方法。上圖曲線是高斯分布的一維函數(shù),而圖像應(yīng)該是二維的,圖解如下二維高斯分布:

既然已經(jīng)得到二維高斯分布函數(shù),那么根據(jù)窗口到目標(biāo)像素的距離,就可以是計(jì)算出周邊像素的權(quán)重——高斯模板。均值濾波每個(gè)像素的權(quán)重都是1/9,再通過(guò)卷積后計(jì)算得到結(jié)構(gòu),而高斯濾波就是根據(jù)正態(tài)分布,去計(jì)算當(dāng)前像素相對(duì)距離的權(quán)重值,假定σ=1.5(σ就是濾波的強(qiáng)度),3*3的高斯模板計(jì)算計(jì)算過(guò)程如下:

但是這還不夠,畢竟我們的目標(biāo)是直接上FPGA,那必須頂定點(diǎn)化,因此假設(shè)擴(kuò)大1024倍,則3*3的高斯模板定點(diǎn)化如下:

對(duì)于33或者55,選定的σ,高斯模板那么,現(xiàn)在計(jì)算就簡(jiǎn)單了,卷積后再縮小1024倍即可,采用FPGA計(jì)算,過(guò)程如下:
1)計(jì)算9個(gè)像素的對(duì)應(yīng)卷積參數(shù)的乘法
2)9累加9個(gè)乘法結(jié)果
3)右移10bit或取結(jié)果的[17:10],即為高斯濾波的結(jié)果。
4)以上過(guò)程流水線,最終每個(gè)clk輸出一個(gè)計(jì)算結(jié)果。
備注:當(dāng)然實(shí)現(xiàn)還可優(yōu)化,比如只用3個(gè)乘法器,算一行累加一行,也就4個(gè)時(shí)鐘算完。
最后,暫且盜用別人針對(duì)不同σ的3*3高斯濾波效果圖,如下(σ越大越模糊):


精彩推薦 至芯科技FPGA就業(yè)培訓(xùn)班——助你步入成功之路、12月30號(hào)西安中心開(kāi)課、歡迎試聽(tīng)! AXI總線協(xié)議總結(jié) 基于FPGA及模擬電路的模擬信號(hào)波形的實(shí)現(xiàn)掃碼加微信邀請(qǐng)您加入FPGA學(xué)習(xí)交流群


歡迎加入至芯科技FPGA微信學(xué)習(xí)交流群,這里有一群優(yōu)秀的FPGA工程師、學(xué)生、老師、這里FPGA技術(shù)交流學(xué)習(xí)氛圍濃厚、相互分享、相互幫助、叫上小伙伴一起加入吧!
點(diǎn)個(gè)在看你最好看
原文標(biāo)題:詳解從均值濾波到非局部均值濾波算法的原理及實(shí)現(xiàn)方式
文章出處:【微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
FPGA
+關(guān)注
關(guān)注
1654文章
22274瀏覽量
629918
原文標(biāo)題:詳解從均值濾波到非局部均值濾波算法的原理及實(shí)現(xiàn)方式
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
ADC的采樣濾波算法利用卡爾曼濾波算法
單片機(jī)的算法
用于單片機(jī)幾種C語(yǔ)言算法
詳解電容濾波與電感濾波的區(qū)別
數(shù)據(jù)濾波算法的具體實(shí)現(xiàn)步驟是怎樣的?
基于Matlab與FPGA的雙邊濾波算法實(shí)現(xiàn)
藍(lán)牙信標(biāo)RSSI濾波算法
不同設(shè)備中電源濾波器接線方式的差異
AD8361均值響應(yīng)功率檢波器技術(shù)手冊(cè)
恩智浦講解如何在低算力MCU平臺(tái)上優(yōu)雅的計(jì)算均值和方差
FPGA上的圖像處理算法集成與優(yōu)化
AMC1210對(duì)AMC1305進(jìn)行數(shù)字抽取濾波,輸出后的數(shù)據(jù)是否需要用處理器進(jìn)行一次平均和移位處理?
濾波器的一些常識(shí)
圖像高斯濾波的原理及FPGA實(shí)現(xiàn)思路

詳解從均值濾波到非局部均值濾波算法的原理及實(shí)現(xiàn)方式
評(píng)論