【短道速滑三】去除圖像豎直(垂直)條紋算法

  最近一個朋友發了一個效果圖,是關於條紋去除的,問我有沒有什麼好的方法,實現這個功能,給個人參考圖片以下所示:java

 

   我這裏提出兩個解決方案:算法

      方案1: 使用帶通濾波器,基於FFT的,這個應該是最爲標準的答案,詳細的參考代碼能夠見ImageJ軟件的BandPass Filer,具體路徑爲ImageJ\source\ij\plugin\filter\FFTFilter.java。界面以下所示:測試

      

 

  獲得的結果大概以下所示:spa

     

 其原理就是豎直條紋在頻譜圖上表現爲一條水平線,咱們就要把這條水平線消除,反饋到RGB空間就沒有條紋了。         插件

        

   上面的處理後的圖像還有些模糊,緣由是ImageJ這個插件對其餘位置的頻譜也處理掉了一些(上面有圖的Filter除水平黑線以外的其餘黑色區域),若是用於工業實踐,可再次適當修改下代碼。3d

  在網上另外找了一個測試圖像,效果也還算能夠:    blog

        

   方案2: 使用GIMP裏的Destripe算法,該算法位於gimp-master\plug-ins\common\destripe.c文件中,其核心過程其實也很簡單,他接受一個輸入參數,窗口寬度,在內部他計算指定寬度內,研圖像高度方向全部像素的平均值,而後以這個平均值和當前像素的差別做爲一個特徵,帶入到後續的一個加強算式中,核心就是下面兩句代碼,這個實際上是用X方向的圖像信息來彌補Y方向的信息的一種手段。圖片

    *c = ((sum / cnt - *h) << 10) / *h;ip

    *rows = MIN (255, MAX (0, *rows + (*rows * *c >> 10) ));get

    這個算法的結果以下:

       

 對這個圖的處理效果仍是很不錯的。不過他的通用型沒有基於FFT的完美,好比上面第二個測試圖像,他的結果以下所示:   

        

    可是他的優勢就是速度很是快,因此仍是要根據不一樣的需求來使用不一樣的算法把。

    本文Demo下載地址:  http://files.cnblogs.com/files/Imageshop/SSE_Optimization_Demo.rar,基於FFT的BandPass Filter詳見菜單 FFT-> BandPass Filter,基於GIMP那個算法詳見:Detection -> Audilairay Enhance-> Destripe菜單。

  若是是去除水平條紋,其實也是採用相似的算法。

相關文章
相關標籤/搜索