MATLAB张正友标记法对双目摄像头进行标定

第一步、安装MATLAB

我这里使用的版本是MATLAB R2016a
具体软件自己去度娘找哈
破解就花费了我大半天

第二步、去打印标定要用到的棋盘

这里可以给你(有点小水印无伤大雅)

在这里插入图片描述

用A4纸打印出来

第四步、主角—双目摄像头

奉劝大家不要贪小便宜哈,得买个一百来块的,要不然数据极度不准确,而且还难用
我买了这个,150

在这里插入图片描述

第五步、测试双目摄像头

打开你们可爱的pycharm
安装opencv
写入代码

import cv2

video = cv2.VideoCapture(1 + cv2.CAP_DSHOW)
width = 2560
high = 720
mid = width // 2
video.set(cv2.CAP_PROP_FRAME_WIDTH, width)
video.set(cv2.CAP_PROP_FRAME_HEIGHT, high)

w = video.get(cv2.CAP_PROP_FRAME_WIDTH)
h = video.get(cv2.CAP_PROP_FRAME_HEIGHT)
while True:
    ret, frame = video.read()
    cv2.waitKey(10)
    left_img = frame[:, :mid]
    right_img = frame[:, mid:]
    cv2.imshow("left_img", left_img)
    cv2.imshow("right_img", right_img)

当你看到两个窗口弹出的时候,说明双目摄像头测试成功了

第六步、拍标定图

来来来、复制代码


import cv2

video = cv2.VideoCapture(1 + cv2.CAP_DSHOW)
width = 2560
high = 720
mid = width // 2
video.set(cv2.CAP_PROP_FRAME_WIDTH, width)
video.set(cv2.CAP_PROP_FRAME_HEIGHT, high)

w = video.get(cv2.CAP_PROP_FRAME_WIDTH)
h = video.get(cv2.CAP_PROP_FRAME_HEIGHT)
index=1
index2=1
while True:
    ret, frame = video.read()
    left_img = frame[:, :mid]
    right_img = frame[:, mid:]
    cv2.imshow("left_img", left_img)
    cv2.imshow("right_img", right_img)
    k = cv2.waitKey(1) & 0xFF
    if k == ord('a'):
        cv2.imwrite("left"+str(index)+".jpg", left_img)
        print("success index="+str(index))
        index=index+1
    if k == ord('s'):
        cv2.imwrite("right"+str(index2)+".jpg", right_img)
        print("success index2="+str(index2))
        index2=index2+1

以上代码实现了
按下a键就左目拍照
按下s键就右目拍照
左右目各拍20张标定图

在这里插入图片描述

第七步、使用MATLAB中的标定工具

在这里插入图片描述
在这里插入图片描述

一次性导入20张左目的照片

在这里插入图片描述

这里填棋盘的宽度,我是A4纸打印的是24mm(尺子量的)
具体需要你们去亲自量一下啦

在这里插入图片描述

等待MATLAB计算好就行啦

在这里插入图片描述

标点计算完了就会告诉你有多少个是可以用的,有多少个是无效的图像

在这里插入图片描述

第七步、计算相机数据值

点击Calibrate按钮就可以开始计算啦
在这里插入图片描述
计算完毕就会看到你的相机的位置
上面的柱形图就是每个图片的误差
在这里插入图片描述

!!!!!
我的有效图像居然只有七张!!!而且误差均值居然到了1.15!!!

重做ing!!!!
重做ing!!!!
重做ing!!!!
重做ing!!!!
重做ing!!!!

后来才发现1.15真的不高,在做了N次后发现1.15居然是最低的!!!
有些网站说误差需要小于0.5才可以通过,我有时候的误差可以到6!!经常性会到2点几
最后这次我做了有一点几,就果断导出数据了

按这个按钮导出到控制台
在这里插入图片描述
然后就可以看到左目相机的数据
在这里插入图片描述
接下来要看相机的内参矩阵,径向畸变和切向畸变。

内参矩阵

cameraParams.IntrinsicMatrix

在这里插入图片描述
径向畸变

cameraParams.RadialDistortion

在这里插入图片描述
切向畸变

cameraParams.TangentialDistortion

在这里插入图片描述

第八步、重做以上步骤,测试右目相机的参数

右目相机的误差在1.3其实还行
!!!为什么我总是到不了1.0以下

在这里插入图片描述
导出数据
在这里插入图片描述
在这里插入图片描述

第九步、完成!

以下就是这次标定的所有数据
下一章将使用双目摄像头测出的数据填入到代码中,再使用立体矫正以及立体匹配,这样就可以得到深度图,使用深度图再进行视差运算,得到视差图。测距测试!!

在这里插入图片描述

可能遇到的问题

  • 点击计算按钮后出现这个对话框

在这里插入图片描述
来我们翻译一下(百度翻译的,正所谓冤有头…)

Unable to estimate camera parameters. Images may contain severe lensdistortion or the 3-D onentations of the cabra tion pattem are toosimilar across images. If calibration pattem onentations are toosimilar, try removing very simar images or adding additional images withhe pattem in varied orientations

无法估计摄像机参数。图像中可能存在严重的透镜畸变,或者图像中的三维结构模式过于相似。如果校准模式的组成非常相似,尝试删除非常simar图像或添加其他图像与模式在不同的方向

  • 标定的误差值非常大 >3

在这里插入图片描述

  • 9
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值