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。切記不可弄錯,否則后續的立體匹配會出現很大的偏差。
