论文总结(一)双目视觉系统标定

说明:我的方向是跟基于视觉伺服的机械臂抓取有关,最近在看大论文,(浅浅地吐槽一句,近几年的sci为什么没有被收录,搜一个doi未收录,再搜一个又未收录),由于大论文的篇幅较长,所以我想以记录的方式记录每一小节。

论文出处:基于视觉引导的机械臂定位抓取研究与实现-刘继宗(知网可搜)

目录

1.双目视觉原理

2.相机成像模型以及坐标系的建立

3.双目相机标定

4.手眼标定

注:本文是对在看论文第三章的总结,图片内容均为原作者所有。

1.双目视觉原理

物体在双眼视网膜上投影位置的差值被称为双目视差,双目视差经过大脑的 处理,可获得物体的立体信息。

2.相机成像模型以及坐标系的建立

  一般情况下,需要在针孔成像模型中定义世界坐标系、相机坐标系、像素坐标系和图像物理坐标系。

 

文章当中涉及到了复杂的计算我的简要总结如下:

1.首先基于相似三角形可以得到一组公式;

2.然后求解相机的内参模型;

3.最后求解相机的外参模型

4.最终得到相机成像的模型。

( 视觉系统的参数标定包含双目相机标定和手眼标定。前者是为了得到图像坐标系与相机坐标系之间的关系,后者是为获得相机坐标系与机械臂坐标系之间的关系。)

3.双目相机标定

张正友标定法:

(1)首先求解单应矩阵,单应矩阵是相机内参矩阵与相机外参矩阵的混合矩阵;

(2)将混合矩阵分离成为相机内参矩阵和相机外参矩阵,首先求解相机内参矩阵;

(3)然后求解相机外参矩阵。

4.手眼标定

手眼系统主要分为两种,一种是eye in hand(眼在手心)另外一种是eye to hand(眼在手外)。

手眼标定的原理图如下:

假设物体上固连的坐标系Cobj ,在手眼标定的过程中标定板 在此坐标系下的坐标为 Pobj ,机械臂运动前后的相机坐标系分别为Cc1和Cc2,标定板在Cc1和Cc2这两个坐标系下的坐标分别为Pc1和Pc2,机械臂运动前后末端坐标系分别为Ce1和Ce1标定板在Ce1和Ce2这两个坐标系下的坐标分别为Pe1和Pe2。在机械臂运动前相机坐标系和标定板坐标系的相对位置关系为A ,在机械臂运动后相机坐标系和标定板坐标系的相对位置关系为B,机械臂运动前后机械臂末端坐标系的相对位置关系为D,X用来描述手眼关系。

公式的简要总结如下:

首先我们会得到六组关系,通过公式代换以及公式改写得到齐次表达式,然后把齐次表达式展开,旋转矩阵可以改写为通用旋转变换的形式,即R(k,q ),表示绕着k轴旋转 q ,然后对旋转矩阵进行了改写,之后又进行了角度的约束,最后得到手眼关系的表达式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用双目视觉进行手眼标定时,可以使用Python中的OpenCV库和其他一些工具来实现。下面是一个基本的双目视觉手眼标定的Python代码示例: ```python import numpy as np import cv2 # 标定板的参数 num_cols = 8 num_rows = 6 square_size = 25.0 # 左右相机图像路径 left_image_path = 'left_image.png' right_image_path = 'right_image.png' # 棋盘上角点的3D坐标 object_points = np.zeros((num_rows * num_cols, 3), np.float32) object_points[:, :2] = np.mgrid[0:num_cols, 0:num_rows].T.reshape(-1, 2) * square_size # 存储所有图像的对象点和图像点 object_points_list = [] left_image_points_list = [] right_image_points_list = [] # 检测棋盘角点 def detect_chessboard_corners(image_path): image = cv2.imread(image_path) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) ret, corners = cv2.findChessboardCorners(gray, (num_cols, num_rows), None) if ret: object_points_list.append(object_points) cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.1)) left_image_points_list.append(corners) cv2.drawChessboardCorners(image, (num_cols, num_rows), corners, ret) cv2.imshow('image', image) cv2.waitKey(0) cv2.destroyAllWindows() # 分别检测左右图像的棋盘角点 detect_chessboard_corners(left_image_path) detect_chessboard_corners(right_image_path) # 执行手眼标定 ret, camera_matrix_left, dist_coeffs_left, camera_matrix_right, dist_coeffs_right, R, T, E, F = \ cv2.stereoCalibrate(object_points_list, left_image_points_list, right_image_points_list, None, None, None, None, (640, 480), cv2.CALIB_FIX_INTRINSIC) # 输出标定结果 print("Camera Matrix Left:\n", camera_matrix_left) print("Distortion Coefficients Left:\n", dist_coeffs_left) print("Camera Matrix Right:\n", camera_matrix_right) print("Distortion Coefficients Right:\n", dist_coeffs_right) print("Rotation Matrix:\n", R) print("Translation Vector:\n", T) print("Essential Matrix:\n", E) print("Fundamental Matrix:\n", F) ``` 你需要将`left_image.png`和`right_image.png`替换为你自己的左右相机图像路径。此代码将检测并标定棋盘角点,然后执行手眼标定,并输出相机矩阵、畸变系数、旋转矩阵、平移向量、本质矩阵和基础矩阵等标定结果。 当然,在实际应用中,可能还需要进行图像去畸变、立体匹配等后续处理。这里只是一个基本的示例代码,你可以根据实际需要进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值