手把手教会你双目摄像头Matlab参数定标

Ursula ·
更新时间:2024-09-20
· 428 次阅读

目录

一、前期准备

二、使用双目摄像头(左+右)拍摄棋盘图

1、注意事项

2、双目拍照代码(python)

3、双目左右照片分割(python)

三、Matlab双目参数标定

四、双目参数提取

总结

一、前期准备

1、安装好python3,可以在anaconda中安装python3。

2、一个合适的双目摄像头。

3、一台可以运行Matlab的电脑。

4、一张棋盘图(可A4打印,若效果不佳,则可A3打印)。

棋盘图如下图所示:需要测量小方框的边长(一般单位为毫米:mm)。

二、使用双目摄像头(左+右)拍摄棋盘图 1、注意事项

注意:

1、左、右摄像头图像中必须包含单独的完整的棋盘图。

2、可适当前后、左右、上下翻转棋盘图,在符合上述条件1的情况下。

3、拍摄左右双目的照片40~50张比较合适。

如图所示:

2、双目拍照代码(python)

take_photo.py内容如下:

import cv2 import sys #引入库 cap = cv2.VideoCapture(1) #读取笔记本内置摄像头或者0号摄像头 i = 0 while True: ret, frame = cap.read() if (ret): cv2.namedWindow("Video01",0) #创建一个名为Video01的窗口,0表示窗口大小可调 #cv2.resizeWindow("Video01",1280,720) ##创建一个名为Video01的窗口,设置窗口大小为 1920 * 1080 与上一个设置的 0 有冲突 cv2.imshow("Video01", frame) #等待按键按下 c = cv2.waitKey(1) & 0xff #r若按下w则保存一张照片 if c ==ord("w"): cv2.imwrite("./val_001/%d.bmp" %i, frame) #自己设置拍摄的照片的存储位置 print("Save images %d succeed!" %i) i+=1 #若按下Q键,则退出循环 if c == ord("q"): break #随时准备按q退出 cap.release() #关掉所有窗口 cv2.destroyAllWindows()

注意:

1、运行take_photo.py前,注意设置左右照片的存储位置。

2、运行take_photo.py后,按下键盘上的“W”键拍摄一张照片。当拍摄的照片数量足够时,按下“Q”键退出程序运行。

3、程序退出后,打开存储照片的文件夹查看照片是否合适。

3、双目左右照片分割(python)

resize.py内容如下:

import numpy as np import cv2 #img1 = cv2.imread(r"/Users/inbc/Desktop/zuo/Left1.bmp") #img2 = cv2.imread(r"/Users/inbc/Desktop/you/Right1.bmp") for i in range(0,7) : #imgT = cv2.imdecode(np.fromfile('./images/%d.bmp' %i ,dtype=np.uint8), -1) imgT = cv2.imdecode(np.fromfile('./val/%d.bmp' %i ,dtype=np.uint8), -1) #读取拍摄的左右双目照片 # cv2.imshow("zuo", img1[300:1200, 500:2000]) # cv2.imshow("you", img2[300:1200, 500:2000]) # cv2.waitKey(0) #设置左右照片的存储位置 cv2.imwrite("./val/zuo/reLeft%d.bmp" %i ,imgT[0:720, 0:1280] )#imgL的第一个参数是图片高度像素范围,第二个参数是图片宽度的像素范围 cv2.imwrite("./val/you/reRight%d.bmp" %i ,imgT[0:720, 1280:2560] ) print("Resize images%d Fnished!" %i) print("Fnished All!!!")

注意:

1、运行resize.py前,注意设置左、右照片的分别的存储位置。

2、运行resize.py后,终端打印"Fnished All!!!"表示分割完成。

3、程序退出后,打开存储照片的文件夹查看照片,是否分割完成,左摄像头照片存放在zuo,右摄像头照片存放在you。(文件名可自己更改)

三、Matlab双目参数标定

1、打开Matlab后,点开app,找到Stereo Camera Calibrator。如下图所示:

打开后如图所示:

2、导入双目的左右照片到Stereo Camera CalibratorAPP。具体操作,如下图所示:

3、点击确认后就可以分析导入的左右的照片了。这个过程会自动剔除掉不合格(误差过大)的左右照片。

4、导入照片后就可以进行双目定标了。

导入左右照片后,如图所示:

5、设置双目相机的定标参数,如图所示。

6、进行双目定标,并导出双目参数矩阵到Matlab中,进行下一步的处理。

四、双目参数提取

1、左、右相机内参数获取,注意参数矩阵的转置:

>> stereoParams.CameraParameters1.IntrinsicMatrix'#左相机参数 ans = 831.0889 -4.0855 659.4243 0 831.8663 487.3259 0 0 1.0000 >> stereoParams.CameraParameters2.IntrinsicMatrix'#右相机参数 ans = 831.1982 -3.5773 632.5308 0 832.1221 479.3084 0 0 1.0000

Matlab如图所示:

2、获取左右相机畸变系数。

注意: 左右相机畸变系数:[k1, k2, p1, p2, k3] ,顺序要正确。

# 左右相机畸变系数:[k1, k2, p1, p2, k3] >> stereoParams.CameraParameters1.RadialDistortion ans = -0.0806 0.3806 -0.5229 #k1 k2 k3 >> stereoParams.CameraParameters1.TangentialDistortion ans = -0.0033 0.0005 #p1 p2

Matlab如图所示:

3、获取双目的旋转矩阵和平移矩阵,注意旋转矩阵的转置。

# 旋转矩阵 >> stereoParams.RotationOfCamera2' ans = 1.0000 0.0017 -0.0093 -0.0018 1.0000 -0.0019 0.0093 0.0019 1.0000 # 平移矩阵 >> stereoParams.TranslationOfCamera2 ans = -119.9578 0.1121 -0.2134

Matlab如图所示:

4、获取基线距离,单位:mm, 为平移向量的第一个参数(取绝对值)。

self.baseline = 119.9578 # 单位:mm, 为平移向量的第一个参数(取绝对值)

至此,双目摄像头的参数就定标完了。

耐心一点,慢慢来总会成功的!!!

总结

到此这篇关于双目摄像头Matlab参数定标的文章就介绍到这了,更多相关双目摄像头Matlab参数定标内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!



摄像 matlab

需要 登录 后方可回复, 如果你还没有账号请 注册新账号