雙目相機(1)標定


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

 


免責聲明!

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



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