https://sanwen8.cn/p/2e41VC5.html
本文系微信公眾號《大話成像》,知乎專欄《 all in camera》原創文章,轉載請注明出處。
接着上一篇的說,其實在雙攝像頭的景深計算過程中如果只是按照上一篇文章介紹最簡單的處理辦法是一定得不到一個理想的景深圖。並且在處理速度上也得不到一個理想的結果。其實這個和雙目視覺上一般存在的一些和預想不同的視覺差情況相關的。
如區域太過平坦或者花紋接近很難判斷是不是最匹配。
反光的表面的光斑
反光有虛影的表面
大物體邊緣的背景信息不一致
觀察角度變化導致的長度變化
甚至觀察角度變化導致的一些形變
這些問題其實就是當兩張圖像上點不能簡單的判斷對應的時候算法如何處理。
其實在介紹這些問題之前。圖片拍攝過程中的噪聲也是關鍵問題。上一篇文章中最后處理的不滿意的一個主要原因就是噪聲引起的。
有些朋友也有過回復其實一個簡單的策略就是針對原圖或者景深圖進行濾波減少對生成景深圖的影響。在實際處理中可以對原圖做預處理也可以對生成的景深圖做處理。目前效果好的就是美顏那篇文章中提到的雙邊濾波。原因很簡單,保邊濾噪。
解決上面,有一類思路是對之前生成的景深圖進行后處理。這個時候就要看下面的這個公式。其實公式本身很簡單,Edata代表我們匹配的結果,Esmooth代表一般景深場景下的連續性。也就是說兩者都在景深的評價過程中都應該考慮。這其實是符合多數的圖像的常識的。在考慮到景深圖的平滑性之后景深圖的質量有了很大的提升。
因此基於一般性的常識,很多研究針對景深的后處理提出了一些算法
• Dynamic Programming!
• ScanlineOptimization!
• Graph Cuts!
• Belief Propagation, …!
下面就是GraphCut的處理,其主要思想還是減少景深圖中小塊的區域。但是其實這種做法是可以減少很多小的噪聲,但是在某些細節部分也會帶來一些誤判。導致物品的邊緣發生變化。
另外就是根據State-of-art的原則,假設所有一個顏色都是出於一個平面。每次分析的時候根據顏色對窗口中的像素進行權重的分配。這樣確實能夠解決一些邊緣的問題。
但是在一些情況下如下面的人臉和斜面的狀況下,還是很容易出現景深的判斷錯誤。一般景深判斷算法很難處理這類問題。
另外就是之前提到的背景信息不同問題的。這類問題使用不同權重的方法可以得到一定程度的改善。
還有個不錯的方法是通過不同方向的掃描線的方法來進行。其方法是根據不同方向下判斷線的連續性來進行景深圖的處理。最后綜合成一張最后的景深圖。相對這個步驟比較多,大家有興趣可以參照下
H. Hirschmüller. Stereovision in structured environments by consistent semi-global matching.這篇文章。
另外有一些算法的思路通過以左右兩張圖片分別做為參考圖片,分別計算景深。然后取兩者中較小的。這樣可以解決掉很大一部分誤判。但是相對來說運算時間增加了一倍。
目前還有一類針對改善景深圖的方法是通過調整評價窗口的大小,位置甚至形狀來實現。之前的簡單的方法是采用參考點在中心部位取window.其實也可以可以根據顏色去取參考點出於邊上的點。
又或者可以通過多個子窗口去評價,子窗口的的排列可以根據實際圖形的情況。比如取相同顏色的區域。
最后甚至還可以根據不同狀況下來調整用來采樣的窗口大小。
但是大家可以注意到上面的改進算法都有一個特征,增加算法的復雜程度。於是也有很多人研究怎么樣減少運算量。其中一種方法是通過整張圖累加到計算點的和來代替之前的計算兩張圖的差的方法。方法很簡單,但是如果圖像比較大容易出現溢出的狀況。大家有興趣可以看下
F. Crow, Summed-area tablesfor texture mapping, Computer Graphics,
還有些數學很好的專家,推算出如何通過減少運算量實現一樣的Box-Filtering運算結果。M.Mc Donnel. Box-filtering techniques. Computer Graphics and Image Processing
現在有很多算法都根據實際使用的平台通過GPU進行算法的優化。更好的整體解決方案公司甚至通過FPGA或者定制芯片來進行景深計算的速度問題。隨着技術的發展相信更精確的速度更快的景深計算方案會不斷的出來。
景深計算在物體識別,AR增強領域是個最基礎的研究。這篇文章中介紹一些方法都是一些比較基礎的方法。實際上還有很多思路來解決一些單獨方面的問題。其實現在如何計算景深的研究還在發展,前一段時間還看到一些論文利用深度學**來進行景深計算的改進,從論文的效果來看不錯。但是在實際產品使用中往往是多種方法結合來使用。而且在最終的成效果和運行時間上進行平衡。
本文參考StereoVision: Algorithms and Applications Stefano Mattoccia
Department ofComputer Science (DISI) University of Bologna