角点

高精地图中地面标识识别技术历程与实践

自古美人都是妖i 提交于 2019-12-04 11:30:15
导读:本文将主要介绍高德在高精地图地面标识识别上的技术演进,这些技术手段在不同时期服务了高精地图产线需求,为高德地图构建高精度地图提供了基础的技术保证。 1.面标识识别 地面标识识别,指在地图道路中识别出各种类型的地面标识元素,如地面箭头、地面文字、时间、地面数字、减速带、车距确认线、减速丘、人行横道、停止让行线、减速让行线等。这些自动化识别结果将作为生产数据交付给地图生产产线,经过制作后演变成服务于自动驾驶、车载导航、移动导航的地图。 高精地图一般对各个地图要素精度至少有着厘米级的要求,所以相对于普通地图来说需要更高的位置精度,这也是与普通地图识别的最大不同,所以探索如何将地面标识识别得又全又准是我们一直努力的方向。 地面标识识别有两大难点:一是地面标识本身的种类、大小繁多,二是地面标识易被磨损遮挡,清晰度参差不齐,这给高精度识别带来了巨大的挑战。 1)地面标识种类繁多 :实际场景中地面标识种类繁多,在内容、颜色、形状、尺寸等方面均有不同分布。 颜色:比如黄色、红色、白色等 形状:箭头形、各种文字数字形状、条形、多条形、面状、丘状等 尺寸:国标定义的标准箭头长度为9m,但也存在1m~2m甚至1m以下的地面标识元素,尤其减速带以及人行道等尺寸差异会更大,反映到图像中像素个数以及长宽比均会有较大差异。 图1. 部分地面标识 2)磨损压盖多 :地面元素长年累月受车辆

高精地图中地面标识识别技术历程与实践

假装没事ソ 提交于 2019-12-04 11:25:20
导读:本文将主要介绍高德在高精地图地面标识识别上的技术演进,这些技术手段在不同时期服务了高精地图产线需求,为高德地图构建高精度地图提供了基础的技术保证。 1.面标识识别 地面标识识别,指在地图道路中识别出各种类型的地面标识元素,如地面箭头、地面文字、时间、地面数字、减速带、车距确认线、减速丘、人行横道、停止让行线、减速让行线等。这些自动化识别结果将作为生产数据交付给地图生产产线,经过制作后演变成服务于自动驾驶、车载导航、移动导航的地图。 高精地图一般对各个地图要素精度至少有着厘米级的要求,所以相对于普通地图来说需要更高的位置精度,这也是与普通地图识别的最大不同,所以探索如何将地面标识识别得又全又准是我们一直努力的方向。 地面标识识别有两大难点:一是地面标识本身的种类、大小繁多,二是地面标识易被磨损遮挡,清晰度参差不齐,这给高精度识别带来了巨大的挑战。 1)地面标识种类繁多 :实际场景中地面标识种类繁多,在内容、颜色、形状、尺寸等方面均有不同分布。 颜色:比如黄色、红色、白色等 形状:箭头形、各种文字数字形状、条形、多条形、面状、丘状等 尺寸:国标定义的标准箭头长度为9m,但也存在1m~2m甚至1m以下的地面标识元素,尤其减速带以及人行道等尺寸差异会更大,反映到图像中像素个数以及长宽比均会有较大差异。 图1. 部分地面标识 2)磨损压盖多 :地面元素长年累月受车辆

相机标定程序详解<2>

我怕爱的太早我们不能终老 提交于 2019-12-04 07:07:49
#ifndef _CAMERACALIBRATE_H_ #define _CAMERACALIBRATE_H_ #include <opencv2/calib3d/calib3d.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/opencv.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream> using namespace cv; using namespace std; class CameraCalibrate { private: vector<vector<Point3f>> objectPoints; // 角点的世界坐标系坐标 vector<vector<Point2f>> imagePoints; // 角点的像素坐标系坐标 Mat cameraMatrix; // 内参矩阵 Mat distCoeffs; // 畸变矩阵 vector<Mat> rvecs, tvecs; // 旋转矩阵队列和平移矩阵队列,每一幅标定图像都有对应的一个旋转矩阵和平移矩阵 vector<double> calibrateErrs; // 保存矫正偏差 int flag;

opencv标定程序

南楼画角 提交于 2019-12-03 07:12:57
一. 标定原理 摄像机在成像的过程中会在边缘产生显著的畸变,对于普通的摄像机拍摄的图像,会产生径向畸变,切向畸变和其他类型的畸变,我们需要对图像进行矫正处理。使用opencv标定图像的过程,先根据一个标定物体计算旋转矩阵和平移向量,寻找标定物的角点cvFindchessboardCorners;再精确角点的位置(也叫亚像素角点)cvfindCornerSubPix;绘制出所有的标定物角点cvDrawChessboardCorners ;使用标定函数计算摄像机的内参数矩阵和畸变系数,旋转变量和平移变量 cvCalibrateCamera2;根据内参数矩阵和畸变系数求出畸变映射cvInitUndistortMap ,再使用重映射转换图片 cvRemap ,也可以使用cvUndistort2完成所有的事项。 二. 函数简介 1. cvFindchessboardCorners 寻找棋盘上的角点位置 2. cvfindCornerSubPix 精确角点位置 3. cvDrawChessboardCorners 绘制检测到的棋盘角点 4. cvCalibrateCamera2 利用定标来计算摄像机的内参数和外参数 5. cvfindExtrinsicCameraParam2 只计算外参数 6. cvRodrigues2 进行旋转矩阵和旋转向量间的转换 7. cvUndistort2

OpenCV 标定摄像头(Python 版本代码,视频中标定,亲测可用)

让人想犯罪 __ 提交于 2019-12-03 07:11:34
在机器视觉领域,摄像头的标定指通过技术手段拿到相机的内参、外参及畸变参数。 相机内参长这样,利用针孔模型,将 3d 物体透视投影到 2d 的相机屏幕上。 P = [ f x 0 c x 0 f y c y 0 0 1 ] P = \begin{bmatrix} f_{x} & 0 & c_{x} \\ 0 & f_{y} & c_{y}\\ 0 & 0 & 1 \end{bmatrix} P = ⎣ ⎡ ​ f x ​ 0 0 ​ 0 f y ​ 0 ​ c x ​ c y ​ 1 ​ ⎦ ⎤ ​ 畸变参数包括 2 类, 径向畸变和切向畸变 。 径向畸变 最明显的例子就是鱼眼相机的效果。 大家仔细观察上面的图片,它就能很好地介绍径向畸变。越往镜头边缘,线条弯曲的越明显,本来是直线,现在都变成了曲线,消除畸变就是为了把这些曲线尽量还原成本来的样子。 径向畸变可以被纠正,公式如下。 除了径向畸变外,还有一个畸变就是 切向畸变 。 切向畸变 一般来说,是因为相机镜头制造工艺精度不够,透镜和感光器原件没有平行。从而造成了图像的变形。 矫正公式如下: 两个畸变的参数通常用一个向量表示。 但一般只用 4 个参数。 [ k 1 , k 2 , p 1 , p 2 ] [k_{1} ,k_{2},p_{1},p_{2}] [ k 1 ​ , k 2 ​ , p 1 ​ , p 2 ​ ] 如果用

opencv标定单相机参数注意事项

落爺英雄遲暮 提交于 2019-12-03 07:06:45
近期使用opencv进行单相机标定,采用张正友的棋盘格网标定方法,标定过程中的注意事项如下: 1. opencv检测棋盘格角点函数,输出角点坐标顺序有两种可能,顺时针或者逆时针。确保每张图片检测出的角点顺序都一致。 2. 标定计算出的每张相片的外参数,是指物方坐标系经过旋转和平移,转换到像空间坐标系的参数,物方坐标系圆点在棋盘格第一个角点处。 3. 标定前需要输入棋盘格尺寸(单位一般用毫米),用于计算每个棋盘格角点在物方坐标系下的坐标。 4. 若自己打印棋盘格,不要让每个格子的尺寸太大,否知会导致提取角点失败,优先保证有较多的行列数。 标定函数代码连接: https://www.jianshu.com/p/d8f612d417f8 来源: CSDN 作者: 大森林_ 链接: https://blog.csdn.net/weixin_41224763/article/details/88531671

分别使用Matlab和OpenCV标定微距相机

走远了吗. 提交于 2019-12-03 07:05:31
软件: Matlab 2014a,VS 2013 棋盘格标定板: 方格边长0.5mm,横向角点数19个,纵向角点数15个。 相机内参估算 其实在已知相机的某些参数后,不进行标定也可以估计出大致的内参矩阵。 根据上一篇博文中对图像坐标系、相机坐标系和世界坐标系的学习,可以知道相机内参的形式: fx 0 u0 K = 0 fy v0 0 0 1 内参数为fx,fy,u0,v0。其中:fx=f/dx, fy=f/dy;u0,v0为主点坐标。 理想情况下:fx=fy;u0,v0分别为分辨率的一半,所以在已知焦距、图像分辨率和传感器尺寸等参数后,可以对理想情况下的内参进行估算。 以网上经常作为举例对象的NiKon D700相机为例: 焦距 f=35mm,最高分辨率 4256 2832,传感器尺寸 36.0mm 23.9mm 则可计算出: dx=36.0/4256,dy=23.9/2832 —> fx=f/dx=4137.8,fy=f/dy=4147.3 u0=4256/2=2128,v0=2832/2=1416 内参矩阵即为: 4137.8 0 2128 K = 0 4147.3 1416 0 0 1 但在对精度要求比较高的场合还是需要对相机进行标定,得到相机实际的内参和畸变参数。 Matlab标定工具箱 参考博客:http://blog.csdn.net/jameshater

CornerNet 算法笔记

匿名 (未验证) 提交于 2019-12-02 23:43:01
CornerNet 算法笔记 https://blog.csdn.net/u014380165/article/details/83032273 论文:CornerNet: Detecting Objects as Paired Keypoints 论文链接: https://arxiv.org/abs/1808.01244 代码链接: https://github.com/umich-vl/CornerNet 这篇发表在ECCV2018上的目标检测文章给人一种眼前一亮的感觉,简单说一下几个比较吸引我的点:1、将目标检测问题当作关键点检测问题来解决,也就是通过检测目标框的左上角和右下角两个关键点得到预测框,因此CornerNet算法中没有anchor的概念,这种做法在目标检测领域是比较创新的而且能够取得不错效果是很难的。2、整个检测网络的训练是从头开始的,并不基于预训练的分类模型,这使得用户能够自由设计特征提取网络,不用受预训练模型的限制。 我们知道目前大部分常用的目标检测算法都是基于anchor的,比如Faster RCNN系列,SSD,YOLO(v2、v3)等,引入anchor后检测效果提升确实比较明显(比如YOLO v1和YOLO v2),但是引入anchor的缺点在于:1、正负样本不均衡。大部分检测算法的anchor数量都成千上万,但是一张图中的目标数量并没有那么多

openCV---相机内外参标定

匿名 (未验证) 提交于 2019-12-02 23:32:01
https://blog.csdn.net/u012319493/article/details/77622053 来源 张正友相机标定Opencv实现以及标定流程&&标定结果评价&&图像矫正流程解析(附标定程序和棋盘图) https://my.oschina.net/abcijkxyz/blog/787659 将openCV安装目录下的“opencv2.4.8\opencv\sources\samples\cpp”中的有关棋盘的图片复制到工程目录下 这里写图片描述 在“calibdata.txt”中写入以下内容: left01.jpg left02.jpg left03.jpg left04.jpg left05.jpg left06.jpg left07.jpg left08.jpg left09.jpg left10.jpg #include <iostream> #include <sstream> #include <time.h> #include <stdio.h> #include <fstream> #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/calib3d/calib3d.hpp> #include <opencv2

在OpenCV里使用相机校准

老子叫甜甜 提交于 2019-12-02 12:37:20
本文将要学习摄像机有什么类型失真,如何发现相机的内在和外在特性,如何根据这些特性消除图像的失真。有一些针孔相机会给图像带来严重的失真,主要存在这两种类型:径向畸变和切向畸变。径向畸变会导致直线拍摄出来的图里变成曲线,径向畸变越厉害,那么图像的点就会偏离图像中心点越远。比如如下图所示: 从上图可以看到,红线是理论上的直线,但是实际上棋盘线已经偏离了很多,与红线不重合,所有直线都已经变形,这个就是径向畸变,可以使用下面的公式来表示: 同样,切向畸变主要原因是因为相机的镜头平面与物体的平面不是在一个完全平行的两个平面,就会发现有一部分图像比另外一部分图像变小,可以用下面的公式来表示这种变化: 综合上面两个公式,就可以发现主要有5个参数会影响图像的变化: 除此之外,我们还需要一些其他信息,比如相机的内部和外部参数。内部参数是相机特有的特性,比如焦距(fx,fy)和光学中心点(Cx,Cy)。焦距和光学中心可以创建一个相机矩阵,可以用来消除由于特定相机镜头造成的失真,由于相机矩阵是针对镜头的,只要计算一次,就可以应用于所有照片的纠正。这个矩阵构造如下: 外部的参数主要是旋转向量和平移向量,它是用来从三维空间转换到平面坐标系的。在三维重构的应用里,这些失真都必须提前校正。为了计算出来这些参数,需要使用的一些固定模式的照片来进行,比如这里使用棋盘的照片。因为我们已经知道这些点在实际环境里的位置