Aruco码估计相机位姿初步

Abstract:利用aruco库中的相关函数实现在摄像头下aruco码的识别和在指定地方插入视频。

Criticize:一:OpenCV实现USB摄像头的打开 并且实现USB摄像头参数调节

我们调用opencv特有的Videocapture函数来实现摄像头的打开 基本形式为 Videocapture(index)(index代表你摄像头在你电脑上的接口名,想查询的话就打开终端 输入 ls /dev |capture video 查看当前的video+index 一般电脑自带的是0 ,1,其他的video就是你的usb摄像头)。最简单的形式就是 Videocapture object(index);(object代表Videocapture类对象)。打开摄像头之后我们需要将视频流读入图片以显示。这一部分较为简单,直接看代码。

我们读进来之后需要更改一下摄像头的参数,目的是为了减少环境光对图像的污染。摄像头参数主要有六个,帧率亮度 对比度饱和度 色调曝光我们更改参数之前最好先记住摄像头原本的参数

二: 在单一背景下,识别出ArUco码 并且 在复杂背景下,识别出ArUco码

Aruco码就是我们前面所说的二进制码,是一种只有黑白两种颜色组成的正方形码。

三: 在有多个ArUco码的情况下,只识别其中一种ArUco码

由于前面介绍了Markscorners Marksid一一对应,所以我们只需要根据id来提取特定的一类aruco码。特别注意,检测的时候里面的参数不能变,因为我们检测的时候必须要检测所有的图像来的到id和corners,只有在绘画的时候我们才可以 根据id来画特定的aruco码

我们可以理解为drawDetectedMarkers(undistimg,Markscorners,Marksid);的操作是根据得到的id提取出corners的轮廓并且在undistimg上画出来。 那这样的话我们可以新建一个和Masksid一样类型的数据A,筛选一下id 存入A中,再新建一个和Markscorners一样类型的数据B,来存入特定的aruco码轮廓。(因为是以唯一的对应,如果不重建B,id少而corners多,打破了规则因而函数不行了)。

四: 获取ArUco码平面相对摄像头的距离、角度等信息+ 获取ArUco码中心在空间中的坐标(solvePnP)

做之前我们需要了解摄像头成像原理,简言之,就是初中学的知识:小孔成像。

单目测距算法

相似三角形+

用相似三角形计算物体或者目标到相机的距离,将使用相似三角形来计算相机到一个已知的物体或者目标的距离。

假设有一个宽度为 W 的目标或者物体。然后将这个目标放在距离的相机为 D 的位置。用相机对物体进行拍照并且测量物体的像素宽度 P。

这样就得出了相机焦距的公式:

F = (P x D) / W

举个例子,假设在离相机距离 D = 24 英寸的地方放一张标准的 8.5 x 11 英寸的 A4 纸(横着放;W = 11)并且拍下一张照片。测量出照片中 A4 纸的像素宽度为 P = 249 像素。因此的焦距 F 是:

F = (248px x 24in) / 11in = 543.45。

当继续将的相机移动靠近或者离远物体或者目标时,可以用相似三角形来计算出物体离相机的距离:

D’ = (W x F) / P。

例如,假设将相机移到距离目标 3 英尺(或者说 36 英寸)的地方并且拍下上述的 A4 纸。通过自动的图形处理可以获得图片中 A4 纸的像素距离为 170 像素。将这个代入公式得:

D’ = (11in x 543.45) / 170 = 35 英寸或者约 36 英寸,合 3 英尺。

从以上可以看到,要想得到距离,就要知道摄像头的焦距和目标物体的尺寸大小,这两个已知条件根据公式:

D’ = (W x F) / P

得出目标到摄像机的距离D,其中P是指像素距离,W是A4纸的宽度,F是摄像机焦距。

我们想测量aruco码到摄像头的距离和旋转角度,可以利用solvepnp函数得到图片相对于摄像机的平移矩阵和旋转向量来得到。

你可能感兴趣的:(ar)