<補充>

(1)由於(u,v)(#像素座標系#)只代表像素的列數和行數,還需建立以物理單位(如毫米)表示的(x,y)(#圖像座標系#)

(2)

1.內參:
<資料>:

注:opencv含有4個內參 -> fx、fy、v0、u0 ( fx = f / dx ; fy = f / dy )

2.外參:表示將一個全局座標系下的P變換到相機座標系下

@具體參數數量和要求解的目標有關,比如畸變參數如果要全部估計的話就會比較多,如果不估計畸變參數,那內參:fx、fy、u0、v0,外參:偏移x、y、z,旋轉角:roll、yaw、pitch@

opencv內參圖 opencv內參標定_opencv內參圖

注:圖片引用自

  • dx\dy:一個像素代表的物理長度
  • f:焦距(似乎還有個r)
  • u0\v0:圖像的中心像素座標和圖像原點像素座標之間相差的像素數(參見下圖)

opencv內參圖 opencv內參標定_opencv內參圖_02

注:引用自:

(3)角點:

1、圖像中的特殊位置,點的局部特徵也可叫做“關鍵特徵點”、“角點”
2、關於角點的具體描述可有幾種:

  • 一階導數(即灰度梯度)的局部最大所對應的像素點。
  • 兩條及兩條以上邊緣的交點。
  • 圖像中梯度值和梯度方向的變化速率都很高的點。
  • 角點處的一階導數最大,二階導數為零,指示物體邊緣變化不連續的方向。

@至少需要四個角點才能求解出內外參(需要八個方程求解八個參數),一般採用多組角點@

(4)畸變

<資料>
徑向畸變:光線在遠離透鏡中心的地方比靠近中心的地方更加彎曲
切向畸變:透鏡不完全平行於圖像平面

一、標定

<資料>:


- 目的:獲取相機內參和外參矩陣,幫助還原空間物體
- 輸入:標定圖像上所有內角點的圖像座標,標定板圖像上所有內角點的空間三維座標(一般假定z=0)
- 輸出:相機內、外參、畸變係數。

2017.3.9 22:31

1)標定技術

opencv內參圖 opencv內參標定_圖像平面_03

注:圖片引用自
2017.3.10 22:19

2)OpenCV標定模塊常用的標定函數:

引用自:
double calibrateCamera(InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints,Size imageSize, InputOutputArray cameraMatrix, InputOutputArray distCoeffs, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags=0)

其中

objectPoints為世界座標系中的點。在使用時,應該輸入一個三維點的vector的vector,即vector < vector < Point3f > > objectPoints。
imagePoints為其對應的圖像點。和objectPoints一樣,應該輸入std::vector < std::vector < cv::Point2f > > imagePoints型的變量。

imageSize為圖像的大小,在計算相機的內參數和畸變矩陣需要用到;

cameraMatrix為內參數矩陣。輸入一個cv::Mat cameraMatrix即可。

distCoeffs為畸變矩陣。輸入一個cv::Mat distCoeffs即可。

rvecs為旋轉向量;應該輸入一個cv::Mat的vector,即vector< cv::Mat> rvecs因為每個vector< Point3f>會得到一個rvecs。

tvecs為位移向量;和rvecs一樣,也應該為vector< cv::Mat> tvecs。

flags為標定是所採用的算法。可如下某個或者某幾個參數:

CV_CALIB_USE_INTRINSIC_GUESS:使用該參數時,在cameraMatrix矩陣中應該有fx,fy,cx,cy的估計值。否則的話,將初始化(cx,cy)圖像的中心點,使用最小二乘估算出fx,fy。如果內參數矩陣和畸變居中已知的時候,應該標定模塊中的solvePnP()函數計算外參數矩陣。

CV_CALIB_FIX_PRINCIPAL_POINT:在進行優化時會固定光軸點。當CV_CALIB_USE_INTRINSIC_GUESS參數被設置,光軸點將保持在中心或者某個輸入的值。

CV_CALIB_FIX_ASPECT_RATIO:固定fx/fy的比值,只將fy作為可變量,進行優化計算。當CV_CALIB_USE_INTRINSIC_GUESS沒有被設置,fx和fy將會被忽略。只有fx/fy的比值在計算中會被用到。

CV_CALIB_ZERO_TANGENT_DIST:設定切向畸變參數(p1,p2)為零。

CV_CALIB_FIX_K1,…,CV_CALIB_FIX_K6:對應的徑向畸變在優化中保持不變。如果設置了CV_CALIB_USE_INTRINSIC_GUESS參數,

CV_CALIB_RATIONAL_MODEL:計算k4,k5,k6三個畸變參數。如果沒有設置,則只計算其它5個畸變參數。

3)張正友相機標定

<資料>

1.補充

  • 單應性(tomography):一個平面到另一個平面的投影映射

2. 標定不需要特殊的標定物,只需要一張打印出來的棋盤格

3.流程

opencv內參圖 opencv內參標定_圖像平面_04

  • 從不同角度拍攝若干張模版圖像(棋盤格) -> 檢測圖像特徵點 -> 求出相機內外參 -> 求出畸變係數

| 2017.3.11 17:27

4.具體流程

  • 檢測角點
  • findChessboardCorners
  • 精確角點座標(亞像素級別)
  • find4QuadCornerSubpix
  • 初始化標定板三維座標(z=0)
  • 標定(包括相機內參、畸變係數、旋轉向量、平移向量)
  • calibrateCamera
  • 重投影計算誤差
  • projectPoints
  • 利用標定結果矯正棋盤圖
  • remap

|2017.3.14 21:22

補充:相機原理


  • 越靠近中軸線的光束聚焦得越遠,越靠近透鏡邊緣的光聚焦得越近
  • 近軸焦點:聚焦在最遠處
  • 邊緣光線焦點:聚焦在最近處
  • 相機座標系與世界座標系

O為攝像機光心,
Zc為攝像機的光軸,和圖像平面垂直;
OO1為攝像機焦距

二、配準(深度圖與彩色圖< Kinect >)

資料:

1、具體流程

(1)利用內參求(深度\RGB)攝像頭座標系下世界座標到像平面座標(透視變換)

opencv內參圖 opencv內參標定_圖像平面_05

(2)利用外參求聯繫兩個座標系的R、T

|2017.3.15 23:10