1. 程式人生 > >關於雙目立體視覺的一些總結(一)

關於雙目立體視覺的一些總結(一)

https://blog.csdn.net/u014629875/article/details/51227534由於專案和畢設的需要,最近在做一些立體視覺的東西,總算是把立體視覺建立起來了,中途查了很多相關資料,這裡做一個總結。1.簡介:雙目視覺是模擬人類視覺原理,使用計算機被動感知距離的方法。從兩個或者多個點觀察一個物體,獲取在不同視角下的影象,根據影象之間畫素的匹配關係,通過三角測量原理計算出畫素之間的偏移來獲取物體的三維資訊。得到了物體的景深資訊,就可以計算出物體與相機之間的實際距離,物體3維大小,兩點之間實際距離。2.建立立體視覺為了精確地求得某個點在三維空間裡的深度資訊,我們需要獲得的引數有焦距f、視差d、攝像頭中心距Tx; 為了獲得某個點的X座標和Y座標,還需要知道左右像平面的座標系與立體座標系中原點的偏移cx和cy。 因此我們需要進行下列三個步驟:相機標定,影象校正,立體匹配。相機標定標定目的:獲取相機的內參(焦距,影象中心,畸變係數等)和外參(R(旋轉)矩陣T(平移)矩陣) 相機標定需要採集標定資料,通常使用列印棋盤格的紙作為特製的標定參照物,攝像頭獲取該物體的影象,並由此計算攝像頭的內外引數。相機標定有兩種方法: 方法一:Bouguet的Matlab標定工具箱(http://www.vision.caltech.edu/bouguetj/calib_doc/);有比較詳細的介紹和使用方法,用起來還是比較方便的,只不過做完標定要繼續的話要把標定結果存入xml匯入OpenCV再進行。 方法二:OpenCV的cvStereoCalibrate;在《學習OpenCV》第11,12章有比較詳細的介紹。12章後有相關程式程式碼。雙目影象校正雙目校正是根據攝像頭定標後獲得的單目內參資料(焦距、成像原點、畸變係數)和雙目相對位置關係(旋轉矩陣和平移向量),分別對左右檢視進行消除畸變和行對準,使得左右檢視的成像原點座標一致、兩攝像頭光軸平行、左右成像平面共面、對極線行對齊。將左右檢視調整成完全平行對準的理想形式(如下圖)。 校正反映到影象上就是要把消除畸變後的兩幅影象嚴格地行對應,使得兩幅影象的對極線恰好在同一水平線上,這樣一幅影象上任意一點與其在另一幅影象上的對應點就必然具有相同的行號,只需在該行進行一維搜尋即可匹配到對應點。下圖來自於Stefano Mattoccia “Stereo vision: algorithms and applications”http://vision.deis.unibo.it/~smatt/Seminars/StereoVision.pdf (這個ppt對立體視覺做了一個很詳盡的講述,讀了可以對立體視覺方面有一個比較好的瞭解) 我在這部分用的是OpenCV中的cvStereoRectify,得出校準引數之後用cvRemap來校準輸入的左右影象。這裡要提一下cvRemap這個函式src與dst大小格式通道必須一致,所以在使用之前要先對左右影象做處理。立體匹配立體匹配主要是通過找出每對影象間的對應關係,根據三角測量原理,得到視差圖;在獲得了視差資訊後,根據投影模型很容易地可以得到原始影象的深度資訊和三維資訊。 立體匹配是建立立體視覺中最重要的一環,立體匹配的效果直接影響得到的三維資訊。 由於現在只是使用了OpenCV的BM方法和SGBM方法,並沒有做深入的瞭解,所以關於這方面後續會再寫篇部落格討論一下這方面的問題。 BM方法:CvStereoBMState *BMState = cvCreateStereoBMState();assert(BMState != 0);BMState->preFilterSize=41;BMState->preFilterCap=31;BMState->SADWindowSize=41;BMState->minDisparity=-64;BMState->numberOfDisparities=128;BMState->textureThreshold=10;BMState->uniquenessRatio=10;12345678910SGBM方法:cv::StereoSGBM sgbm;sgbm.preFilterCap = 63;int SADWindowSize=11;int cn = 1;sgbm.SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 3;sgbm.P1 = 4*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;sgbm.P2 = 32*cn*sgbm.SADWindowSize*sgbm.SADWindowSize;sgbm.minDisparity = 0;sgbm.numberOfDisparities = 32;sgbm.uniquenessRatio = 10;sgbm.speckleWindowSize = 100;sgbm.speckleRange = 32;sgbm.disp12MaxDiff = 1;12345678910111213立體匹配後得到視差圖後獲取三維資訊的方式(世界座標系是以左相機光心為原點,光軸為Z軸,基線為X軸的右手系) 這裡有一點要注意,立體匹配得出的視差結果是以16位符號數的形式的儲存的,出於精度需要,所有的視差在輸出時都擴大了16倍(2^4),因此,在實際求距離時,cvReprojectTo3D出來的X/W,Y/W,Z/W都要乘以16 (也就是W除以16),才能得到正確的三維座標資訊。 一個簡單的輸出某個畫素點三維資訊的例子:cvReprojectImageTo3D(disp,depth,&_Qtest);//_Qtest是雙目校正得到的Q矩陣Point p;p.x = 400;p.y = 300;Mat tempDepth = Mat(depth);cout << "in world coordinate: " << tempDepth.at<Vec3f>(p)*16 << endl;--------------------- 作者:Array03 來源:CSDN 原文:https://blog.csdn.net/u014629875/article/details/51227534 

posted on 2018-11-13 14:52 zmj 閱讀(5) 評論(0)  編輯 收藏 引用

相關推薦

關於雙目立體視覺一些總結

https://blog.csdn.net/u014629875/article/details/51227534由於專案和畢設的需要,最近在做一些立體視覺的東西,總算是把立體視覺建立起來了,中途查了很多相關資料,這裡做一個總結。1.簡介:雙目視覺是模擬人類視覺原理,使用計算機被動感知距離的方

初學JDBC的一些總結

1、關於JDBC的的個人理解:   JDBC(Java Data Base Connectivity,java 資料庫連線)是用於執行 SQL 語句的 JavaAPI,可以為多種關係型資料庫提供統一的訪問方式,它由一組用 Java 語言編寫的類和介面組成。JDBC 提供了一種基準,據此可以構建更高階的工具和

關於spark利用jar包跑job的一些總結

分別利用eclipse和IDEA打jar包 用eclipse打包: 用eclipse打包最終還是不能放在spark上用,如果是需要解決問題的,可以直接跳到IDEA部分,這裡只介紹一些eclipse的過程,以及最後的問題(如果有能指出問題所在的小夥伴,求指

對stm32記憶體理解,檢視以及面試題的一些總結

基礎知識儲備 1、keil中如何調用出map檔案,以及map檔案的作用 我是拿正點原子的標準工程來使用分析。 如何獲得map檔案, 雙擊工程名即可得到map檔案。 2、map檔案包含哪些東西 1.Section CrossReferences:模組、段(入口)

arcgis for android 100.2一些總結

中離線地圖格式:.shp:可編輯、查詢、刪除、更新的向量地圖格式。展示比較慢,可以搭配.tpk一起使用。MPK、TPK、GPK和GCPK分別對應地圖資料包、切片資料包、地理處理工具包以及地理編碼工具包。MPK、TPK、GPK、GCPK需要在ArcMap中製作生成。Map pa

關於雙目立體視覺一些總結

https://blog.csdn.net/u014629875/article/details/51340144上一篇只是對於雙目立體視覺做了一個簡單的介紹,這裡就我在做這個的時候碰到的一些問題做一個梳理。1.首先要糾正一下之前一個錯誤:cvRemap函式只接受灰度圖。其實這個函式要求src與dst大小格式

運維工作中經常用到的一些知識總結

Linux Docker MFS在日常運維工作中,會有一些知識使用頻率較高,以下為個人在工作中常用的一些操作,沒有做詳細的分類,排版比較淩亂。有需要的同學們可以參考,希望能有所幫助。 1、查看當前系統所以變量 sysctl -a 2、修改Centos7 網卡為eth install centos 7 按 ta

JVM調優總結-- 一些概念

資料型別     Java虛擬機器中,資料型別可以分為兩類:基本型別和引用型別。基本型別的變數儲存原始值,即:他代表的值就是數值本身;而引用型別的變數儲存引用值。“引用值”代表了某個物件的引用,而不是物件本身,物件本身存放在這個引用值所表示的地址的位置。 基本型別包括

雙目視覺演算法學習雙目定標

老闆新安排的任務,需要在FPGA上實現雙目演算法,所以最近開始學習這塊,雙目演算法主要分成3個部分:定標、校正、匹配。其實定標是最基礎的部分,為後面的程式提供初始資料,這一塊的資料主要參考了影象獲取與單目定標和攝像機標定和立體標定,本文主要是我在雙目定標的步驟以及我對此的理

linux 使用雙目相機問題總結:已放棄核心已轉儲

如果出現: *** Check failure stack trace: ***     @     0x7ff7320d9daa  (unknown)     @     0x7ff7320d9ce4  (unknown)     @     0x7ff7320d96e6

CNN視覺化技術總結--特徵圖視覺

導言:     在CV很多方向所謂改進模型,改進網路,都是在按照人的主觀思想在改進,常常在說CNN的本質是提取特徵,但並不知道它提取了什麼特徵,哪些區域對於識別真正起作用,也不知道網路是根據什麼得出了分類結果。      &nbs

python大法之二-一些基礎

計算機編程 python 獨立博客 hello 解釋器 個人獨立博客出處:http://www.xbman.cn/出處:http://www.xbman.cn/article/3Python是一種解釋性計算機編程語言。采用縮進式語法,寫起來的感覺有點像排了版的shell,這裏要註意寫pyt

java_web項目開發經驗總結

從數據 簡單 處理 開發 事務 傳輸 記錄 承載 基礎上   web項目就像一個動態的記事本,功能很強大,你最初的項目功能調研越給力,項目所能發揮的作用也就越給力。這是因為web網絡的強聯系性,大家都可以通過訪問到自己想要訪問的頁面,頁面裏既可以承載信息,也可以承載做事情的

文檔總結——文檔的概述

理解 需要 軟件需求 是否 研究 strong 開發項目 問題 項目開發 寫完文檔後,本來想寫一篇具體的文檔的總結的,後來看大家都寫的具體文檔總結,於是我就想:我還是寫一些跟大家不一樣的東西吧。 所以,我就說說我對各個文檔的宏觀理解吧。

salesforce零基礎學習七十二項目中的零碎知識點小總結

gin 不同 grant dmi ima -m ron 角色 com 項目終於告一段落,雖然比較苦逼,不過也學到了好多知識,總結一下,以後當作參考。 一.visualforce標簽中使用html相關的屬性使用 曾經看文檔沒有看得仔細,導致開發的時候走了一些彎路。還好得到

OpenGL在MFC中的使用總結——基本框架

palette 接受 white 要求 無效 結構 del 一次 是你 項目中要畫3D顯示的模型,於是要用到OpenGL,加上是在MFC中,並且是在MFC中的ActiveX中使用。再並且鑒於他們程序主框架的設定。常規的方法還不一定能實現。所以還是查過不少資料,在此一一總

操作系統基礎知識總結

一個 快速 會有 處理死鎖 b2c fcm 死鎖 空間 存儲系統 1. 進程和線程的區別 進程 進程,即正在運行的程序,程序從硬盤載入到內存就變成進程。進程是資源的擁有者,每個進程都擁有著自己的內存空間與多個線程。 線程 線程是指令的執行者,是計算機執行指令的基本單元,一個

react native 知識點總結

修改 ltp 組件 改變 set 覆蓋 sta 一個 個數 一、關於react native 版本的升級 參照文檔:http://reactnative.cn/docs/0.45/upgrading.html react-native -v

SEO總結

.com http 分享 com ima 技術 wid -1 ges SEO總結(一)

js基本語法總結

向上取整 取余 轉字符串 結果 lin ase 調試 錯誤 進行 1.js簡介 a)js是一種網頁腳本語言,使得瀏覽器可以與網頁互動。 js的一種基於對象和事件驅動,具有安全性能的腳本語言,腳本語言就是在客戶端的瀏覽器就可以互動響應處理程序的語言,而不需要服務器的處理和響應