如何用OpenCV製作一個低成本的立體相機

2021-02-20 小白學視覺

點擊上方「小白學視覺」,選擇加"星標"或「置頂

重磅乾貨,第一時間送達

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「。請按照格式備註,否則不予通過。添加成功後會根據研究方向邀請進入相關微信群。請勿在群內發送廣告,否則會請出群,謝謝理解~

相關焦點

  • OpenCV 4.5 發布!
    9.https://github.com/opencv/opencv/wiki/ChangeLog#version450在我愛計算機視覺公眾號後臺回復「opencv」,即可收到包含4.5版本的OpenCV各版本的下載。
  • OpenCV黑魔法之隱身衣 | 附源碼
    在這篇文章中,我們將學習如何使用OpenCV中的簡單計算機視覺技術創建我們自己的「隱形衣」。文末會分享 C++和python的代碼。哈利波特的隱身衣效果那是哈利·波特在試他的隱形衣!事實上,你可以用一種叫做顏色檢測和分割的圖像處理技術來創造這種神奇的體驗。
  • 如何製作立體卡片?
  • 經驗談 低成本電影的製作秘籍
    低成本電影並非某種類型化電影,在早期主要是有別於大製作大投入的商業電影的一種影像產品定位,及至當下,低成本電影又被引入到電影創製範疇,成為與獨立電影、藝術電影及電視電影、微電影、小眾電影、新視頻影像等概念相關聯的電影產品類別。對於低成本電影,最關鍵的問題是:在有限投資的前提下,如何保證低成本電影的創製品質?
  • 導演||低成本電影的製作秘籍
    低成本電影並非某種類型化電影,在早期主要是有別於大製作大投入的商業電影的一種影像產品定位,及至當下,低成本電影又被引入到電影創製範疇,成為與獨立電影
  • 如何低成本完成一個建築裝修項目
    因此自己的公司或者團隊準備一個專業採購是很有必要的,只有了解市場,分析市場,才能把握市場。今天從選材、效果、安裝來給大家分享如何低成本完成一個建築裝修項目。瀏覽器版本過低,暫不支持視頻播放一、如何低成本完成採購
  • 【賀卡微教學】如何製作立體卡片?
    ,立體卡片可以怎樣做?介紹簡單易操作的立體卡片製作方法,家長們可以手把手和孩子一起製作完成喔!入門級製作扇形、錐形完成簡易立體卡片的第一步也可試試另外一種同樣不需用太多剪刀的圖卡!先畫出一隻鳥,嘴巴剪開一條縫,折成錐形,卡片的嘴巴裡面先畫上小蟲子,將鳥兒粘在卡紙上……打開來看,哇!一個大驚奇等著你!
  • Python中如何利用Opencv打開視頻或圖像並用PyQt控制項顯示
    OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、Windows、Android和Mac OS作業系統上,使用起來十分方便,把它與PyQt結合起來,就可以順利的操作視頻、圖像了。具體安裝請自行百度,這裡介紹使用方法。
  • 使用OpenCv和Dlib進行打哈欠檢測
    OpenCV: OpenCV是一個用於計算機視覺的庫函數,最初是用c++編寫的。Dlib: Dlib是一個Python庫,包含了數據挖掘、數據結構、機器學習、圖像處理等工具。安裝OpenCv和Dlib庫OpenCv的安裝如下:pip install opencv-pythonDlib的安裝如下:pip install cmake
  • 專業立體聲話筒新兵:RODE Stereo VideoMic X
    ,但是只能在拍攝結束使用;也有人使用立體聲話筒,但專業的立體聲話筒價格不菲,都在萬元以上,成本很高。今天給大家介紹的是RODE的頂級立體聲話筒Stereo VideoMic X。VideoMic X的輸出有兩種方式,兩個MiniXLR,需要48V幻象供電支持,可接專業的錄音機或者攝像機;3.5小三芯平衡輸出可接相機或者錄音筆,這時要用9V電池供電。
  • 手把手:使用OpenCV進行面部合成— C++ / Python
    點擊視頻:一分鐘告訴你如何進行面部合成這篇教程將教大家如何用OpenCV做面部合成,把一張臉演變為另外一張臉。
  • 使用Python+OpenCV進行面部合成
    原文 http://www.learnopencv.com/face-morph-using-opencv-cpp-python/
  • 如何打造一個低成本、高顏值的草莓園?
    據小編分析人家的「低成本、高顏值」是源於以下幾個方面,今天把這個重大秘密分享給大家,明天咱也去建一個低成本、高顏值的草莓園,吸引大江南北、長城內外、五湖四海的兄弟姐們來參觀遊覽!草莓,如今一種司空見慣的水果,拜縣是如何通過對草莓價值的挖掘,並運用富有創意的手法實現草莓的價值升級呢?
  • opencv-python獲取圖像:面向對象與面向過程
    這裡需要注意以下,opencv讀取圖片默認通道為BGR的格式,當在其他UI用戶界面顯示圖像時注意轉換一下通道順序,例如BGR轉換成RGB:Image1=cv2.cvtColor(image, cv2.COLOR_BGR2RGB)下面讀取一張圖片並顯示
  • opencv教程-光流法
    opencv裡的光流法有兩種,稀疏光流法 和 稠密光流法。簡單理解的話光流就是一個向量,包含在一定時間間隔內x方向位置的變化、y方向位置的變化,所以其三個主要因素就是dx,dy,dt。prevPts:要匹配的點(比如拐點、角點),float主要輸出:nextPts:根據prevPts以及當前圖像計算的新點status:nextPts與prevPts是否匹配狀態,1為匹配,0為不匹配err:光流點匹配的錯誤信息2:稠密光流法 cv.calcOpticalFlowFarneback每個像素點都有一個光流向量
  • 零成本拍3D大片,景深相機App是如何被賦予魔力的
    3D拍照、3D特效、POSE相機、AR相機、人臉識別……一個個新鮮又獨特的功能一出,立馬get到了許多人,尤其是某些極客星人的興趣點。不僅如此,這款拍照APP還具有3D照片分享功能,想想在大家都在曬2D照片的時候,你突然扔了張3D照片到朋友圈,肯定一下子就「集萬千寵愛於一身」了!如此魔性的拍照APP是如何誕生的?是誰賦予了它這麼多「魔力」?
  • 如何製作簡單最漂亮的立體聖誕節賀卡 聖誕節圖片立體手工賀卡製作...
    由於聖誕樹獨特的構造,使得立體聖誕賀卡中,聖誕樹常常能夠成為主角而出現在聖誕賀卡裡。  方法/步驟  基本的材料和其他聖誕賀卡製作需要的材料是基本相似的。主要是卡紙,用來製作聖誕賀卡的外殼部分,同時還需要綠色的彩紙,畢竟我們製作的聖誕樹是綠色的,也許你有更好的想法。彩色筆是用來最終裝飾聖誕賀卡的,如果你實在沒有,就用筆自己隨便畫一些吧。鉛筆和白乳膠或者普通膠水,尺子。
  • 如何製作航拍VR全景?
    對於全景圖片攝影愛好者來說,航拍絕對算得上是一個大工程,航拍全景對於設備和技術的要求非常高,拍攝出來的照片具有地拍達不到的震撼效果,也成為了一些攝影愛好者的終極目標。那麼對於我們剛剛入門的小白來說,航拍全景拍攝教程,如何製作航拍全景?今天就給大家說一下!
  • 立體還是平面?自製立體視錯覺的簡單方法
    周末發現一個簡單製作立體視錯覺圖片的小方法,分享給大家。此處的製作目標是如下圖的效果:看起來比較像是立在桌面上的物體,但其實是一些列印出來、沿輪廓剪下的平面紙片。它們在特定的角度拍攝下來的樣子看起來和立體的物品很相似,這是因為從特定角度看,這些圖像和立體物品在相機上產生的投影恰好是一樣的。製作這種效果,最重要的步驟是把立體物品的照片進行適當的變形處理,讓它從特定角度恰好能看起來和立體物品有同樣的投影效果。
  • Cinemachine教程 | Unity中如何快速製作相機切換動畫?
    今天小新要給你分享的主題是:Unity中如何快速製作相機切換動畫?要想解決這個問題,在Cinemachine中是非常簡單的,就是使用Cinemachine Blend List Camera,使用這個最簡單也最快。