立体视觉
嘗試用OpenCV來實現立體視覺也有一段時間了,主要的參考資料就是Learning OpenCV十一、十二章和OpenCV論壇上一些前輩的討論。過程中磕磕碰碰,走了不少彎路,終于在前不久解決了最頭大的問題,把整個標定、校準、匹配的流程調試成功。(雖然還有一些問題至今尚未搞清)
在這里寫這篇文章,第一方面是給自己一個總結,第二方面是感覺OpenCV立體視覺方面的資料還是相當零散和不完整,新手入門需要花很長時間才能摸索出來,第三方面,也是自己在過程中有些問題仍舊迷迷糊糊,希望可以拋磚引玉。
?
1.?攝像頭
我用的攝像頭是淘寶上買的三維攝像頭,兩個USB Camera加一個可調節的支架。實物照片如下
1.1 三維攝像頭實物圖
?
?
雙USB攝像頭的OpenCV驅動可以參考以下鏈接
http://www.opencv.org.cn/index.php/使用DirectShow采集圖像
將上面代碼復制到自己的工程之后還需要對工程或者編譯環境做一下設置
?
VC6下的詳盡設置可以見代碼的注釋(修改工程的屬性)
VS2008中的設置也可以參照代碼注釋中VC++2005的設置(修改編譯環境)
?
?
2. 標定
由于OpenCV中cvStereoCalibrate總是會得到很夸張的結果(見下文5.1問題描述),所以最后還是決定用Bouguet的Matlab標定工具箱立體標定,再將標定的結果讀入OpenCV,來進行后續圖像校準和匹配。
Matlab標定工具箱的參考鏈接如下:
http://www.vision.caltech.edu/bouguetj/calib_doc/
上面有詳細的使用步驟,用起來相當的方便。
?
以下是我個人用Matlab工具箱進行立體標定的步驟,供參考,如果需要更詳細步驟的話還是參照上面的鏈接
?
?
把Matlab工具箱的文件copy到對應目錄下,把所要標定的棋盤圖也放到.m文件所在的目錄下,然后在Matlab命令行窗口中打入calib_gui,選擇Standard之后便出現以下窗口
2.1. calilb_gui面板
?
我們先對右攝像頭的標定,所以先把從右攝像頭上采集到的棋盤圖復制到工具箱目錄下。
點擊Image names,?命令行窗口會提示你輸入圖片的basename以及圖片的格式(比如你圖片文件名是right1, right2, …, right10,basename就是right),然后Matlab會自動幫你讀入這些圖片,如下圖所示,可以看到,讀入了10幅右攝像頭的棋盤圖。
?
采集棋盤圖的時候要注意,盡量讓棋盤占據盡可能多的畫面,這樣可以得到更多有關攝像頭畸變方面的信息
?
2.2. 圖像basename讀入
?
2.3. 讀入的棋盤圖
?
?
?
?
然后再回到主控制界面,點擊Extract grid corners,提取每幅圖的角點
2.4. calib_gui面板
?
?
?
點擊完后,命令行會出現如下提示,主要是讓你輸入棋盤角點搜索窗口的大小。窗口定的大一點的話提取角點會比較方便點(即便點得偏離了也能找到),但也要注意不能大過一個方格的大小。剩下的兩個選項,只要回車選用默認設置就可以了
?
2.5. 選擇窗口大小
?
?
然后就開始了角點的提取工作,按一定順序分別提取棋盤的最邊上的角點,程序會自動幫你找到所有對應的角點
2.6. 提取角點
?
2.7. 提取角點2
?
?
?
在提取第一幅圖的時候命令行窗口可能會提示你輸入方格大小,這里輸入你方格的實際大小就行,比如我方格是27mm,就輸入27。這步事實上相當關鍵,它定義了空間的尺度,如果要對物體進行測量的話,這步是必須的。
?
按相同的方法提取完10幅圖后,點擊Calibration,開始攝像頭標定
?
?
2.8. calib_gui面板
?
?
經過多次迭代后,程序會最終得到攝像頭的內外參數,如下圖所示(圖中符號由于字體關系沒有完全顯示,中間的問號是表示誤差的加減號)
?
2.9. Calibration迭代過程及結果
?
?
可以通過面板上的Show Extrinsic查看一下標定結果,可以驗證一下標定外參數的結果
2.10. 外部參數圖示
?
?
?
驗證標定結果無誤之后,就點擊面板上的Save按鈕,程序會把標定結果放在一個叫Calib_Result.mat中,為了方便后續立體標定,把這個文件名改為Calib_Result_right.mat。
?
左攝像頭標定的方法與右攝像頭相同,生成的Calib_Result.mat之后,將其改名為Calib_Result_left.mat就可以了
?
左右攝像頭都標定完成之后,就可以開始立體標定了。
?
?
在Matlab命令行中鍵入stereo_gui啟動立體標定面板,如下圖所示
2.11. stereo_gui面板
?
?
點擊Load left and right calibration files并在命令行中選擇默認的文件名(Calib_Result_left.mat和Calib_Result_right.mat)之后就可以開始Run stereo calibration了,run之后的結果如下圖所示,左右攝像頭的參數都做了修正,并且也求出了兩個攝像頭之間的旋轉和平移關系向量(om和T)
?
2.12. 立體標定結果
?
?
在面板上點擊Show Extrinsics of stereo rig,可以看到如下圖所示的雙攝像頭關系圖,可以看到,兩個攝像頭基本是前向平行的
2.13. 雙攝像頭與定標棋盤間的位置關系
?
?
得到了立體標定參數之后,就可以把參數放入xml文件,然后用cvLoad讀入OpenCV了。具體的方法可以參照Learning OpenCV第11章的例子,上面就是用cvSave保存標定結果,然后再用cvLoad把之前的標定結果讀入矩陣的
2.14. xml文件示例
?
?
這里需要注意的是Matlab標定結果中的om向量,這個向量是旋轉矩陣通過Rodrigues變換之后得出的結果,如果要在cvStereoRectify中使用的話,需要首先將這個向量用cvRodrigues轉換成旋轉矩陣。關于Rodrigues變換,Learning OpenCV的第11章也有說明。
?
2.15. 旋轉矩陣的Rodrigues形式表示
?
?
?
?
?
?
3. 立體校準和匹配
有了標定參數,校準的過程就很簡單了。
我使用的是OpenCV中的cvStereoRectify,得出校準參數之后用cvRemap來校準輸入的左右圖像。這部分的代碼參考的是Learning OpenCV?十二章的例子。
?
校準之后,就可以立體匹配了。立體匹配OpenCV里面有兩種方法,一種是Block Matching,一種是Graph Cut。Block Matching用的是SAD方法,速度比較快,但效果一般。Graph Cut可以參考Kolmogrov03的那篇博士論文,效果不錯,但是運行速度實在是慢到不能忍。所以還是選擇BM。
?
以下是我用BM進行立體匹配的參數設置
?
[cpp]?view plaincopy?
其中minDisparity這個參數我設置為0是由于我的兩個攝像頭是前向平行放置,相同的物體在左圖中一定比在右圖中偏右,如下圖3.1所示。所以沒有必要設置回搜的參數。
如果為了追求更大的雙目重合區域而將兩個攝像頭向內偏轉的話,這個參數是需要考慮的。
?
3.1. 校正后的左右視圖
?
?
另外需要提的參數是uniquenessRatio,實驗下來,我感覺這個參數對于最后的匹配結果是有很大的影響。uniquenessRatio主要可以防止誤匹配,其主要作用從下面三幅圖的disparity效果比對就可以看出。在立體匹配中,我們寧愿區域無法匹配,也不要誤匹配。如果有誤匹配的話,碰到障礙檢測這種應用,就會很麻煩。
?
3.2. UniquenessRatio為0時的匹配圖,可以看到大片的誤匹配區域
?
3.3. UniquenessRatio為10時的disparity map, 可以看到誤匹配被大量減少了, 但還是有噪點
?
3.4. UniquenessRatio為20時的disparity map, 可以看到誤匹配基本被去除了, 點云干凈了很多
?
?
?
關于cvFindStereoCorrespondenceBM這個函數的源代碼,曾經做過比較詳細的研究,過一段時間也會把之前寫的代碼注釋整理一下,發篇博文。
?
?
?
?
4.?實際距離的測量
在用cvFindStereoCorrespondenceBM得出disparity map之后,還需要通過cvReprojectImageTo3D這個函數將單通道Disparity Map轉換成三通道的實際坐標矩陣。
具體的數學原理可以參考下面這個公式(from chenyusiyuan?http://blog.csdn.net/chenyusiyuan/archive/2009/12/25/5072597.aspx,實際深度的一些問題這篇博文中也有提到)
4.1 距離轉換公式
?
?
但是在實際操作過程中,用cvReprojectImageTo3D得到的數據并未如實際所想,生成深度矩陣所定義的世界坐標系我就一直沒弄清楚。這在下面的例子中會詳細說明,希望這方面的專家能幫忙解答一下:
?
圖4.2是測量時的實際場景圖,場景中主要測量的三個物體就是最前面的利樂包裝盒、中間的紙杯、和最遠的塑料瓶。
?
?
4.2. 實際場景中三個待測物體的位置
?
?
圖4.3是校準后的左右圖和匹配出來的disparity map,disparity窗口中是實際的點云,object窗口是給disparity map加了個閾值之后得到的二值圖,主要是為了分割前景和背景。可以看到要測的三個物體基本被正確地分割出來了
?
4.3. 雙目攝像頭得到的disparity map
?
圖4.4是在disparity窗口中選取一個點后然后在實際坐標矩陣中得到的對應三維信息,在這里,我在三個物體的點云上各選一個點來代表一個物體實際的坐標信息。(這里通過鼠標獲取一點坐標信息的方法參考的是opencv sample里的watershed.cpp)
?
4.4. 對應點的三維坐標
?
?
在這里可以看到,(265, 156)也就是利樂包裝盒的坐標是(13, 12, -157),(137, 142)紙杯的坐標是(77, 30, -312),(95, 115)塑料瓶的坐標是(144, 63, -482)。
補充一下:為了方便顯示,所以視差圖出來之后進行了一個0-255的normalize,所以value值的前一個是normalize之后點的灰度值,后一個是normalize之前點的實際視差圖。
由cvFindStereoCorrespondenceBM算法的源代碼:
?
dptr[y*dstep] = (short)(((ndisp - mind - 1 + mindisp)*256 + (d != 0 ? (p-n)*128/d : 0) + 15) >> 4); 其中 ndisp是ndisp = state->numberOfDisparities; mindisp是mindisp = state->minDisparity; mind就是sad得出的視差 實際視差大約是(64-mind-1)*256=1163, 基本是對的, 后面一項修正值在通常情況下可以忽略?
?
?
目前我還是不是很清楚立體坐標系原點和尺度,但是從這三個點的z坐標可以大致看出這三個物體的距離差大概是1:2:3,基本與實際場景中物體的位置一致。因此,可以通過這種方法確定出物體的大致距離信息。
?
但是,如果就從攝像頭參數本身來測量距離的話,就不是很明白了,還求這方面的大牛解答。
?
5. ?一些問題
5.1 關于StereoCalibrate
OpenCV自帶的cvStereoCalibrate感覺不怎么好用,用這個函數求出的內參外參和旋轉平移矩陣進行校準,往往無法達到行對準,有時甚至會出現比較可怕的畸變。在看了piao的http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=4603帖子之后,也曾經嘗試過現用cvCalibrateCamera2單獨標定(左右各20幅圖),得出的結果基本和Matlab單獨標定的相同,然后再在cvStereoCalibrate中將參數設成CV_CALIB_USE_INTRINSIC_GUESS,用來細化內參數和畸變參數,結果得出的標定結果就又走樣了。
不知道有誰在這方面有過成功經驗的,可以出來分享一下。畢竟用Matlab工具箱還是麻煩了些。
?
?
5.2?Translation向量以及立體匹配得出的世界坐標系
Learning OpenCV中對于Translation和Rotation的圖示是這樣的
5.1. Learning OpenCV中的圖示
?
可是在實驗過程中發現,如果將Translation向量按尺度縮放,對于StereoRectify之后的左右視圖不會有變化,比如將T = [ -226.73817 ? -0.62302 ?8.93984 ] ,變成T = [ -22.673817 ? -0.062302 ?0.893984 ],在OpenCV中顯示的結果不會有任何變化。而且我如果修改其中的一個參量的話,左右視圖發生的變化也不是圖5.1中所示的那種變化(比如把x縮小,那么視圖發生的變化不是往x軸方向的平移)。
?
因此又回到了老問題,這里這些坐標的尺度究竟是什么?通過ReprojectTo3D那個函數得到的三維坐標又是以哪個點為原點,那三個方向為x,y,z軸的??
?
補充: 對這個問題的解答來自于和maxwellsdemon的討論
他的解釋如下:rotation是兩者的旋轉角度的關系,但是你要把它矯正平行,也是需要translation matrix的。你可以設想,兩個看似已經平行了的攝像頭,但是深度上放置的有差距,那么在矯正的時候會議translation matrix所對應的角度或者直線為基準,二者旋轉一個小角度,使得完全平行。
?
PPS:攝像頭網址 http://www.hytekautomation.com.cn/BNE001.aspx?productId=20
?
?//******************************************************************************************************************************************************************************************
101樓 HiGoodBoy 2016-03-17 17:51發表 [回復]
??? 博主,您好,我想請問一下只知道兩幅影像的投影矩陣的情況下,如何進行極線校正。采用stereorectify函數么?其中的cameramatrix,r,T參數都通過投影矩陣分解得到,但是畸變參數怎么得到呢?還望指點
100樓 wyx_123456 2016-01-18 20:35發表 [回復]
??? 博主,標定完以后怎么判斷標定結果好壞與否?
99樓 qq_33504386 2016-01-04 11:28發表 [回復]
??? 感謝樓主分享,學了不少,我們也是做三維掃描方案開發的,浙大系,在杭州。現公司努力壯大研發團隊,歡迎有興趣的三維重建算法、三維點云后處理人才加入:QQ 2088190951
98樓 Jefferyhxm 2015-12-02 07:06發表 [回復]
??? 博主,看了你的文章,我還是有些疑惑。在使用matlab toolbox計算得到左右相機的內參數和外參數以后,如何利用opencv來通過兩個圖像中的點坐標計算三維空間坐標呢?
97樓 _ALittleMore_ 2015-11-16 09:43發表 [回復]
??? 博主,最近一個項目中要用到立體匹配,要看懂cvFindStereoCorrespondenceBM這個的源碼,看到“關于cvFindStereoCorrespondenceBM這個函數的源代碼,曾經做過比較詳細的研究,過一段時間也會把之前寫的代碼注釋整理一下,發篇博文”心中一熱,去找博主的博文發現沒有,看評論才發現博主后來沒寫了,剛接觸圖像處理和opencv不久,看這函數的源碼實在是覺得看不懂,博主,該怎么去看呢?求助求助!
96樓 jiullll 2015-08-06 19:14發表 [回復]
??? mind就是sad得出的視差是指哪個數值呢
95樓 jiullll 2015-08-06 17:44發表 [回復]
??? 請問一下BM參數中的unitDisparity是什么呢
94樓 見賢思齊焉 2015-07-02 09:51發表 [回復]
??? 感謝樓主分享,但關于Matlab標定的結果,小弟有點看不明白,關于fc或cc參數,Matlab標定結果均有兩個值。
??? 即
??? fc=[827.16255 826.98935]?[8.66335 8.5461]
??? cc=[341.20701,218.32537]?[16.91587,12.22932]
??? 前者應該是焦距和像主點的像素坐標吧,那后者是什么呢?是物理坐標么?
??? 還望樓主解答~~謝謝了。
93樓 baidu_27903689 2015-05-24 20:34發表 [回復]
??? 講的很好 學了很多
92樓 Cason_wang 2015-04-03 14:57發表 [回復]
??? 你好,請教一下,我利用MATLAB toolbox分別標定兩個攝像頭,得到攝像頭的內外參數。那我現在要做的事是,直接利用兩個攝像頭采集,各采集一幀進行標定,然后做圖像拼接處理,這種思路對嗎?
91樓 放放風 2015-01-18 21:12發表 [回復]
??? lz,我想請教下為什么我用reprojectimageto3d得出來的坐標值很離譜呢?
??? Re: fox7xjw 2015-01-29 14:53發表 [回復]
??????? 回復u010119009:reprojectimageto3d出來的坐標要乘以16之后才有點靠譜。。
??????? Re: sunlightli1216 2015-08-28 21:36發表 [回復]
??????????? 回復fox7xjw: cvReprojectImageTo3D得到的是什么?怎么把Z坐標換算成距離呢?希望解答,不勝感激
90樓 fox7xjw 2015-01-17 15:20發表 [回復]
??? 我想請問下博主,matlab的stereo_gui里面有一個Rectify the calibration images,好像是把所有棋盤格圖像做了校正,之后又獲得了一組標定參數;
??? 我想問的是博主用到opencv中的參數是哪一組?還有這個Rectify the calibration images可不可以校正匹配要用的那一組真實場景圖像對呢?
??? 謝謝~
89樓 Joey_Tang 2014-10-14 16:16發表 [回復]
??? 博主的三維攝像頭在哪里買的啊?!能給出鏈接嗎?!
88樓 司令 2014-07-16 03:26發表 [回復]
??? 不錯啊,看著博主的這個博客搞定了!非常感謝!
??? 那個Matlab toolbox不是一般的強大,我需要的各種變換還有PnP都有相應的函數,太牛逼了!
87樓 shiter 2014-06-22 22:42發表 [回復]
??? 同樣想買攝像頭的飄過。。。
86樓 liuhyluguan 2014-05-12 12:35發表 [回復]
??? 博主你好,拜讀了你的文章使我受益匪淺,但有一點不明,“把參數放入xml文件”這一步如何實現,有具體的實現代碼或說明嗎,wzyryan@163.com,懇請指導
??? Re: yu88888jie 2015-12-22 20:48發表 [回復]
??????? 回復liuhyluguan:就是你找一個xml文件 按照他那個格式把數據填進去就可以了。 xml文件找不到的話可以下載opencv十二章的源碼,在里面把那個攝像頭矩陣什么的保存為xml就可以了 十一章的代碼里有說怎么保存。
??? Re: zlllou 2014-12-04 21:14發表 [回復]
??????? 回復liuhyluguan:請問你們解決了嗎
85樓 montgomerry 2014-05-04 22:20發表 [回復]
??? 看完你的博文受益良多,有個地方不太清楚我想問下,matlab里的reprojection error怎么看?看不懂,可以跟你說下嗎?
84樓 nangnima 2014-04-16 15:03發表 [回復]
??? 博主,不知道你還能不能看到我的評論,您提供的網址我找不到這種攝像頭啊,求博主給個鏈接,感激不盡。
83樓 Raby_GYL 2013-12-11 21:18發表 [回復]
??? 時間真快呀,三年過去了~我現在才學習到這部分~明年C++版本Learning OpenCV書籍出來了,不曉得對這部分有什么補充和改進~
82樓 qingqingzjin 2013-11-14 15:08發表 [回復]
??? 相當好的文章,核你受用。不過樓主,你提供的兩個鏈接:http://www.hytekautomation.com.cn/BNE001.aspx?productId=20
??? 和http://item.taobao.com/item.htm?id=4271696156
??? 都已經失效了,現在我很想做這個方面的研究,所以麻煩你提供下賣這個相機的聯系方式吧,非常的感謝!
??? 我的QQ:2768676042
??? email:qingqingzjin@126.com
??? 麻煩LZ!
??? Re: 諾坎普10號 2014-05-08 20:05發表 [回復]
??????? 回復haorenka2010:請問你買到攝像頭了嘛?
??????? Re: qingqingzjin 2014-08-11 20:25發表 [回復]
??????????? 回復liangtingfengyileng:沒有,不過我們買了一款國外的整套設備和軟件
81樓 CarsonGP 2013-08-30 15:46發表 [回復]
??? 樓主,我已經拜讀了你的文章好幾遍了,我的目前已經做好了單目的標定,用的是opencv,我想問下matlab標定的效果咋樣?
80樓 thunder60 2013-08-07 02:22發表 [回復]
??? 博主您好,請問matlab的標定結果怎么引用給openCV, xml文件的結構應該是怎樣的?或者,openCV所要用的cvMat結構的參數矩陣是怎樣的?
79樓 mihu_1234 2013-06-24 21:18發表 [回復]
??? 樓主你好 我用單目標定的時候 SHOW EXTRINSIC 里面的Z軸方向的距離 和我的實際距離有差距 相差100左右 能否給我解答一下 多謝!!
78樓 gugumumu2010 2013-04-22 11:17發表 [回復]
??? 你好,不知道您還會不會回復我,實在是卡住了,我用cvStereoRectify函數校正兩幅圖片(我的圖片是MFC單文檔對話框里的兩個圖片控件打開的),調試總是該函數的CV_CALIB_ZERO_DISPARITY參數出錯,請問使用這個函數的時候對圖片有要求嗎?這個函數好像沒用到圖片啊。我用的是vc6.0+opencv1.1。還有cvRemap這個函數的輸入輸出圖片格式是哪個,我的圖片控件打開后是IplImage類型的,要進行轉換嗎?期待您的回復哦。
??? Re: gugumumu2010 2013-04-22 16:30發表 [回復]
??????? 回復gugumumu2010:是不是vc6.0不能用opencv1.1呀。我要瘋了。
77樓 u010147016 2013-04-18 23:01發表 [回復]
??? USB Camera 兩個攝像頭的配件淘寶上沒看到呀,能給個鏈接么
76樓 chy258143826 2013-03-19 12:14發表 [回復]
??? 引用“mailang2008”的評論:
??? 您好,我按您的方法在校正的時候遇到一個問題,提示cvStereoRectify函數Formats o...
??? 我也碰到了相似的問題,同求解答
75樓 chy258143826 2013-03-19 11:50發表 [回復]
??? 前輩在嗎?????現在求助ing。。。。。。
74樓 just_rookie 2013-02-28 15:53發表 [回復]
??? 這個帖子對于菜鳥來說太具有指導性了!!
73樓 lsyyoyo 2013-02-22 21:02發表 [回復]
??? 樓主,雙目視覺的這個過程,包括在vc或者vs中對opencv的配置,這些個校正、BM等的匹配函數,在PC機上可以實現。如果在DSP中,請問樓主你知道這些函數、這個過程cvStereoRectify()校正,cvInitUndistortRectifyMap()和cvRemap()極線對準,cvFindStereoCorrespondenceBM()立體匹配還有嗎。還是就不一樣了?
72樓 chenruying 2013-01-07 12:43發表 [回復]
??? 你好,博主,
??? 我現在在一個機器人競賽小組中,擔任程序設計,但我的高度始終有問題。。
??? 可以向博主請教一下代碼么
??? 我的郵箱 784255948@qq.com 或 reneechen1993@gmail.com
??? O(∩_∩)O謝謝
71樓 s001133 2013-01-04 15:12發表 [回復]
??? 前輩..你能教一下OpenCV那邊的程序嗎?或者可以分享一下你的源代碼嗎?~~謝謝?
70樓 feifeiniao123 2012-12-24 15:42發表 [回復]
??? 前輩,您好,很好的文章,前輩能不能共享一下用cvStereoRectify 這個函數實現校正的代碼,我現在處于初學階段,懇請前輩不吝賜教……我的郵箱yffeng@yeah.net。多謝您了
??? Re: richmanrain 2012-12-26 11:56發表 [回復]
??????? 回復feifeiniao123:同求,到這步就不是很清楚了,感謝了,郵箱richmanrain@163.com
69樓 kaiseu 2012-12-14 18:50發表 [回復]
??? 在matlab下標定,用OPencv校準、匹配,remap得到的校正圖明顯不在一條水平線上(一上一下),matlab下標定的誤差顯示很小了,可能是什么原因啊?望指正!
68樓 yl2135315 2012-10-31 08:54發表 [回復]
??? 樓主你好,我目前也在弄這個三維測距,現在我能夠求出視差圖。不過用cvReprojectImageTo3D(CvArr * disparityImage, CvArr * result3DImage, CvMat * Q)。這個函數求出深度圖的時候,求出的結果很奇怪。result3DImage求出來的點。Z通道也就是深度很多點都是同一個結果。也就是景深一樣。并且大得驚人。還是個負數。不知道這些個原因樓主遇到過沒有。如果不介意希望可以發一份代碼到我郵箱。yanglong227@126.com。不盡感激。
??? Re: hx_ywzq 2015-11-19 14:49發表 [回復]
??????? 回復yl2135315:我也有這個問題請問你解決了嗎?
67樓 lsyyoyo 2012-10-25 15:02發表 [回復]
??? 嗯,博客里寫文時截的這些圖片,我咋粘不上去
66樓 hit2038 2012-10-17 21:02發表 [回復]
??? 樓主你好,我一直在研究你這篇博文,我想知道“在disparity窗口中選取一個點后然后在實際坐標矩陣中得到的對應三維信息”這一步是如何實現的?能把代碼給我發一下嗎,272310401@qq.com 謝謝。
65樓 chgm_456D 2012-10-05 15:36發表 [回復]
??? 博主,你好!非常有幸拜讀你的文章,非常好,感謝你的分享。現在我有個問題想問一下:
??? 圖4.2 和4.3中 的物體的 那個框框,是程序自己檢測的,還是手動畫上去的?非常感謝!
??? Re: scyscyao 2012-10-17 16:14發表 [回復]
??????? 回復chgm_456D:用opencv里面的一個函數畫上去的,好像是cvRectangle還是什么
64樓 allanpk716 2012-09-14 12:02發表 [回復]
??? 我只想問問,博主你之前買的三維攝像頭,我看淘寶沒得賣了,找了半天,不知道還有什么地方能找到得到不?不然就得買家用攝像頭然后弄個固定架了
??? Re: scyscyao 2012-10-17 16:19發表 [回復]
??????? 回復allanpk716:好像市面上雙目攝像頭不少吧 剛剛淘寶搜了下立體攝像頭 就有很多此類產品
??? Re: scyscyao 2012-10-17 16:17發表 [回復]
??????? 回復allanpk716:剛剛試了一下博文最后的鏈接 好像失效了。。。估計是那家公司倒閉了。。。是家小型創業公司
63樓 lsyyoyo 2012-08-26 09:53發表 [回復]
??? 想問一下博主,你的圖片是怎么顯示的。我寫博客的時候,截的這個圖片怎么沒法顯示呢?
??? Re: scyscyao 2012-10-17 16:19發表 [回復]
??????? 回復lsyyoyo:博客里的圖片?還是opencv顯示的圖片?
62樓 qqbb1987 2012-08-02 13:01發表 [回復]
??? “value值的前一個是normalize之后點的灰度值,后一個是normalize之前點的實際視差圖。”這話有問題吧。實際視差怎么y方向還有值,經過前向校正之后,只有x方向有視差值。還有這個y值是怎么得到的呢?想了好久沒搞清楚。。。
??? Re: scyscyao 2012-10-17 16:25發表 [回復]
??????? 回復qqbb1987:抱歉這里可能說不太清楚 這里的value是指point is xx,xx value is xx,xx的value 跟x y 好像沒有關系
61樓 qqbb1987 2012-08-02 12:51發表 [回復]
??? 這個帖子我每天看四五遍,有些問題一直沒搞清楚。希望能有志同道合一起探討。請假QQ:532382142。附言:csdn立體視覺。
60樓 sunanger_wang 2012-07-13 14:32發表 [回復]
??? 樓主太好了,謝謝
59樓 xfortius 2012-07-03 17:24發表 [回復]
??? 贊。。原來沒有仔細閱讀,現在飆淚中啊。。多多學習。。
58樓 cbib_cat 2012-03-31 17:08發表 [回復]
??? LZ你好!
??? “關于cvFindStereoCorrespondenceBM這個函數的源代碼,曾經做過比較詳細的研究,過一段時間也會把之前寫的代碼注釋整理一下,發篇博文”
??? 我們目前在看這個算法,想參考LZ的博文。
??? Re: scyscyao 2012-10-17 16:22發表 [回復]
??????? 回復cbib_cat:哎 當年畢設時候一腔熱情啊,后來沒寫。。。。不過那個算法寫得真的很高效,直接操控內存地址來增加效率。。。。而且 其實現在研究這個算法的意義不太大了吧。。。很多新算法又出來了。。比如graph cut相關的,研究這些算法比較有前景
57樓 lizhao0211 2012-02-27 16:22發表 [回復]
??? 您好 我也在做三維重建的項目,能把您得到點的三維信息的程序給我發下嗎?想參考一下。謝謝
??? wangshuo1987sure@gmai.com
??? Re: zlllou 2014-12-04 21:19發表 [回復]
??????? 回復lizhao0211:你們的標定怎么解決的,大神,幫幫忙,我們現在卡在標定這里了,得到結果了,但是不知道怎么把MATLAB的結果導入opencv,郵箱619258732@qq.com
56樓 shihaos 2012-02-25 23:45發表 [回復]
??? 博主,你好,急切想知道一些問題,我在利用cvReprojectImageTo3D函數輸出的矩陣數據讀出三個坐標時是較小的數值,2.09323等,物體實際距離約為35cm,想請問這是什么原因嗎?博主的三維坐標輸出后是否經過什么處理(乘以16外)
55樓 jixiangbeijing 2012-02-24 23:11發表 [回復]
??? 樓主您好,
??? “得到了立體標定參數之后,就可以把參數放入xml文件”這句話能不能講的再清楚點,我就是這個點過不去。萬分感謝!
??? Re: yu88888jie 2015-12-22 20:49發表 [回復]
??????? 回復jixiangbeijing:就是你找一個xml文件 按照他那個格式把數據填進去就可以了。 xml文件找不到的話可以下載opencv十二章的源碼,在里面把那個攝像頭矩陣什么的保存為xml就可以了 十一章的代碼里有說怎么保存。
??? Re: leizishenlan 2013-04-21 16:05發表 [回復]
??????? 回復jixiangbeijing:你好,你現在研究出來了“如何利用matlab攝像頭標定得出的參數轉化為xml文件”,自己也卡在了這里,特想你請教一下
??? Re: chy258143826 2013-03-19 12:00發表 [回復]
??????? 回復jixiangbeijing:您也是這個點過不去啊。/。。。。我也是啊。。半天得不到正確的xml文件。程序提醒數據結構不對,煩躁死了。
??????? Re: leizishenlan 2013-04-21 16:06發表 [回復]
??????????? 回復chy258143826:你好,你現在研究出來了“如何利用matlab攝像頭標定得出的參數轉化為xml文件”,自己也卡在了這里,特想你請教一下
??????????? Re: zlllou 2014-12-04 21:20發表 [回復]
??????????????? 回復leizishenlan:你們解決了嗎,我也卡在這里了
54樓 budong000ni 2012-02-12 12:54發表 [回復]
??? LZ的攝像頭是兩個單獨的拼起來的嗎?分享一下,想做畢業設計
53樓 冰水冰 2011-12-24 21:50發表 [回復]
??? 不知博主能否發我一份 shilylucky@qq.com,做學習用,謝謝
52樓 qi_lanfeng 2011-12-07 11:16發表 [回復]
??? 你好,請問樓主還在嗎?
??? 我有個問題想跟你請教一下關于cvStereoRectify里面的R和T參數的問題。我的內外參數都已經得到,于是我用R=R2*R1t
??? T=T2-R*T1,但是最后得到的結果卻不對,請問應該如何修改
??? 此外有的時候矯正之后不是行對準而是列對準,這個時候一般如何處理比較好?再次旋轉??
51樓 feira 2011-11-20 13:43發表 [回復]
??? 還有,你三維攝像頭從哪個店買的,給個地址吧
50樓 feira 2011-11-20 11:33發表 [回復]
??? 你好,openCV中,利用 cvFindFundametalMat 獲得基礎矩陣F,然后使用 cvComputeCorrespondEpiLines計算對應點在另一幅圖像中的對應極線。那么,調用cvFindFundametalMat時,輸入圖片是校正好的嗎?計算極線時,也輸入校正好的圖片嗎?還有,好多人說校正好的圖片,匹配時,只需要在同一行找就行了,那是不是就不用計算極線了?
49樓 gankeliang 2011-09-23 22:16發表 [回復]
??? 你好,請問按照你圖中標記出幾個物體,怎么實現的呢?還有就是我測的距離貌似不怎么準確?貌似是一半這樣子。cvReprojectImageTo3D得到的坐標不是很準。但是攝像頭的Tx的距離是相當準的。
48樓 gankeliang 2011-08-24 09:49發表 [回復]
??? 你好,謝謝你的文章,請問我也是做三維測距的,然后標定都完成了,得到攝像頭的一系列參數,然后再匹配的時候我采用的BM的方法,當我自己載入自己的標定參數的時候,匹配視差圖確什么都沒有,是一片漆黑的。拿別人的標定結果載入,發覺有那么點點視差。會不會是我的標定參數錯誤呢?一直有點不懂?請問能指導下我原因嗎?我的郵箱283299176@qq.com,期待您的指導,可以把你的建議發郵箱或則回復給我嘛?謝謝了。這個問題一直糾結好幾天了,還是解決不了。謝謝
47樓 huxingfu34072 2011-08-03 15:19發表 [回復]
??? 請問matlab工具箱里面測距文件stereo_triangulation.m中ccd圖像坐標到左相機坐標是怎么變換的,那代碼寫的好像跟說明文件不一樣啊,謝謝!!!
46樓 sunnywish 2011-07-15 10:15發表 [回復]
??? 用這個方法標定 不能得到本征矩陣和基礎矩陣啊
45樓 zjl1980 2011-06-13 13:33發表 [回復]
??? 沈程杳,您好,您能不能在百忙之中給我發一份BM算法的程序,我學習一下,前面的標定都會,可是到如何讀入xml文件,如何使用其進行立體匹配的這些后面具體的東西就不會了,謝謝您了。我的郵箱是feng198086@sina.com
44樓 gold2011 2011-05-28 17:23發表 [回復]
??? 不錯[e01]
43樓 gofi 2011-05-07 14:19發表 [回復]
??? 你好,我想問下,得到的MAT格式文件如何轉換為XML格式
42樓 wanghs2419 2011-05-05 22:50發表 [回復]
??? 樓主你好,讀了你的文章真的是受益匪淺. 我也正在做雙目視覺,剛剛開始,還有很多不懂的地方. 如果可以的話,樓主能不能發一份從opencv讀入xml文件開始,到雙目攝像頭得到disparity map的程序代碼. 僅供我學習使用.萬分感謝! wanghs2419@hotmail.com
??? 謝謝!
41樓 rongtian_ye 2011-04-20 14:03發表 [回復]
??? 請問,用cvReprojectImageTo3D得到的數據用什么方法可以輸出來看?[e07]
40樓 rongtian_ye 2011-04-01 11:11發表 [回復]
??? 看了樓主寫的,對用matlab得出的參數和后續的校準、匹配之間的銜接還不是很清楚,xml文件是自己創建的嗎?放在哪里?程序要作何修改呢?
??? Re: feng533 2011-04-11 10:08發表 [回復]
??????? 回復 rongtian_ye:您好,我也在做這方面的研究,遇到的問題和你一樣,不知道你解決沒呢?希望和你探討下,我的郵箱:jian329089094@163.com
??????? Re: rongtian_ye 2011-04-20 14:06發表 [回復]
??????????? 回復 feng533:我后來就沒有用matlab了,歡迎探討,lihao_scut@163.com
//****************************************************************************************************************************************************************************************
總結
- 上一篇: Tensorflow简单教程
- 下一篇: opencv 肤色