雙目視覺之立體匹配

  1. 引言
    立體匹配—匹配兩個不同攝像機視圖中的三維點—只能在兩攝像機的重疊視圖內的可視區域上才能被計算。如果知道了攝像機的物理座標或者場景中物體的大小,就可以通過兩個不同攝像機視圖中的匹配點之間的三角測量視差值d = xl - xr來求取深度。

  2. opencv實現了兩種立體匹配算法:塊匹配算法和半全局塊匹配算法。

    1. 塊匹配算法(block matching,BM)
      該算法使用了叫“絕對誤差之和”的小窗口來查找左右兩幅立體校正圖像之間的匹配點。這個算法只搜尋兩個圖像之間的強匹配(強紋理)。因此,在一個強紋理場景中,例如出現在室外的森林中,每一個像素都有可計算的深度。在一個弱紋理場景中,例如一個室內走廊,只能計算出很少點的深度。對於處理非畸變的校正立體圖像,塊匹配立體匹配算法有以下三個步驟:

      1. 預過濾,使圖像亮度歸一化並加強圖像紋理
      2. 沿着水平極線用SAD窗口進行匹配
      3. 再過濾,去除壞的匹配點

      在預過濾中,輸入圖像被歸一化處理,從而減少了亮度差異,也增強了圖像紋理。這個過程通過在整幅圖像上移動窗口來實現,窗口的大小可以是55、77(默認值)……、21*21(最大)。窗口的中心像素Ic由min[max(Ic-Iavg,Icap),Icap],Iavg是窗口的平均值,Icap是一個整數範圍,默認值爲30。
      匹配過程通過滑動SAD窗口完成。對於左圖像中的每個特徵,要在右圖像中對應行進行尋找,以實現最優匹配。校正之後,每一行就是一條極線,因此右圖像上的匹配位置就一定會在左圖像的相同行上(即具有相同的y座標)。如果特徵有足夠多可檢測的紋理,並且位於右攝像機視圖內,就可以找出該匹配的位置。如下圖所示:
      在這裏插入圖片描述
      如果左特徵像素位於(x0,y0),那麼對於水平前向平行的攝像機排列,匹配點(如果有)一定會在相同行或x0左側找到。如下圖所示:
      在這裏插入圖片描述
      對於前向平行的攝像機來說,x0是零視差,並且左邊的視差更大,對兩個攝像機之間有夾角的情況,匹配點則可能出現負的視差(位於x0右側)。
      然後通過預先選擇的視差數進行視差搜索,以像素計數(默認爲64像素)。視差具有一個離散的亞像素精度,等於低於單個像素級別的4位分辨率。當輸出圖像是一個32位浮點圖像時,將返回非整型視差。當輸出一個圖像是一個16位整型時,視差將以4位定點形式返回(即乘以16並舍入爲整數)。
      設置最小視差和待查找的視差個數建立一個雙目視界,這個三維體被被立體算法的搜索範圍所覆蓋。
      下圖展示了由三種不同視差(20、17、16)限制開始的5像素的視差搜索範圍。如圖中所示,每組不同的視差限制和視差個數都產生了不同深度可知的雙眼視界。在這個範圍之外就不能獲得深度,在深度圖上會出現一個深度未知的“黑洞”。縮小攝像機間的極線距離T、減小焦距長度、增加立體視差的搜索範圍或者增大像素寬度,都可以使雙目視差變得更大。
      在這裏插入圖片描述
      雙目視界內部的對應有一個內置約束,稱爲“順序約束”,他簡單地規定了特徵從左視圖到右視圖轉換時順序保持一致。可能會有缺失。這是因爲有遮擋和噪聲地緣故,使得左圖像上的特徵在右圖像上不能發現,但是發現它們的順序保持不變。同樣地,右圖像上也可能有一些特徵在左攝像機上不能識別(這些稱爲“插入”),但是插入不會改變特徵地順序,儘管這些特徵可能會擴散。
      下圖過程反應了水平掃描線上匹配特徵地順序約束
      在這裏插入圖片描述
      給定允許地最小視差增量,通過下面公式,能確定可以獲得最小深度範圍精度。
      在這裏插入圖片描述
      在匹配之後,就要開始進行過濾處理。匹配值經常具有一個特點,就是強烈地中央被副瓣所包圍。一旦確定了兩個視圖的待選特徵匹配,就可用後過濾來錯誤匹配。

    2. 半全局塊匹配算法(semi-global block matching,SGBM)
      SGBM主要在兩個方面與BM算法不同。第一個是使用Birchfield-Tomasi度量在子像素水平上進行匹配。第二個不同是SGBM視圖基於所計算的深度信息來強制實現全局平滑約束,它通過感興趣區域的許多一維平滑度約束進行考慮。

參考文獻:Adrian Kaehler,Gary Bradski,Learning Opencv3[M],清華大學出版社,2018.7


下面的是筆者的微信公衆號,歡迎關注,會持續更新c++、python、tensorflow、機器學習、深度學習、計算機視覺等系列文章,公衆號中內含300+本pdf電子書籍,肯定有你需要的一本,關注公衆號即可領取哦。
在這裏插入圖片描述
如果你對JAVA方面感興趣,可以關注下面JAVAERS公衆號,陪你一起學習,一起成長,一起分享JAVA路上的詩和遠方。在公衆號裏面都是JAVA這個世界的朋友,公衆號每天會有技術類文章,面經乾貨,也有進階架構的電子書籍,如Spring實戰、SpringBoot實戰、高性能MySQL、深入理解JVM、RabbitMQ實戰、Redis設計與實現等等一些高質量書籍,關注公衆號即可領取哦。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章