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

2023-10-30 04:50

本文主要是介绍MATLAB张正友标记法对双目摄像头进行标定,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一步、安装MATLAB

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

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

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

在这里插入图片描述

用A4纸打印出来

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

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

在这里插入图片描述

第五步、测试双目摄像头

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

import cv2video = 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 cv2video = 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) & 0xFFif k == ord('a'):cv2.imwrite("left"+str(index)+".jpg", left_img)print("success index="+str(index))index=index+1if 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

在这里插入图片描述

这篇关于MATLAB张正友标记法对双目摄像头进行标定的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/305689

相关文章

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

Python对PDF书签进行添加,修改提取和删除操作

《Python对PDF书签进行添加,修改提取和删除操作》PDF书签是PDF文件中的导航工具,通常包含一个标题和一个跳转位置,本教程将详细介绍如何使用Python对PDF文件中的书签进行操作... 目录简介使用工具python 向 PDF 添加书签添加书签添加嵌套书签Python 修改 PDF 书签Pytho

Java进行日期解析与格式化的实现代码

《Java进行日期解析与格式化的实现代码》使用Java搭配ApacheCommonsLang3和Natty库,可以实现灵活高效的日期解析与格式化,本文将通过相关示例为大家讲讲具体的实践操作,需要的可以... 目录一、背景二、依赖介绍1. Apache Commons Lang32. Natty三、核心实现代