单目测距(yolo目标检测+标定+测距代码)下

简介: 单目测距(yolo目标检测+标定+测距代码)

正文


5.4 相机内外参数与畸变系数


相机内外参数对图像矫正和测距具有重要意义。内外参数以及畸变系数可以通过相机标定得到机。并且相机都会发生畸变,这对于测量来说显然是不能容忍的,因此消除畸变是十分有必要的


5.4.1相机内外参数


在公式(5.11)中,等号右端第一项为相机的外参数,等号右端第二项表示为相机内参数,内参属于相机内在属性。式中未知参数Zc表示物体到光学中心的距离。同时也说明了,在相机标定的过程中,如果物体相对于相机的位置不同,那么需要对于每一个位置都需要去进行相机标定。


5.4.2相机畸变系数


相机畸变造成了图像平面上某一像素点的真实位置与理想位置不完全重合的现象,因此了解相机畸变现象并对相机进行矫正十分有必要。相机畸变主要包括径向畸变和切向畸变二类。图5-6展示了畸变模型,对于平面上任意理论点P,由与畸变的存在,会使得P点偏移到P'点。图中dr表示相机的径向畸变,dt表示相机的切向畸变。

image.png

    图5-6 相机畸变模型

(1)径向畸变

径向畸变与透镜的形状密切相关,而且离透镜中心越远的地方畸变越明显。径向畸变大都表现为桶形畸变和枕型畸变两种方式。畸变的多项调节公式为:

cdde6874b36880e9816e9895c6985164_88fe3fdc6ac64228b323e0af84b96dcb.png

  (5.12)

其中(xi,yi)是图像平面上的理想点。(x0,y0)是畸变矫正后实际位置点。理想点与成像中心的距离,k1,k2,k3表示为相机径向畸变系数。如果这三个系数都小于零,那么将造成桶型畸变;如果三个系数均都大于零,则将造成枕型畸变。

(2)切向畸变

切向畸变的产生大都由于整个摄像机的组装和制造过程。对于切向畸变来说,可以使用两个切向畸变系数p1和p2进行纠正。

得到上述矫正公式后就可以完成对图像良好的修正。将切向矫正函数与径向矫正函数联合起来后,可以用如下公式表示:

1c59ff307c2996b7b93bc303308d3b86_298f9ddb50c24ae582f43233e28cd6bc.png

  (5.14)

由于本文测距是面向自动驾驶领域,其对精度要求很高,畸变会对智能驾驶性能造成深远的负面影响。所以在这些应用中,系统必须使用相机标定法求取 p1和p2以及k1、k2和k3,并且这些参数后续测距模型也将应用到。


5.5 相机标定流程


相机标定可以获得畸变参数和相机内外参数,相机的标定可以分为依赖于标定参照物的标定方法和相机自标定方法两种。前者适用于对精度要求高的应用场合。后者由于标定后的计算结果会产生较大的误差,因此不适用于对精确度要求很高的应用场景。为了追求计算精度,本文采取第一种方法进行标定。


采用matlab进行标定:

1b56a0d2f8b32733d6b4b3704a211d79_b676a45572a24442970d4edf412fc761.png

上图为引用图片。

通过采集标定板的图片,然后喂入matlab 获取相机内参。外参。

732a7ff6b88df9053667584fc114f50d_180f74f44a064e57a4898f3f4b52c631.png


5.6 单目测距模型


在完成了相机畸变矫正和相机内外参数的求取之后,建立了如下的单目测距模型,再结合第四章目标检测获取的矩形框就可以进行距离的求取。.

0ee836510a761dc4fb91077f0177c275_f8f2149371c94d07b7e3d36e97890bb1.png

   图5-10 测距模型

测距模型可以看作是一个凸透镜成像的过程。上图中,Xc-Yc-Zc是相机坐标系,xO1y是图像坐标系,O1O为焦距f,x1O2y1是地面坐标系,OO2为摄像头安装高度h。图中有一辆车在地面上,那么其接地点Q必定在地面上。在单目测距过程中,实际物体上的Q点在成像的图片上对应Q'点,Q'点在y轴上的投影为P'点。水平线与Zc轴的夹角为α,Zc光轴与PP'的夹角为β,直线OP与地面x1轴的夹角为γ。


5.6.1目标点的选取


根据第四章的运行结果将获得图5-11中的目标检测框,并且已知相机内外参数,将其联合起来就可以得到测距值。具体的本文首先要选取参考点(目标点),拟选取目标框底部中点位置作为参考点,并根据大量目标框的获取结果。观察到目标矩形框比目标物实际尺寸略大,因此采取偏移的方式对目标参考点进行矫正以保证测距精确度。本文采取让参考点向上偏移d个像素点,并且获取的是目标框的左上角和右下角坐标,因此参考点坐标可以表示为:

1d2beb6f2b1ebc0c3bb33f2469be72ee_9433932bdc3e47a89f4815671a4aede9.png

  (5.15)

其中xL、xR、yR表示红色框的左上角x坐标、右下角x坐标、右下角y坐标。

19993e9b48b045188bdd3984b73478de_658bbfa2a2b64d888fc29f6a2257c918.png

 图5-11 目标点的选取

然而上述目标点适合前方物体在本车正前方的场景,当面对场景如图5-12时,目标物会出现在本车侧方位置。如果再把目标框下部中点作为测距目标点,会出现目标点严重偏离车辆正下方的问题,存在目标点出现在汽车中心位置左侧或中心右侧的现象,这会造成测距精度不高的缺点。因此,进一步的对其进行改进,当目标点(xp,yp)与图像下部中点斜率k满足阈值δ时,就会更新xp'的值,新的xp'可以表示为:

40e9a9eecca2679ad84cec900674f6c3_225dd4a76f3b4d6a99e9dc794a127966.png

  (5.16)

其中λ为偏移权重系数,当k值为负时,λ为负;当k值为正时,λ也为正


测量结果


807109d8beb2406c892eab87483c7ab7_56f7cde583c340ae89542c5255ceb4e4.png

d266ab4082a6fe8a2acaee383467bffd_7ffeb9c294324d9f8511b15f6489aa55.png

实测6.01米


代码


        for path, img, im0s, vid_cap in dataset:
        img = torch.from_numpy(img).to(device)
        img = img.half() if half else img.float()  # uint8 to fp16/32
        img /= 255.0  # 0 - 255 to 0.0 - 1.0
        if img.ndimension() == 3:
            img = img.unsqueeze(0)
        # Warmup
        if device.type != 'cpu' and (old_img_b != img.shape[0] or old_img_h != img.shape[2] or old_img_w != img.shape[3]):
            old_img_b = img.shape[0]
            old_img_h = img.shape[2]
            old_img_w = img.shape[3]
            for i in range(3):
                model(img, augment=opt.augment)[0]
        # Inference
        t1 = time_synchronized()
        with torch.no_grad():   # Calculating gradients would cause a GPU memory leak
            pred = model(img, augment=opt.augment)[0]
        t2 = time_synchronized()
         distance=object_point_world_position(u, v, h, w, out_mat, in_mat):

相关文章
|
机器学习/深度学习 存储 监控
yolov5单目测距+速度测量+目标跟踪(算法介绍和代码)
yolov5单目测距+速度测量+目标跟踪(算法介绍和代码)
|
计算机视觉 Python
Yolov5双目测距-双目相机计数及测距教程(附代码)
Yolov5双目测距-双目相机计数及测距教程(附代码)
|
算法 计算机视觉
yolov5 deepsort-船舶目标检测+目标跟踪+单目测距+速度测量(代码+教程)
yolov5 deepsort-船舶目标检测+目标跟踪+单目测距+速度测量(代码+教程)
|
编解码 前端开发 算法
基于OpenCV的双目摄像头测距(误差小)
首先进行双目摄像头定标,获取双目摄像头内部的参数后,进行测距;本文的双目视觉测距是基于BM算法。注意:双目定标的效果会影响测距的精准度,建议大家在做双目定标时,做好一些(尽量让误差小)。
12798 3
基于OpenCV的双目摄像头测距(误差小)
|
机器学习/深度学习 编解码 监控
计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)-1
计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)-1
|
PyTorch 算法框架/工具
Jetson学习笔记(四):pth(torch模型文件)转trt(tensorrt引擎文件)实操
关于如何使用torch2trt工具将PyTorch模型转换为TensorRT引擎文件的实操指南。
891 1
Jetson学习笔记(四):pth(torch模型文件)转trt(tensorrt引擎文件)实操
|
JSON 人工智能 数据格式
AI计算机视觉笔记二十六:YOLOV8自训练关键点检测
本文档详细记录了使用YOLOv8训练关键点检测模型的过程。首先通过清华源安装YOLOv8,并验证安装。接着通过示例权重文件与测试图片`bus.jpg`演示预测流程。为准备训练数据,文档介绍了如何使用`labelme`标注工具进行关键点标注,并提供了一个Python脚本`labelme2yolo.py`将标注结果从JSON格式转换为YOLO所需的TXT格式。随后,通过Jupyter Notebook可视化标注结果确保准确性。最后,文档展示了如何组织数据集目录结构,并提供了训练与测试代码示例,包括配置文件`smoke.yaml`及训练脚本`train.py`,帮助读者完成自定义模型的训练与评估。
5944 2
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
26491 59
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
数据处理 算法框架/工具 计算机视觉
手把手教你使用YOLOV5训练自己的目标检测模型
本教程由肆十二(dejahu)撰写,详细介绍了如何使用YOLOV5训练口罩检测模型,涵盖环境配置、数据标注、模型训练、评估与使用等环节,适合大作业及毕业设计参考。提供B站视频、CSDN博客及代码资源链接,便于学习实践。
6075 1
手把手教你使用YOLOV5训练自己的目标检测模型
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)