OpenCV实战之单目相机标定与三维定位
文章平均质量分 73
本课程的主要内容为基于OpenCV对单目相机进行标定,同时配合标靶实现三维空间中标靶的定位。通过该系列课程的学习,你将掌握1)相机的成像原理;2)相机内参、外参的定义与作用;3)PC端相机的数据采集与内参标定;4)如何实现单目相机的测距。
Mega_Li
在图像处理领域工作多年,具有较丰富的算法开发与工程落地经验
展开
-
基于单目相机的标靶三维定位——编程实现
实际运行效果如下图所示,可以观察到标靶坐标系X轴向右,Y轴向下,Z轴向里。当标靶向右移动时,计算得到的X变大,反之变小;接下来实现一个完整的功能函数,以摄像头图像和相机内参为输入,不断计算并显示棋盘格标靶所在坐标系原点相对于相机坐标系的三维坐标;上一章内容中我们描述了基于单目相机实现标靶三维定位的原理,关键步骤为1)计算得到相机的内参和畸变系数;3)计算标靶坐标系到相机坐标系的变换矩阵。首先我们实现一个函数,输入为包含棋盘格的图像,相机内参,输出为标靶坐标系相对于相机坐标系的变换信息,具体实现如下。原创 2024-04-15 17:49:00 · 425 阅读 · 0 评论 -
基于单目相机的标靶三维定位——原理阐述
我们已知棋盘格标靶的各个角点位于棋盘格坐标系的坐标(单位mm,Z为0),同时通过角点检测可得到它们对应的像素坐标,且已知相机的内参与畸变系数,那么我们可以求解得到标靶坐标系到相机坐标系的变换矩阵Tcw。对于标靶左上角角点,它在标靶坐标系的坐标为Pw(0,0,0),则该角点在相机坐标系下的坐标Pc=Tcw*Pw,即得到了它相对于相机坐标系的三维位置。原创 2024-04-11 20:34:13 · 178 阅读 · 0 评论 -
普通相机标定——执行与结果验证
作者用的相机分辨率为1280x720,执行程序的输出结果如下,输出信息包括相机的内参与畸变系数,同时将每幅图像的平均重投影误差也打印了出来。在采集了一定量的数据之后,从中挑选10张左右的图像,使得棋盘格在各张图像上具备不同的位姿,且整体上能够覆盖尽量多的视野,如下图所示。如下图所示标定结束后会新增《corner》和《undistorted》文件夹,分别存放成功检测角点的每幅图像的角点绘制结果和对应的使用了标定得到的内参进行畸变校正得到的校正结果,以查看确定角点检测与畸变校正的正确性。原创 2024-04-08 18:32:05 · 51 阅读 · 0 评论 -
普通相机标定——核心函数编写
这里我们实现一个校验相机内参标定结果的函数,其原理为利用相机标定得到的外参、内参、畸变系数,将棋盘格角点从世界坐标映射到像素坐标,然后对比上述像素坐标与检测得到的像素坐标的差异。该函数实现利用采集好的标定图像进行相机内参的标定,同时调用上述实现的ComputeReprojectionErrors校验标定结果,实现如下。现在我们已经完成了标定图像的采集,如下图所示;接下来就要完成相机的内参标定了。中已经对它们做了简要介绍,这里不再赘述。原创 2024-01-26 16:38:37 · 110 阅读 · 0 评论 -
普通相机标定——功能函数编写
如之前章节内容所述,相机内参标定的流程包括1)采集一些包含棋盘格的相机图像,2)检测棋盘格角点,3)标定计算相机内参与畸变系数,4)验证标定精度与效果。本章我们将开始具体的编程开发,首先完成一些功能性函数的实现。注:相关代码在Windows平台运行。原创 2023-12-29 16:22:36 · 453 阅读 · 0 评论 -
普通相机标定——OpenCV函数讲解(下)
至此OpenCV中有关标定的基础函数基本上介绍完毕,我们后面需要组合使用上述函数完成相关的功能,包括角点检测,相机内参标定,相机外参标定,世界坐标系、相机坐标系、像素坐标系之间的映射计算等。@param objectPoints 世界坐标系下的坐标, 3xN/Nx3的一通道数据或者1xN/Nx1的三通道数据,譬如vector<Point3f>,N是点数。@param newCameraMatrix 畸变校正后图像的相机内参矩阵,默认与输入的内参矩阵相等;@param src 存在畸变的输入图像。原创 2023-12-22 18:07:20 · 865 阅读 · 0 评论 -
普通相机标定——OpenCV函数讲解(上)
我们使用OpenCV进行标定算法的开发,这里使用的是OpenCV3.4.6版本。使用OpenCV标定相机的算法流程如下。Step1.检测之前采集的多张图像中的棋盘格角点像素坐标Step2.利用棋盘格角点的像素坐标、世界坐标,计算相机的内参、畸变系数Step3.利用相机的内参、畸变系数对原始图像做畸变矫正其中第二步已经完成了标定操作,第三步则是验证标定结果。这些操作都可以通过调用OpenCV函数完成,因此我们需要了解相关API的接口和功能定义。原创 2023-06-28 22:32:36 · 701 阅读 · 0 评论 -
普通单目相机标定——准备工作
这里我们还是以普通相机为例(非鱼眼相机)来进行后续的相关标定操作,再回顾下相机的成像模型如下所示。已知相机内参(fx,fy,u0,v0),畸变系数[k1,k2,k3,p1,p2],相机外参[R|T]。世界坐标系中点Pw(Xw,Yw,Zw),投影至像素坐标系点p(u,v)的计算过程如下。1)由世界坐标系变换至相机坐标系,Pc=R*Pw+t2)相机坐标系下点投影至归一化平面Zc=1上,得到归一化坐标Pc’(x,y)=(Xc/Zc,Yc/Zc),以及对应的极坐标(r,θ)原创 2023-06-23 17:38:26 · 1170 阅读 · 0 评论 -
相机成像模型(二)
这里我们给出普通相机(非鱼眼相机)的一种常用的畸变模型如下,对于相机坐标系中的点(Xc,Yc,Zc),做如下转换得到归一化平面中的坐标(x,y,1)与对应的极坐标(r,θ)。用如下多项式表示径向畸变的作用,其中(x,y)为不存在畸变时的点坐标,(xcorrected, ycorrected)为产生了畸变之后的点坐标,其变换关系如下所示。我们将包含(fx,fy,u0,v0)的3x3矩阵称为相机内参矩阵,将[k1,k2,k3,p1,p2]称为相机的畸变矩阵,相机。用如下多项式表示切向畸变的作用。原创 2023-06-08 12:01:20 · 1022 阅读 · 0 评论 -
相机成像模型(一)
相机的成像过程为世界中的某一点映射到图像中某点像素位置,为了量化表达其过程,引入了四个坐标系,分别为世界坐标系、相机坐标系、物理成像平面坐标系、像素坐标系。首先不考虑畸变的影响,我们来推导世界坐标系中某点(Xw,Yw,Zw)映射到像素坐标系的(u,v)的过程。原创 2023-06-06 20:55:59 · 730 阅读 · 0 评论 -
使用CMake和Visual Studio搭建工程并引入OpenCV库
在之前的中介绍了Windows平台中使用CMake编译OpenCV的流程。其中在install目录下生成了数个.cmake文件,其作用就是在使用CMake构建工程中引入OpenCV库时而使用。本文简要介绍如何使用CMake构建VS工程并引入之前编译好了的OpenCV库。原创 2022-09-12 12:25:01 · 1750 阅读 · 0 评论 -
Windows平台下OpenCV的编译与安装
描述了Windows平台下OpenCV+opencv_contrib包的编译与安装流程原创 2022-09-08 15:51:32 · 2234 阅读 · 0 评论 -
基于OpenCV的单目相机标定与三维定位
相机是产生图像数据的硬件,广泛应用于消费电子、汽车、安防等领域。围绕着相机衍生出一系列的研究与应用领域,包括传统的图像处理和基于深度学习的智能应用等。目前大火的自动驾驶中相机也是重要的硬件组成,如环视用鱼眼相机,adas用周视相机。 相机如何实现成像?像素与真实世界中的物体之间是如何联系?这属于相机成像问题,它是图像处理中的经典研究内容,以此为基础衍生出图像质量调试、相机标定、图像变换、立体视觉、单目测距等研究领域。原创 2022-10-24 21:00:15 · 3963 阅读 · 3 评论