一. 2D 去噪介紹
ISP中通常包括對(duì)圖像的去噪,英文名稱為Image Denoising。是指的對(duì)數(shù)字圖像中的噪聲進(jìn)行消除或減少的過(guò)程。2D去噪指的是對(duì)單幀圖像進(jìn)行幀內(nèi)降噪處理,而3D去噪則需要關(guān)聯(lián)前后幀。本文僅介紹幾種常見(jiàn)的基于濾波器的方法的2D去噪:均值濾波、高斯濾波、中值濾波。
二. 均值濾波
均值濾波是一種典型的線性濾波算法。原理很簡(jiǎn)單,以當(dāng)前處理像素為中心,取n x n大小的圖像矩陣,求出該矩陣內(nèi)的像素的均值替代該像素,如此遍歷整個(gè)圖像,即可完成整幅圖像的均值濾波。
以5x5的濾波矩陣為例,算法示意圖如圖2-1所示。
圖2-1 均值濾波原理示意圖
均值濾波的FPGA實(shí)現(xiàn)框圖如圖2-2所示,以行方式輸入的圖像信號(hào)通過(guò)line_cache處理后,以5行的形式輸出,輸送至avg_filter_process進(jìn)行5x5的濾波處理。以圖像大小1080P,像素深度為12bit灰度為例,用于緩存的RAM大小為1920x48(深度1920,寬度12x4)。
圖2-2 均值濾波FPGA實(shí)現(xiàn)框圖
line_cache每進(jìn)來(lái)一行,會(huì)將緩存在RAM_1920x48中的前4行的像素逐個(gè)取出,加上新輸入的一行圖像,組成一個(gè)個(gè)5x5的矩陣,并組成新的4行數(shù)據(jù)(48bit)寫(xiě)入RAM_1920x48中,準(zhǔn)備給下一行使用。此過(guò)程中需要對(duì)圖像上下左右的邊界進(jìn)行邊界處理,即輸入圖像大小為1924x1084。然后對(duì)5x5的矩陣的矩陣相加再除25。除操作通常轉(zhuǎn)換為近似的乘操作,如該代碼中會(huì)乘以2641(1/25*2^16),再將結(jié)果右移16位。
仿真結(jié)果見(jiàn)圖2-3、圖2-4。
圖2-3 均值濾波仿真圖1
圖2-4 均值濾波仿真圖2
效果對(duì)比圖如圖2-5,左邊為原圖,右邊為均值濾波后的結(jié)果。
圖2-5 均值濾波效果對(duì)比圖
基于5x5的均值濾波會(huì)引入兩行的延時(shí)。基于Xilinx 7A50T的資源占用如圖2-6所示。
圖2-6 資源占用情況
三. 高斯濾波
高斯濾波就是對(duì)整個(gè)圖像進(jìn)行加權(quán)平均的過(guò)程,每一個(gè)像素點(diǎn)的值,都由其本身和鄰域內(nèi)的其他像素值經(jīng)過(guò)加權(quán)平均后得到。高斯濾波的具體操作是:用一個(gè)模板(或稱卷積、掩模)掃描圖像中的每一個(gè)像素,用模板確定的鄰域內(nèi)像素的加權(quán)平均灰度值去替代模板中心像素點(diǎn)的值。
高斯濾波的公式為:f(x)=aexp [-(x-m)^2/2σ^2]
其中,a是常數(shù),m是均值,σ是標(biāo)準(zhǔn)差。
本文介紹基于Xilinx FPGA實(shí)現(xiàn)的5x5的濾波,處理的圖像是bayer圖像,并且對(duì)bayer圖像中的R、Gr、B、Gb四個(gè)通道分開(kāi)進(jìn)行處理。以bayer圖像中的一個(gè)像素進(jìn)行高斯濾波為例,處理過(guò)程:首先以目標(biāo)像素為中心取出一個(gè)9x9的像素陣列,再在該9x9像素陣列的基礎(chǔ)上取出一個(gè)5x5的像素陣列,然后將像素陣列中的像素值與對(duì)應(yīng)的濾波系數(shù)相乘,再將所有值相加,最后將所得的值除以濾波系數(shù)之和,相除所得的值就是高斯濾波的結(jié)果。
圖3-1 高斯濾波原理示意圖
其中高斯濾波的濾波系數(shù)H由標(biāo)準(zhǔn)差σ確定。本文中使用的濾波系數(shù)如圖3-2所示。
圖3-2 高斯濾波的濾波系數(shù)
高斯濾波的FPGA實(shí)現(xiàn)框圖如圖3-3所示,實(shí)現(xiàn)方式與均值濾波類似。由于是基于Bayer圖像,需要先將Bayer圖像的通道分離,分別進(jìn)行處理。另外5x5的均值濾波可以理解為濾波系數(shù)均為1的高斯濾波,其他處理過(guò)程一致。
圖3-3 高斯濾波FPGA實(shí)現(xiàn)框圖
line_cache的處理與均值濾波類似,只是緩存行數(shù)由4行增加到了8行。對(duì)5x5的矩陣數(shù)據(jù)均乘以一個(gè)系數(shù)H,再將所有值相加,最后將所得的值除以濾波系數(shù)之和,相除所得的值就是高斯濾波的結(jié)果。Pipe line的處理方式如圖3-4所示。
圖3-4 高斯濾波FPGA處理流程
仿真波形如圖3-5、圖3-6。
圖3-5 高斯濾波仿真圖1
圖3-6 高斯濾波仿真圖2
效果對(duì)比如圖3-7,左邊為原圖,右邊為高斯濾波后的結(jié)果。
圖3-7 高斯濾波效果對(duì)比圖
高斯濾波與均值濾波類似,總體是對(duì)圖像進(jìn)行一個(gè)只跟距離有關(guān)的抹平。因此對(duì)邊緣細(xì)節(jié)沒(méi)有保留,效果也差別不大。
基于5x5的均值濾波會(huì)引入四行的延時(shí)。基于Xilinx 7A50T的資源占用如圖所示。
圖3-8 資源占用情況
四. 中值濾波
中值濾波是一種非線性濾波算法。原理也很簡(jiǎn)單,以當(dāng)前處理像素為中心,取n x n大小的圖像矩陣,將該矩陣內(nèi)的像素值進(jìn)行排序,將值大小排列在最中間的像素替換該點(diǎn)。如此遍歷整個(gè)圖像,即可完成整幅圖像的中值濾波。
以3x3的濾波矩陣為例,算法示意圖如圖4-1所示。
圖4-1 中值濾波原理示意圖
中值濾波的FPGA實(shí)現(xiàn)框圖如圖4-2所示。以圖像大小1080P,像素深度為8bit灰度為例,用于緩存的RAM大小為1920x16(深度1920,寬度8x2)。
圖4-2 中值濾波FPGA實(shí)現(xiàn)框圖
line_cache的處理與均值濾波類似,只是緩存行數(shù)由4行減少到了2行。對(duì)輸出的3x3矩陣內(nèi)的9個(gè)數(shù)進(jìn)行排序,輸出中間值即可。
仿真波形如圖4-3、圖4-4。
圖4-3 中值濾波仿真圖1
圖4-4 中值濾波仿真圖2
效果對(duì)比如圖4-5所示,左邊為原圖,右邊為中值濾波后的結(jié)果。
圖4-5 中值濾波效果對(duì)比圖
中值濾波原理決定了其能較好地消除孤立的噪聲點(diǎn)而不會(huì)對(duì)圖像造成較大的抹平模糊(相較于均值濾波和高斯濾波)。因此對(duì)邊緣細(xì)節(jié)保留較好。
基于3x3的均值濾波會(huì)引入一行的延時(shí)。基于Xilinx 7A50T的資源占用如圖所示。
圖4-6 資源占用情況
五. 延申
以上幾種2D去噪算法均為最基礎(chǔ)的去噪處理,實(shí)際應(yīng)用中,不一定能滿足我們的應(yīng)用需求。因此,基于上述幾種濾波器,通常還有一些改進(jìn)型。如:
A. 雙邊濾波器: 雙邊濾波器實(shí)際上是在高斯濾波器的基礎(chǔ)上引入像素差值作為H濾波器系數(shù)的參考,權(quán)重系數(shù)動(dòng)態(tài)變化,使得濾波器在濾除噪聲的同時(shí)也能保留圖像的邊緣信息。
B. 自適應(yīng)的中值濾波器: 中值濾波器的開(kāi)窗大小可以應(yīng)對(duì)不同的噪聲密度,但是窗口越大,圖像的失真也會(huì)越大。因此增加一個(gè)對(duì)噪聲密度進(jìn)行判斷的模塊從而指導(dǎo)中值濾波器動(dòng)態(tài)地變化濾波開(kāi)窗大小,就能同時(shí)兼顧去噪和保留圖像的細(xì)節(jié)。
審核編輯:劉清
評(píng)論
查看更多