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


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

 

   我這里提出兩個解決方案:

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

      

 

  得到的結果大概如下所示:

     

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

        

   上面的處理后的圖像還有些模糊,原因是ImageJ這個插件對其他位置的頻譜也處理掉了一些(上面有圖的Filter除水平黑線之外的其他黑色區域),如果用於工業實踐,可再次適當修改下代碼。

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

        

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

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

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

    這個算法的結果如下:

       

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

        

    但是他的優點就是速度非常快,所以還是要根據不同的需求來使用不同的算法把。

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

  如果是去除水平條紋,其實也是采用類似的算法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM