點擊上方「小白學視覺」,選擇加"星標"或「置頂」
重磅乾貨,第一時間送達
AR/VR的興起,讓我們喜歡上了3D電影和視頻,前提是你需要戴上一副3D眼鏡才能感受到3D效果。那麼,它是如何工作的?當屏幕只是平面時,我們如何體驗3D效果?其實,這些是通過一個叫立體相機的玩意兒來捕獲的。
本文,我們將學習如何DIY一個低成本的立體相機(
使用一對網絡攝像頭)以及如何使用OpenCV捕獲3D視頻。
一、製作立體相機的步驟立體相機安裝通常包含兩個相同的攝像頭,它們以固定的距離隔開。工業級標準立體相機使用一對相同的攝像頭。2.固定相機的剛性底座(木材,紙板,PVC泡沫板)當然,你也可以自由發揮,使用其它不同的組件製作立體相機。但基本要求是保持攝像機嚴格固定和平行。固定好相機並確保正確對齊後,我們完成了嗎?我們準備好生成視差圖和3D視頻了嗎?
二、立體相機標定和校正的重要性為了理解標定和校正的重要性,我們試著用剛DIY好的立體相機捕獲到的圖像生成一個沒有標定和校正過的視差圖。左圖是立體相機捕獲到的左右圖像;右圖是用沒有標定過的左右圖像生成的視差圖。我們觀察到,使用未校準的立體相機生成的視差圖非常嘈雜且不準確。為什麼會這樣?相應的關鍵點應具有相等的Y坐標,以簡化點對應搜索。在下圖中,當我們在幾個對應點之間繪製匹配線時,我們觀察到這些線不是完全水平的,還觀察到對應點的Y坐標也不相等。下圖顯示了一對具有點對應關係的立體圖像,以及使用這些圖像生成的視差圖。我們觀察到,與前一張相比,現在的視差圖噪聲更低。在這種情況下,相應的關鍵點具有相等的Y坐標。僅當相機平行時才可能出現這種情況。這是雙視圖幾何的特例,其中圖像是平行的,並且僅通過水平平移而相關。這是必不可少的,因為用於生成視差圖的方法僅搜索水平方向的點對關係。太棒了!我們需要做的就是對齊攝像機並使它們完全平行。那麼,我們是否會根據反覆試驗手動調整攝像機?好吧,作為一項有趣的活動,您可以嘗試一下!劇透警報!手動調整相機需要很長時間才能獲得清晰的視差圖。此外,每當設置受到幹擾且攝像機移位時,我們都必須重複此過程。這很耗時,也不是理想的解決方案。為了代替手動調整相機,我們考慮用軟體的方法。使用一種稱為「立體圖像校正」的方法。[1] 下圖說明了立體校正的過程。這個想法是在平行於透過光學中心的線的公共平面上重新投影兩個圖像。這樣可以確保相應的點具有相同的Y坐標,並且僅通過水平平移進行關聯。
三、立體相機標定和校正的步驟1.使用相機校準手冊中介紹的標準OpenCV校準方法校準單個攝像機;2.確定在立體相機中使用的兩個相機之間的轉換關係。3.使用前面步驟中獲得的參數和stereoCalibrate方法,我們確定應用於兩個圖像的變換以進行立體校正。4.最後,使用initUndistortRectifyMap方法獲得查找未失真和校正後的立體圖像對所需的映射。5.將此映射應用於原始圖像以獲得校正的未失真的立體圖像對。在執行立體標定之前,我們會分別對兩個相機進行標定。但是,如果stereoCalibrate()方法可以對兩個相機中的每一個進行校準,為什麼還要分別標定相機呢?由於要計算的參數很多(較大的參數空間),並且在諸如角點檢測和將點近似為整數之類的步驟中累積了誤差。這增加了迭代方法偏離正確解的風險。因此,我們分別計算攝像機參數,然後使用stereoCalibrate()方法僅用於獲取立體相機對間的位置關係,本質矩陣和基礎矩陣。但是該算法如何知道要跳過單相機的標定?為此,我們設置標誌CALIBFIXINTRINSIC並將其傳遞給該方法。校準相機後,我們將它們傳遞給stereoCalibrate()方法並設置CALIBFIXINTRINSIC標誌。我們還傳遞兩個圖像中捕獲的3D點和相應的2D像素坐標。該方法計算相機間的平移旋轉矩陣以及基礎矩陣和本質矩陣。使用相機的內外參,我們現在可以運用立體校正了。立體校正運用旋轉使兩個相機圖像面都在同一平面上,同時stereoRectify方法還能返回新坐標空間中的投影矩陣。由於我們假設相機是固定的,無需再次計算變換。因此,我們計算的通過映射將立體圖像對轉換為未失真的校正的立體圖像對,並將其保存以備將進一步使用。[1] C. Loop and Z. Zhang. Computing Rectifying Homographies for Stereo Vision. IEEE Conf. Computer Vision and Pattern Recognition, 1999.
下載1:OpenCV-Contrib擴展模塊中文版教程在「
小白學視覺」公眾號後臺回覆:
擴展模塊中文教程,即可下載全網第一份OpenCV擴展模塊教程中文版,涵蓋
擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超解析度處理等二十多章內容。在「
小白學視覺」公眾號後臺回覆:
Python視覺實戰項目31講,即可下載包括
圖像分割、口罩檢測、車道線檢測、車輛計數、添加眼線、車牌識別、字符識別、情緒檢測、文本內容提取、面部識別等31個視覺實戰項目,助力快速學校計算機視覺。在「
小白學視覺」公眾號後臺回覆:
OpenCV實戰項目20講,即可下載含有
20個基於
OpenCV實現20個
實戰項目,實現OpenCV學習進階。
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫學影像、GAN、算法競賽等微信群(以後會逐漸細分),請掃描下面微信號加群,備註:」暱稱+學校/公司+研究方向「,例如:」張三 + 上海交大 + 視覺SLAM「。請按照格式備註,否則不予通過。添加成功後會根據研究方向邀請進入相關微信群。請勿在群內發送廣告,否則會請出群,謝謝理解~