0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

立體匹配:經典算法Fast Bilateral Solver

3D視覺工坊 ? 來源:計算攝影學 ? 2023-01-03 10:59 ? 次閱讀

一. 前言

你好,歡迎你打開這篇文章,這是我的系列立體匹配算法介紹文章中承上啟下的一篇,請看看我們現(xiàn)在走到了哪一步:

8225f894-8a88-11ed-bfe3-dac502259ad0.png

當前進度 今天,我將通過這一篇文章,填滿上圖箭頭指向的格子! 下面我展示了一對雙目相機拍攝的原始圖像,已經過了立體校正:

823d4788-8a88-11ed-bfe3-dac502259ad0.jpg

一對做過立體校正后的雙目圖像 而下面左圖是OpenCV的SGBM算法得到的視差圖,右邊則是通過我今天要介紹的算法處理后的視差圖??戳怂鼈兒?,我想你應該對什么叫做”化腐朽為神奇“有了深刻印象了吧。

8259c3b8-8a88-11ed-bfe3-dac502259ad0.jpg

左:SGBM算法結果 右:今日介紹的算法結果 那么如此神奇的效果,是如何做到的呢? 在復雜的問題進行空間轉換,變換為小規(guī)模的易解問題的思想:

82642358-8a88-11ed-bfe3-dac502259ad0.jpg

化簡問題的思路 今天我介紹的這篇文章,也是基于這種思想的——事實上這就是同一個作者Jon Barron,基于相同思想的進一步研究,

826f6ff6-8a88-11ed-bfe3-dac502259ad0.jpg

Jon Barron文章介紹 這個算法我在后文中會簡稱為FBS,它是我在立體匹配的研究和工程應用中最喜歡的算法之一。這個算法相比我之前介紹的Fast Bilateral-Space Stereo有什么不同呢? 上一篇文章所講的Fast Bilateral-Space Stereo,解決的是立體匹配問題——它將立體匹配當成下面的全局匹配代價最小化問題進行解決。

82809d80-8a88-11ed-bfe3-dac502259ad0.jpg

Fast Bilateral-Space Stereo算法思想總結 這個算法的優(yōu)點我們已經講過了,在此不再贅述。然而它也有明顯的缺點。 首先是其匹配代價函數(shù)過于簡單,上面公式中第二項是就是匹配代價項,也即是數(shù)據(jù)項。為了盡可能簡單快速求解,作者采用了下面這樣非常簡單的形式:

82970624-8a88-11ed-bfe3-dac502259ad0.png

簡化的立體匹配代價函數(shù) 圖示如下:

82ac27b6-8a88-11ed-bfe3-dac502259ad0.jpg

圖示這種簡化問題的思路 然而,正是因為其形式非常簡單,因此效果也不夠好,很容易出現(xiàn)大大小小的錯誤。 Fast Bilateral-Space Stereo算法的另外一個問題是,作者把上述代價映射到了雙邊空間,用一種叫做L-BFGS的方法進行求解,這是Broyden,Fletcher,Goldfarb,Shanno這幾位數(shù)學家發(fā)明的優(yōu)化算法,他們名字的首字母組合就是BFGS。這是一種迭代式的求解方法,它的求解速度是比較慢的。

同時,F(xiàn)ast Bilateral-Space Stereo的求解方法也無法應用到深度學習過程中,因為其代價函數(shù)也無法求導進行反向傳播。這一點我之后再談。 今天要講的FBS,則采用了特別不一樣的思想,如下圖所示。Fast Bilateral-Space Stereo的一大缺點就是采用了較低質量的匹配函數(shù),所以Fast Bilateral Solver(即所謂FBS)干脆不自己做匹配,而是允許其他算法算出一個初始的還不夠好的視差圖,然后再通過最優(yōu)化一個全局代價函數(shù)來優(yōu)化這個初始的視差圖,最終得到一個更好的結果:

82cade40-8a88-11ed-bfe3-dac502259ad0.jpg

FBS思想 在作者論文中開篇就用下面這幅圖來說明了這個思想:

82dc98ec-8a88-11ed-bfe3-dac502259ad0.jpg

利用FBS優(yōu)化視差圖 我一開始給大家呈現(xiàn)的關于貓貓的視差圖(下面右圖),就是用FBS處理了SGBM算法的結果(左圖)后得到的,這也是我最喜歡的FBS的用法:

8259c3b8-8a88-11ed-bfe3-dac502259ad0.jpg

左:SGBM算法結果 右:FBS優(yōu)化左圖的結果 FBS的優(yōu)秀之處在于它不僅僅可以用于優(yōu)化初始的視差圖,還能做得更多,比如視差圖或深度圖圖的超分辨率重建。這里有一個低質量的輸入視差圖y,以及一個參考圖像R,通過FBS可以得到高質量的輸出圖像x,其中x相對于參考圖像R滿足雙邊平滑的特性,且其邊緣貼合參考圖像的邊緣,同時x還與輸入圖像y盡可能相似。

82f68054-8a88-11ed-bfe3-dac502259ad0.jpg

在圖像超分鐘應用FBS 另外一個有趣的應用是用戶引導的灰度圖像上色。這里也有低質量的輸入圖像y,即用戶指定的最終色彩圖像的骨架,原始的灰度圖像則作為參考圖像。再指定一個置信度圖c,我們一樣通過FBS求解輸出彩色圖像x,并且要求x自身相對參考圖像來說是雙邊平滑的,同時還在高置信度的區(qū)域和用戶輸入y盡可能一致。

83036dbe-8a88-11ed-bfe3-dac502259ad0.jpg

在圖像上色中應用FBS 看出來了吧?FBS算法可以用于優(yōu)化任意的輸入圖像,只要給出了一個參考圖像和一個目標圖像,它就會努力的讓輸出圖像既能夠按照參考圖像來雙邊平滑,又能夠非常接近目標圖像,所以這是一種非常通用的算法。那么在下一節(jié)中,我們從原理上理解一下FBS算法。

二. FBS算法的應用目標和原理

2.1 FBS算法要解決的問題

用數(shù)學公式更加嚴謹?shù)恼f明一下FBS吧。我們的目標是求解一個未知的圖像x,它本身相對于參考圖像R是雙邊平滑的(下式第1項),但在高置信度的區(qū)域又是和輸入的目標圖像t又是非常接近的。

830e121e-8a88-11ed-bfe3-dac502259ad0.jpg

FBS試圖優(yōu)化的全局代價函數(shù) 剛才給過的這張圖,清晰的展示了上面公式的4張圖。左上圖為目標圖像t,是由一個立體匹配算法得到的初始視差圖。而右上圖是輸出圖x,是經過FBS優(yōu)化得到的結果。左下圖是置信度圖c,右下圖則是輸入的參考圖像R,上面公式中的W就是由輸入?yún)⒖紙D像R計算而來的。

8322f422-8a88-11ed-bfe3-dac502259ad0.jpg

FBS應用到視差后處理優(yōu)化的示例

2.2 將問題轉換到雙邊空間

求解上述的最小化的問題非常復雜,于是我們沿用上一次講到的思想,將問題轉換到雙邊空間中去求解。不過,F(xiàn)BS和Fast Bilateral Stereo算法在雙邊空間中的表達式有關鍵的區(qū)別:

83391928-8a88-11ed-bfe3-dac502259ad0.jpg

在雙邊空間中比較FBS及Fast Bilateral-Space算法 可以看到,F(xiàn)BS在雙邊空間中的求解非常簡單,直接求解一個線性等式Ay=b即可,這是因為FBS不再需要承擔做立體匹配的職責,它只需要保證優(yōu)化后的視差圖滿足雙邊平滑以及與初始視差圖盡可能相似即可。 當在雙邊空間中求得了y,接下來就再用下面的公式把結果轉換為像素空間,就可以得到像素空間中的優(yōu)化后的視差圖了:

8348f6e0-8a88-11ed-bfe3-dac502259ad0.png

看起來是不是很簡單?所以上面公式中最關鍵的就是要找出公式(6)中A和b及c的表達式,作者論文中已經給出:

835f048a-8a88-11ed-bfe3-dac502259ad0.png

下面我們再解釋一下上面幾個公式中的各個變量:

836cdcd6-8a88-11ed-bfe3-dac502259ad0.jpg

公式變量解釋 當構造了上面提到的Ay = b這樣的等式之后,作者采用了一種叫做preconditioned conjugate gradient (PCG)的算法(帶先驗條件的共軛梯度算法)來優(yōu)化它,并且在這個過程中還采用了級聯(lián)金字塔的思想。這個過程略去不表,咱們只需要知道,采用了這種方式之后,整個問題的構建和優(yōu)化速度都比之前介紹的Fast Bilateral Stereo大大加快了:

83818604-8a88-11ed-bfe3-dac502259ad0.jpg

FBS的優(yōu)化速度大大提升 在應用到對初始視差圖進行優(yōu)化的過程中,作者考慮到FBS的輸出結果對于給定的置信度圖和初始視差圖比較敏感,還采用了一種迭代式的求解形式, 這個過程中的公式推導比較復雜,限于篇幅所限,這里我就略過了推導的過程。但作者給出了粗糙版的Python實現(xiàn),在OpenCV里面也有相應的實現(xiàn)。我會在我的知識星球中,針對這兩份代碼做進一步的解釋說明。

三. FBS的應用效果

讓我先展示一些作者論文中的FBS的效果吧。首先我們看看一個當時最優(yōu)秀的立體匹配算法MC-CNN的結果,這是第一代基于深度學習的立體匹配算法。下面是Middle Burry立體匹配數(shù)據(jù)集中的一幅圖,從下圖中看來,它在很多邊緣細節(jié)上還是出現(xiàn)了錯誤和瑕疵:

839f1264-8a88-11ed-bfe3-dac502259ad0.jpg

MC-CNN算法結果 現(xiàn)在來看看經過FBS處理優(yōu)化后的結果,我們看到從視覺上視差圖結果明顯好了一個檔次,MAE和RMSE也有所降低,雖然bad 1%這個指標略有上漲。

83afa50c-8a88-11ed-bfe3-dac502259ad0.jpg

用FBS優(yōu)化MC-CNN算法結果大大減少了錯誤 下面是另外一張,很明顯MC-CNN出現(xiàn)了很多瑕疵,尤其是近距離處出現(xiàn)很多匹配錯誤

83cbc156-8a88-11ed-bfe3-dac502259ad0.jpg

下面是經過FBS優(yōu)化后的結果,很明顯視覺效果好了不少,MAE和RMSE也少了很多!

83dca296-8a88-11ed-bfe3-dac502259ad0.jpg

用FBS優(yōu)化MC-CNN算法結果大大減少了錯誤

四. 可導性與深度學習

作者還花了不少篇幅來講解將FBS作為一個“層”應用到深度學習的過程中,這里我也提一提吧。以語義分割為例,我們設想中將FBS作為網絡的一個層加入到網絡的輸出部分,如下圖所示,其目的是優(yōu)化網絡輸出的分割掩模:

83f01204-8a88-11ed-bfe3-dac502259ad0.jpg

現(xiàn)在我們來看看現(xiàn)在比較常見的卷積神經網絡優(yōu)化損失函數(shù)的過程,下面是這個過程的圖示:

84015a82-8a88-11ed-bfe3-dac502259ad0.jpg

深度學習用于優(yōu)化復雜的目標函數(shù) 直接優(yōu)化上述函數(shù)是很困難的,所以實際中一般會采用小批量隨機梯度下降法來求解

8417acce-8a88-11ed-bfe3-dac502259ad0.jpg

梯度下降法要求損失函數(shù)可導 所以這里很關鍵的就是損失函數(shù)要能夠對各個待優(yōu)化參數(shù)求偏導數(shù),要在反向傳播的過程中可導。如果我們把FBS作為網絡的一個層,應用到網絡構建的過程中,也會要求它可導。

842f9f50-8a88-11ed-bfe3-dac502259ad0.jpg

在反向傳播中要求FBS可導 在FBS之前有很多全局能量優(yōu)化的算法,都很難做到這一點。幸運的是,作者證明了FBS是可以用于反向傳播的,我們把FBS看做下面這樣的函數(shù)

843f75b0-8a88-11ed-bfe3-dac502259ad0.png

那么反向傳播需要求解它對于輸入的兩幅圖像的偏導數(shù):

844b809e-8a88-11ed-bfe3-dac502259ad0.png

作者在論文中給出了兩個偏導數(shù)的公式:

845f7c48-8a88-11ed-bfe3-dac502259ad0.png

作者給了一個例子,來說明引入了FBS到網絡中的好處,首先是用Deeplab進行分割后的粗糙結果:

84759f32-8a88-11ed-bfe3-dac502259ad0.jpg

Deeplab語義分割結果 現(xiàn)在引入一個復雜的后處理算法DenseCRF, 可以得到下面的結果

84978f20-8a88-11ed-bfe3-dac502259ad0.jpg

DenseCRF優(yōu)化Deep Lab算法結果的展示 如果我們將DenseCRF替換為FBS加入到網絡中,可以看到效果相似,但速度是11倍快!

84a5d71a-8a88-11ed-bfe3-dac502259ad0.jpg

FBS優(yōu)化Deep Lab算法結果的展示

五. 總結

今天我為你介紹了Jon Barron的經典算法Fast Bilateral Solver,可以說這是我最喜歡的算法之一。其中包含了很多深邃的思想。 首先是對很多問題中輸出圖像特性的敏銳觀察,并把這種觀察表達為了優(yōu)美的數(shù)學公式。這種思想,和我之前在文章50. 從暗通道先驗去霧到海底圖像修復-三維重建輔助計算攝影中介紹的何凱明的“利用暗通道先驗去霧”有異曲同工之妙。

84c189e2-8a88-11ed-bfe3-dac502259ad0.jpg

輸出圖像的兩大特性 然后是作者將上述復雜的公式,轉換到了雙邊空間中,降低問題規(guī)模,用于快速求解,而在今天所說的FBS算法中,作者又將這種思想進行了更深層次的應用。

82642358-8a88-11ed-bfe3-dac502259ad0.jpg

問題轉換求解空間 在求解問題的過程中,作者又高效的利用了級聯(lián)金字塔形式,并采用了一種特殊的共軛梯度法來求解,使得求解過程大大加速,并得到了更好的效果。講到這里不得不說作者的數(shù)學功底超級扎實,如果你看原文及作者的論文附件,一定會對文章中問題建立和問題優(yōu)化的細致分析過程擊節(jié)而嘆!當然,讀懂這些分析過程還是很燒腦的,所以我準備在我的知識星球中仔細的對應著作者的代碼進行分析和注解,感興趣的朋友可以加我“計算攝影學”公眾號,進而了解星球的加入方法。 還有一點值得提的是, FBS在傳統(tǒng)算法和深度學習算法中都可應用,可以說是連接過去和現(xiàn)在的橋梁,所以后面很多人寫文章來描述如何將Fast Bilateral Solver的思想應用到深度學習算法中,感興趣的話你可以搜索一下。

842f9f50-8a88-11ed-bfe3-dac502259ad0.jpg

反向傳播示例 不過,F(xiàn)BS也并非沒有缺陷。它最大的問題也就在于雙邊平滑權重是與輸入?yún)⒖紙D像高度相關上——這使得其最終效果很容易受到輸入?yún)⒖紙D像的影響,很容易在結果中引入輸入?yún)⒖紙D像本身的紋理。下圖中左下角是SGBM的結果,右下角是FBS處理后的結果。我們可以看到頭發(fā)部分的視差圖很明顯引入了原圖中美女頭發(fā)部分的紋理特征,這并非我們想要的結果。處理這樣的問題,需要我們在應用FBS的過程中,仔細的調整各個參數(shù)和輸入的置信度圖,并且選擇性的應用FBS在部分區(qū)域上,而不是一股腦用于全圖的所有像素上。

84ecf3f2-8a88-11ed-bfe3-dac502259ad0.jpg

FBS容易引入?yún)⒖紙D像的紋理信息 總的來說,F(xiàn)BS是一種非常經典和優(yōu)秀的通用圖像處理算法,當它應用到立體匹配的視差后處理時,能夠起到“化腐朽為神奇”的功效,非常值得學習!現(xiàn)在看看我們的進度吧,我們終于完成了經典視差優(yōu)化算法的學習,即將邁入立體匹配的現(xiàn)代算法——基于深度學習的立體匹配算法部分,驚不驚喜,期不期待 就讓我們拭目以待吧!

85046ece-8a88-11ed-bfe3-dac502259ad0.jpg

我們當前的進度

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4612

    瀏覽量

    92910
  • 函數(shù)
    +關注

    關注

    3

    文章

    4331

    瀏覽量

    62633

原文標題:立體匹配:經典算法Fast Bilateral Solver

文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Celsius EC Solver:對電子系統(tǒng)散熱性能進行準確快速分析

    Cadence Celsius EC Solver 是一款電子產品散熱仿真軟件,用于對電子系統(tǒng)散熱性能進行準確快速的分析。借助 Celsius EC Solver,設計人員能夠在設計周期的早期階段
    的頭像 發(fā)表于 12-16 18:11 ?220次閱讀
    Celsius EC <b class='flag-5'>Solver</b>:對電子系統(tǒng)散熱性能進行準確快速分析

    手寫圖像模板匹配算法在OpenCV中的實現(xiàn)

    OpenCV中的模板匹配是支持基于NCC相似度查找的,但是不是很好用,一個主要的原因是查找最大閾值,只能匹配一個,自己比對閾值,又導致無法正確設定閾值范圍,所以問題很多。于是我重新寫了純Python版本的NCC圖像模板匹配的代碼
    的頭像 發(fā)表于 11-11 10:12 ?247次閱讀
    手寫圖像模板<b class='flag-5'>匹配</b><b class='flag-5'>算法</b>在OpenCV中的實現(xiàn)

    使用語義線索增強局部特征匹配

    視覺匹配是關鍵計算機視覺任務中的關鍵步驟,包括攝像機定位、圖像配準和運動結構。目前最有效的匹配關鍵點的技術包括使用經過學習的稀疏或密集匹配器,這需要成對的圖像。這些神經網絡對兩幅圖像的特征有很好的總體理解,但它們經常難以
    的頭像 發(fā)表于 10-28 09:57 ?241次閱讀
    使用語義線索增強局部特征<b class='flag-5'>匹配</b>

    天線阻抗測量和匹配

    電子發(fā)燒友網站提供《天線阻抗測量和匹配.pdf》資料免費下載
    發(fā)表于 09-26 11:08 ?0次下載
    天線阻抗測量和<b class='flag-5'>匹配</b>

    system_adc_read_fast為什么只能采集255個樣本?

    system_adc_read_fast僅采集 255 個樣本 當樣本數(shù)量增加時,函數(shù)凍結,看門狗復位芯片。 NONOS 2.0
    發(fā)表于 07-18 08:31

    電路的阻抗如何匹配

    電路的阻抗匹配是指調整電路組件(包括源和負載)之間的阻抗,使電源能盡可能多地傳遞能量,而不是產生反射。當源、傳輸線以及負載的阻抗都相等時,可以達到最佳的阻抗匹配,從而最大限度地減少信號的反射和損耗
    的頭像 發(fā)表于 06-28 08:29 ?2247次閱讀
    電路的阻抗如何<b class='flag-5'>匹配</b>

    機器學習的經典算法與應用

    關于數(shù)據(jù)機器學習就是喂入算法和數(shù)據(jù),讓算法從數(shù)據(jù)中尋找一種相應的關系。Iris鳶尾花數(shù)據(jù)集是一個經典數(shù)據(jù)集,在統(tǒng)計學習和機器學習領域都經常被用作示例。數(shù)據(jù)集內包含3類共150條記錄,每類各50個數(shù)
    的頭像 發(fā)表于 06-27 08:27 ?1664次閱讀
    機器學習的<b class='flag-5'>經典</b><b class='flag-5'>算法</b>與應用

    求助,為什么ble_mesh_fast_prov_server和ble_mesh_fast_prov_client運行之后沒能連接上呢?

    ble_mesh_fast_prov_server和ble_mesh_fast_prov_client沒有能夠自動連接,二者的Log如下: ble_mesh_fast_prov_client的Log
    發(fā)表于 06-26 07:32

    ble_mesh_fast_prov_client在配網時不能支持PB-GATT嗎?

    在ble_mesh_fast_prov_server的make menuconfig中選擇了Provisioning support using GATT (PB-GATT) 但是在
    發(fā)表于 06-26 06:08

    GPIO_MODE_OUT_OD_LOW_FAST和GPIO_MODE_OUT_OD_HIZ_FAST這兩個是什么區(qū)別呢?

    GPIO_MODE_OUT_OD_LOW_FAST GPIO_MODE_OUT_OD_HIZ_FAST這兩個是什么區(qū)別呢?都是漏極開路。
    發(fā)表于 05-16 07:10

    立體聲放大器電路圖分享

    立體聲放大器是一種音頻放大設備,用于放大立體聲音頻信號并驅動立體聲揚聲器系統(tǒng),以產生左右聲道的音頻輸出。立體聲放大器通常具有兩個獨立的放大通道,分別對應左右聲道,以確保音頻信號的相位和
    的頭像 發(fā)表于 02-06 14:32 ?6020次閱讀
    <b class='flag-5'>立體</b>聲放大器電路圖分享

    verilog的135個經典實例

    verilog的135個經典實例
    發(fā)表于 02-02 10:17 ?14次下載

    立體聲解調器電路圖分享

    立體聲解調器是一種電子設備,用于將立體聲音頻信號進行解碼,以便在音響系統(tǒng)中播放出立體聲效果。它由接收機、調頻檢波器、立體聲解調器(MPX)等部分組成。
    的頭像 發(fā)表于 01-16 17:28 ?8802次閱讀
    <b class='flag-5'>立體</b>聲解調器電路圖分享

    什么是匹配濾波器?如何理解匹配濾波器?

    [導讀]為增進大家對匹配濾波器的認識,本文將對匹配濾波器、匹配濾波器的詳細理解予以介紹。 匹配濾?波器作為濾波器的一種,在信號處理系統(tǒng)中發(fā)揮著重要作用。為增進大家對
    的頭像 發(fā)表于 01-12 08:39 ?1692次閱讀

    為什么要阻抗匹配?怎么進行阻抗匹配?

    )。 其中電抗又包括容抗和感抗,由電容引起的電流阻礙稱為容抗,由電感引起的電流阻礙稱為感抗。 阻抗匹配的理想模型 射頻工程師大都遇到過匹配阻抗的問題,通俗的講,阻抗匹配的目的是確保能實現(xiàn)信號或能量從“信號源”到“負載”的有效傳送
    發(fā)表于 01-02 16:59 ?2727次閱讀
    為什么要阻抗<b class='flag-5'>匹配</b>?怎么進行阻抗<b class='flag-5'>匹配</b>?