matlab雙目標定(詳細過程)
https://blog.csdn.net/qq_38236355/article/details/89280633
雙目相機標定主要是為了獲得攝像頭的內參(f,1/dx,1/dy,cx,cy)、畸變參數(k1,k2,k3,p1,p1)和外參(R,t),用於接下來的雙目校正和深度圖生成。具體內容參照:https://blog.csdn.net/qq_38236355/article/details/88933839
1采集圖像
實物:
測試 用一個zed雙目相機采集圖像.
具體標定步驟如下:
一、獲得棋盤格圖像
大多數雙目標定都是用棋盤格進行標定,如下所示:
這里有一段c++代碼,用於生成棋盤格圖像:
#include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace cv; using namespace std; void main() { //---生成標定圖 IplImage *img; int chess_size = 500; int dx = 10; //棋盤格大小,像素為單位 int dy = 7; //棋盤格數目 img = cvCreateImage(cvSize(chess_size*dy, chess_size*dx), IPL_DEPTH_8U, 1); cvZero(img); int flag = 0; for (int i = 0; i < dx; i++) for (int j = 0; j < dy; j++) { flag = (i + j) % 2; if (flag == 0) { for (int m = i*chess_size; m < (i + 1)*chess_size; m++) for (int n = j*chess_size; n < (j + 1)*chess_size; n++) *(img->imageData + m*img->widthStep + n) = 255; } } cvSaveImage("標定圖2.jpg", img); // 生成的棋盤格圖保存在該工程目錄下 cvNamedWindow("cab", 1); cvShowImage("cab", img); char ch = cv::waitKey(0); if (ch == 27) { exit(0); } //system("PAUSE"); //---END生成標定圖 }
生成
生成棋盤格后,拿雙目相機對棋盤格進行不同位姿的多次拍照采樣,一般在20張左右即可。分別將左目和右目的圖像存在兩個文件夾中。圖像如下:
二、matlab標定工具箱
1、打開標定工具箱
在命令行輸入stereoCameraCalibrator,出現如下界面:
將上面的“Skew”、“Tangential Distortion”以及“3 Coefficients”等選項選上,將“2 Coefficients”選項去掉,如下:
2、載入圖像
點擊添加圖像出現如下界面:
這里用的標定板子是20mm的網格.修改參數.
Camera1代表左攝像頭,Camera2代表右攝像頭,分別選擇存放着左右圖像的文件夾,需要特別注意的是棋盤格的邊長應該根據打印的實際大小填寫,單位可以選擇,然后點擊OK,程序會自動檢測采集的圖像到底有多少可以使用,可以說MATLAB2015的這個工具十分挑剔,如果角度不好的話,將使用不了,因此在采集圖像時,最好多的采集一些。
3、標定
點擊按鈕,開始標定:
左下方的直方圖為左右圖像的標定誤差,點擊誤差較大的直方圖,可以直接在左邊的圖像對中找到對應的圖像,右鍵選擇“Remove and Recalibrate”,可以重復上述步驟,直到認為誤差滿足標定需求為止。
4、導出參數
點擊選擇Export camera parameters,並點擊“OK”。
三、讀取參數
標定結束后,會得到如下標定參數:
TranslationOfCamera2:相機2相對於相機1的偏移矩陣,可以直接使用。
RotationOfCamera2:相機2相對於相機1的旋轉矩陣,需要轉置之后才能使用。
CameraParameters1與CameraParameters2為左右攝像頭的單獨標定參數。
CameraParameters1與CameraParameters2中包含如下文件:
IntrinsicMatrix存放的是攝像頭的內參,只與攝像機的內部結構有關,需要先轉置再使用。
RadialDistortion:徑向畸變,攝像頭由於光學透鏡的特性使得成像存在着徑向畸變,可由K1,K2,K3確定。
TangentialDistortion:切向畸變,由於裝配方面的誤差,傳感器與光學鏡頭之間並非完全平行,因此成像存在切向畸變,可由兩個參數P1,P2確定。
使用時,需要注意參數的排放順序,即K1,K2,P1,P2,K3。切記不可弄錯,否則后續的立體匹配會出現很大的偏差。