1.高斯濾波算法的實現
上面提到的平均/中值濾波對于濾波窗口中的每個像素具有相同的權重。但是,噪聲在圖像中往往表現為具有異常視覺效果的孤立像素或塊,因此一定不能均勻分布。
首先介紹一個概念:正態分布:
正態分布是最重要的概率分布。1733年,德國數學家、天文學家莫伊弗提出了相關概念。然而,它也被稱為高斯分布,因為德國數學家高斯率先將其應用于天文學研究。在正態分布中,認為中間狀態是正常的,過高過低都屬于少數,所以正態分布是相當普遍的,典型的有我們的身高、壽命、血壓、成績、測量誤差等。都遵循正態分布。
以中國家庭動態追蹤、抽樣自報身體高數數據為例。以下是2010年男女身高分布直方圖,近似正態分布。
題外話,回到正題,我們這里的主題是處理高斯噪聲,它不同于椒鹽噪聲,而高斯噪聲是畫面上每一點高斯分布程度不同的噪聲,它遠離當前像素。在這里,我們繼續解釋高斯算法和MatlabFPGA在上述成熟的3*3滑動窗口方案上的實現。
2.高斯濾波算法理論
根據概率論猜想和中心極限定理(MBA智庫百科、中國經濟與管理全球專業百科),大部分噪聲也要符合正態分布/高斯白噪聲,所以有高斯濾波和按正態分布計算權重的濾波方法。
我們已經介紹了高斯分布(正態分布),這里直接介紹高斯分布函數,它是一維和二維的高斯分布函數,其中是高斯分布的強度,越大,數據越分散,否則越向中心集中:
首先,我們利用Matlab的高斯函數對結果進行了驗證。=1的高斯濾波可以看出有一定的模糊效果。圖3為5*5的窗口,=3高斯濾波,模糊的強度略大。圖4顯示了11*11的窗口、=3的高斯濾波以及與5*5的窗口相比=3的濾波??梢钥闯觯瑪U大窗口后,濾波后的模糊程度很大,濾波窗口對濾波強度的影響較大,其次是的大小。
在左邊,為了生成5*5模板的Matlab代碼,我們首先根據高斯分布的公式生成5*5模板。其中11行是原二維高斯分布的函數,12行我去掉了常熟。畢竟公式歸一化后可以簡化,得到的高斯權重分布是一堆浮點數據,如圖G1。
然而,二維高斯分布不僅在5*5的范圍內,而且權重仍然分布在5*5以上。但是我們目前采用的是5*5高斯分布,我們認為數據主要分布在5*5以內,所以需要進一步歸一化,使所有權之和等于1,如第17-18行所示,得到右邊第二個表數據的模板。
如果在Matlab中實現,此時得到的模板已經可以用于高斯濾波卷積計算。然而,我們的目標是FPGA實現,因此需要進一步的本地化。這里以*1024為例生成最終的5*5模板,如上表三所示。最后,當然我們需要縮放回/1024,這樣結果才能最終恢復到0-255。
5*5高斯模板卷積的Matlab源代碼,其中IMG1為原始圖像,IMG2為利用Matlab自帶的高斯濾波函數在=3,5*5窗口內的濾波結果,IMG3為基于生成的定點模板卷積的結果,由我們手工編譯。
其中,在處理5*5卷積時,為了設計簡單,邊緣像素采用復制原值的操作。另外,由于Matlab是浮點運算,卷積后數據類型再次轉換為uint8定點。最后,生成的結果如下圖所示,其中圖2類似于圖3,處理結果差不多