九点自动标定---如何让相机视野中心十字对准目标物?

 

我们知道图像坐标和机械坐标是相互独立的,需要通过移动9个点(常说的9点标定)的方式建立二者的关系,从而达到通过像素点的坐标关系得到机械坐标。相机的视野中心对准目标物中心这会延申到吸嘴是否准确的抓取到目标,如何达到这一操作见下

(假设已经通过9点标定建立关系后,准确说方法1根本就没用到9点标定的关系式,它也不需要进行9点标定

方法1:

如下图所示:

假设大黑框里面的内容代表相机视野里的东西,绿色十字是视野的中心点,黑叉叉代表目标物。现在需要操作机械轴将视野沿蓝色箭头指示的方向移动使视野中心点落到黑叉叉中心。

我们现在已知的条件有:

黑叉叉中心像素坐标(Px,Py)

绿色十字中心像素坐标(Px0,Py0)

当前的二维插补机械坐标Q0(0,0)

我们需要求出的就是黑叉叉中心所在的机械坐标(Qx,Qy)。 

移动三个机械坐标点,为了方便(只要3点不共线即可)就取构成直角三角形的三点,同时都需要记录下这三个点的像素坐标和机械坐标。由此我们可以计算一个像素的宽等于多少pluse,高又等于多少pluse:

 单个pix的宽(x方向)为:W=\tfrac{px1-px2}{qx1-qx2}   ;高(y方向)为:H=\tfrac{py1-py4}{qy1-qy4}   注:p代表像素,q代表机械脉冲

 那么现在就得到了一个像素的实际机械距离比值。

接下来带入已有条件即可求得黑叉叉中心所在的机械坐标:

1、▲X = Px0 - Px ; ▲Y =  Py0 - Py 

2、那么黑叉叉中心所在的机械 坐标为:Qx = ▲X * W;Qy = ▲Y * H

 

方法2:

分别将物体的像素坐标和视野中心像素坐标带入9点标定后的关系式中得到它们两个的机械坐标,然后让视野中心点机械坐标减去物体所在的机械坐标,最后把结果带入到机械轴的插补运动中即可

  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
九点标定是一种用于校准摄像机的方法,它通常用于计算机视觉图像处理领域。在九点标定中,我们需要使用一个已知的模式(通常是一个特殊的棋盘格)作为参考物体,然后通过摄像机拍摄这个模式的多个角度的图像。 这些图像被用来计算摄像机的内部参数(如焦距、主点位置等)和外部参数(如摄像机的位置和朝向)。通过这些参数,我们可以在后续的图像处理中更准确地进行测量和分析。 在Python中,有一些库可以用来进行九点标定,其中最常用的是OpenCV。OpenCV提供了一些函数和工具,可以方便地进行九点标定。你可以使用`cv2.findChessboardCorners()`函数来检测图像中的棋盘格角点,然后使用`cv2.calibrateCamera()`函数来计算摄像机的内外参数。 以下是一个简单的示例代码,演示了如何使用OpenCV进行九点标定: ```python import cv2 import numpy as np # 定义棋盘格的尺寸 chessboard_size = (9, 9) # 准备棋盘格角点的坐标 objp = np.zeros((np.prod(chessboard_size), 3), dtype=np.float32) objp[:, :2] = np.mgrid[0:chessboard_size[0], 0:chessboard_size[1]].T.reshape(-1, 2) # 存储棋盘格角点的世界坐标和图像坐标 obj_points = [] # 世界坐标 img_points = [] # 图像坐标 # 加载图像 image = cv2.imread('chessboard.png') # 转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 检测棋盘格角点 ret, corners = cv2.findChessboardCorners(gray, chessboard_size, None) if ret: obj_points.append(objp) img_points.append(corners) # 进行九点标定 ret, camera_matrix, distortion_coefficients, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, gray.shape[::-1], None, None) if ret: # 输出摄像机的内部参数和外部参数 print("相机内参:") print(camera_matrix) print("畸变系数:") print(distortion_coefficients) print("旋转向量:") print(rvecs) print("平移向量:") print(tvecs) ``` 请注意,你需要将代码中的`chessboard.png`替换为你自己的棋盘格图像路径。此外,还需要根据实际情况调整棋盘格的尺寸`chessboard_size`。 希望这可以帮助你进行九点标定!如果有任何问题,请随时向我提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值