張正友攝像機標定的研究(MATLAB+OpenCV)


張正友 本科浙大,本來以為是中國人論文是中文呢,哎

張正友的主頁: http://research.microsoft.com/en-us/um/people/zhang/Calib/

不過里面的棋盤格跟我的不一樣啊,why???,我決定先看看中文的論文吧,我的首要任務是弄清楚輸入輸出,流程,怎么用吧

matlab 跟 opencv上都有張正友的實現

matlab calibration主頁 : http://www.vision.caltech.edu/bouguetj/calib_doc/

GML C++ Camera Calibration Toolbox: http://graphics.cs.msu.ru/en/science/research/calibration/cpp

因為cvCalibrateCamera2 函數主要是用張正友的平面標定方法的,所以首先我建議大家看一下張正友的那篇經典的論文
1) 完整版 22頁 里面分析的非常詳細《A Flexible New Technique for Camera Calibration.rar》(http://research.microsoft.com/~zhang/Papers/TR98-71.pdf)
2) 精簡版 8頁《Flexible Camera Calibration by Viewing a Plane from Unknown Orientations》 - Zhang, ICCV99,
(http://www.vision.caltech.edu/bouguetj/ ... zhan99.pdf)


 http://www.opencv.org.cn/forum/viewtopic.php?t=4603

piao 在opencv論壇上的帖子

在OpenCV中用cvCalibrateCamera2進行相機標定(附程序)

看到論壇里有不少人在用OpenCV中的標定函數cvCalibrateCamera2 進行相機標定時遇到不少問題,說一些自己的看法。


1)因為cvCalibrateCamera2 函數主要是用張正友的平面標定方法的,所以首先我建議大家看一下張正友的那篇經典的論文
完整版 22頁 里面分析的非常詳細《A Flexible New Technique for Camera Calibration.rar》( http://research.microsoft.com/~zhang/Papers/TR98-71.pdf )
精簡版 8頁《Flexible Camera Calibration by Viewing a Plane from Unknown Orientations》 - Zhang, ICCV99,
( http://www.vision.caltech.edu/bouguetj/ ... zhan99.pdf )

2)至於不少人說OpenCV中用cvCalibrateCamera2 進行相機標定的精度差,標定結果不穩定,我想可能的原因有:

原因之一)可能是在標定的時候標定板所在平面與成像平面(image plane)之間的夾角太小,張正友論文里的仿真數據(有噪聲的數據)說明當兩者夾角太小誤差
會很大, 從張正友的論文里給出的5幅圖中(http://research.microsoft.com/~zhang/Calib/)其中標定平面與成像平面的夾角分別為:
8.8947 11.2325 24.4875 10.8535 9.5829(單位:度)。
而且張正友的論文中也提到兩幅標定板之間的位置平行放置的話,相關相當於一幅 因此在實際標定中平行放置的情況最好避免,可能有時你無形之中就犯了這
個錯誤。

原因之二)標定時拍攝的圖片太少,雖然張正友的論文里只用了5幅圖片,但是我建議搞個10來幅左右還是必要的,因為我們實際中可能標定板用A4的紙打印出
來貼在一塊板上的,標定板上的世界坐標精度就不是特別高,多拍攝幾幅圖像能減少這方面帶來的誤差,而且多個角度拍攝也可能解決了問題一:標定板和成像
平面夾角小的問題。這個家伙用20幅來標定( http://www.vision.caltech.edu/bouguetj/ ... ample.html )

原因之三)圖像上角點提取的不准確,我認為用cvFindChessboardCorners函數找角點不是很好,假如拍到的圖像不是完整的棋盤格的時候肯定會有問題的,而
且也不少人反應用這個函數提取不出角點,建議可以用其他工具 比如:
OpenCV and MatLab Camera Calibration Toolboxes Enhancement(http://graphics.cs.msu.ru/en/research/calibration/)
Camera Calibration Toolbox for Matlab(http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/example.html)★★★★★強烈推薦

當然還有可能其他人為的什么原因。


3)建議用其他方法比如Tsai的標定方法或其他的標定工具進行標定
★★★★★強烈推薦 用這個matlab標定工具箱來進行標定,可以和OpenCV做個對比嘛 ,它也是基於張正友的平面標定方法的,做得非常人性化,呵呵,
有誤差分析、標定結果三維重建、重投影計算角點等功能 。
Camera Calibration Toolbox for Matlab(http://www.vision.caltech.edu/bouguetj/calib_doc/)

4)三個OpenCV下的標定程序

程序1)《基於OpenCV的計算機視覺技術實現》( http://www.sciencep.com/s_single.php?id=14881 )這本書上的相機標定程序 (有標定圖片 改下參數 可以直接運行)

from《基於OpenCV的計算機視覺技術實現 》.rar
攝像機定標from《基於OpenCV的計算機視覺技術實現 》.rar
(525.67 KiB) 被下載 17063 次


程序2) 自己寫的一個簡單的標定程序:plane_calibration_opencv(要先准備好 角點的圖像坐標和對應的世界坐標 )
download/file.php?id=284
程序3)http://www.opencv.org.cn主頁上的例子
http://www.opencv.org.cn/index.php?titl ... iant=zh-tw

附件

程序4)    plane_calibration_opencv.rar

opencv+cvut 實現 http://wenku.baidu.com/view/e88cc989d0d233d4b14e691c.html

原理部分
單應性矩陣在攝像機標定時的作用

  在計算機視覺中單應性矩陣的求解在攝像機標定的過程中有重要的意義,單應性矩陣中包含着攝像機的內參數矩陣,旋轉向量和平移向量。

  我們設3維空間有一點Q=[X Y Z 1]T(齊次坐標系表示),到成像儀上的q[x y 1]T映射,設單應性矩陣為H,s為比例系數。則Qq之間的關系可表示為q=ShQ.

  在點映射過程中,點要經過旋轉和平移的物理變換,所以設物理變換坐標W=[R T],R為旋轉向量,T為平移向量。然后再投射過程中,根據得到的攝像機的內參矩陣M,所以q=sMWQ,從而推算出H=sMW.

  通過單應性矩陣,我們把源圖像平面上的點擊位置與目標圖像平面的傷的點擊位置聯系了起來,而opencv 中有一個函數提供了單應性矩陣的計算:cvFindHomography().opencv中是采用從多個視場,采集圖片,並計算相應的單應性矩陣,從而求解攝像機的內參數(內參數相對於攝像機的視場是不變的)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM