1:nuScenes数据集


https://zhuanlan.zhihu.com/p/295549692

nuScenes-mini-data


点云数据集

针对cuda10.0 spconv版本
安装cu100版本
torch-1.3.0+cu100-cp37-cp37m-linux_x86_64.whl
torchvision-0.4.1+cu100-cp37-cp37m-linux_x86_64.whl

2:Culane数据集

CULane由安装在六辆由北京不同驾驶员驾驶的不同车辆上的摄像机收集。收集了超过55小时的视频,并提取了133,235帧。数据示例如上所示。我们将数据集分为88880个训练集,9675个验证集和34680个测试集。测试集分为正常和8个挑战性类别,分别对应于上述9个示例。

https://zhuanlan.zhihu.com/p/295549692

如果使用百度云,请确保driver_23_30frame_part1.tar.gz 和 driver_23_30frame_part2.tar.gz中的图像解压缩后位于一个文件夹“ driver_23_30frame”中,而不是两个单独的文件夹中。

数据集文件夹应包括:

1.培训与验证的图像和注释:

  • driver_23_30frame.tar.gz
  • driver_161_90frame.tar.gz
  • driver_182_30frame.tar.gz 对于每个图像,将有一个.txt注释文件,其中每个行给出车道标记关键点的x,y坐标。

2.测试图像和注释:

  • driver_37_30frame.tar.gz
  • driver_100_30frame.tar.gz
  • driver_193_90frame.tar.gz

3.培训/认证/检测列表:

  • list.tar.gz 对于用于训练的train_gt.txt,每行的格式为“输入图像,每个像素的标签,四个0/1数字,指示从左到右存在四个车道标记”。
  1. Train&val的车道分段标签:
    -laneseg_label_w16.tar.gz ,它是从原始注释生成的。

注意: training&val集的原始注释(不是分段标签)在2018年4月16日之前不正确。要更新到正确的版本,您可以下载“
annotations_new.tar.gz”并覆盖原始注释文件或下载training&val集再次。
可视化:

import os
import numpy as np
import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
import cv2 as cvroot_name = "/home/laneseg_label_w16/driver_23_30frame/05151640_0419.MP4"
img_root_name = "/home/driver_23_30frame/05151640_0419.MP4"
img_path = os.listdir(root_name)
print('img_path:',img_path)
for i in img_path:if os.path.splitext(i)[1]==".png":print (i)img = cv.imread(root_name +"/"+ i)for x in range(img.shape[0]):for y in range(img.shape[1]):px = img[x,y]#print(px)if px[0] == 2:img[x,y] = 200cv.imshow("vis",img)img = cv.imread(img_root_name +"/"+ i.split('.')[0]+'.jpg')cv.imshow("vis_img",img)cv.waitKey(0)

CULane训练的文件结构:

包括存放 车道线关键点的txt;
车道线图片和车道小label1的图片以及对应txt路径

├── annotations_new
│   ├── driver_161_90frame
│   ├── driver_182_30frame
│   └── driver_23_30frame
├── laneseg_label_w16
│   ├── driver_161_90frame
│   ├── driver_182_30frame
│   └── driver_23_30frame
├── laneseg_label_w16_test
│   ├── driver_100_30frame
│   ├── driver_193_90frame
│   └── driver_37_30frame
├── list
│   ├── test_split
│   ├── test.txt
│   ├── train_gt.txt
│   ├── train.txt
│   ├── val_gt.txt
│   └── val.txt
├── show_lane.py
├── test_set
│   ├── driver_100_30frame
│   ├── driver_193_90frame
│   └── driver_37_30frame
└── train_set├── driver_161_90frame├── driver_182_30frame└── driver_23_30frame

3:Camera摄像头

焦距选择,
2.8mm到16mm情况
轨道用12ms
双目6mm,25mm

内参和小孔成像:

https://blog.csdn.net/weixin_41977337/article/details/111941234

估算理论相机内参方法:

通俗的讲像元就是每张图片的最小构成单元,就是一幅图像中每个小像素格,每个像素格均为正方形因此可以理解为像元的长宽是一样的;

(像元尺寸)=(传感器的高度)/(最大像素高度)=(传感器的宽度)/(最大像素宽度)
注:传感器的高度和宽度是定值 相机确定好了就不会改变;
但是图像的像素值是可以改变的,选用最大像素值就是选用没有更改的图片的像素值,即这个情况下的像素宽高比和相机传感器的宽高比是一定的,最后在高度方向算出的像元尺寸是一致的,符合理论。如果选用不同的像素值来计算可能造成宽高比不一致 ,计算出的像元尺寸不符合。

像元的物理尺寸大小:d x =F w/W , dy =Fh / H ;
像素为单位的主点坐标:u0 =X/dx , v0 =Y /dy ;

内参参数包括

针孔相机模型的内参包含6个(f,κ,fx,fy,u0,v0);

f 为相机的焦距,单位一般是mm。

fx = f/dx, fy = f/dy,分别称为x轴和y轴上的归一化焦距。
一个像素的实际物理尺寸在x方向和y方向分别为dx和dy,dx,dy 为像元尺寸。
dx和dy表示x方向和y方向的一个像素分别占多少个单位,是反映现实中的图像物理坐标关系与像素坐标系转换的关键(可以理解为像元密度)。

(u0,v0 )为图像中心,u0,v0表示图像的中心像素坐标和图像原点像素坐标之间相差的横向和纵向像素数偏移量(以像素为单位)。

为了不失一般性,在相机的内参矩阵中,添加一个扭曲参数,在图像物理坐标系中的扭曲因子为。对于大多数标准相机,该扭曲参数为0。

k:表示径向畸变量级,如果k为负值,畸变为桶型畸变,如果为正值,那畸变为枕型畸变,初始值为0。

fx fy

估算方法:

内参标定方法:

https://www.cnblogs.com/wangguchangqing/p/8335131.html

正常情况,单应性矩阵求解:

这样一组匹配点对p1和p2就可以构造出两项约束,于是自由度为 8 的单应矩阵可以通过 4 对匹配点算出组

上述方程组采用直接线性解法通常很难得到最优解,

初值基础上进行非线性优化:

所以实际使用中一般会用其他优化方法,如奇异值分解、Levenberg-Marquarat(LM)算法等进行求解。

那么张正友标定:

上面我们推导的单应性矩阵是在相机运动的情况下进行的,但是相机标定的过程中相机是静止的,而运动的棋盘格标定板。在张正友标定中,用于标定的棋盘格是三维场景中的一个平面P,其在成像平面的像是另一个平面p,
单应性矩阵就是指两个平面之间的映射关系,
准确的来说是世界坐标系和像素坐标系之间的映射关系。

https://blog.csdn.net/qq_42118719/article/details/112347552

标定图片需要使用标定板在不同位置、不同角度、不同姿态下拍摄,最少需要3张,以10~20张为宜。
步骤:
1、从照片中提取棋盘格角点。
2、估算理想无畸变的情况下,五个内参和六个外参。
3、应用最小二乘法估算实际存在径向畸变下的畸变系数。
4、极大似然法,优化估计,提升估计精度.

又由于,R是旋转矩阵,则其是正交矩阵,也就是其任意两个列向量的内积为0,列向量的模为1。

|||||||||||||||||||||||||||||||||||||||||||
故有:
则对于一幅棋盘标定版的图像(一个单应矩阵)可以获得两个对内参数的约束等式



3D平面和2D平面约束
相机标定,双目之间标定
1:基础矩阵
2:单应性矩阵

图像去畸变原理

https://blog.csdn.net/dreamguard/article/details/83096071

函数调用Python
https://blog.csdn.net/qq_30815237/article/details/87622654

径向畸变去除方法

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>using namespace std;
using namespace cv;
//
string distort_image_file="/home/chen/slambook2/ch5/imageBasics/distorted.png";int main() {//读图Mat image_distort=imread(distort_image_file,CV_8UC1);imshow("未去畸变的图像",image_distort);waitKey(0);Mat image_undistort=image_distort.clone();//去畸变参数double k1 = -0.28340811, k2 = 0.07395907, p1 = 0.00019359, p2 = 1.76187114e-05;// 内参double fx = 458.654, fy = 457.296, cx = 367.215, cy = 248.375;//去畸变for (size_t v=0;v<image_distort.rows;v++){for (size_t u=0;u<image_distort.cols;u++){double x=(u-cx)/fx,y=(v-cy)/fy; //畸变的空间坐标double r_2=x*x+y*y;             //计算r的平方//去畸变的P点坐标double x_undistort=x*(1+k1*r_2+k2*r_2*r_2)+2*p1*x*y+p2*(r_2+2*x*x);double y_undistort=y*(1+k1*r_2+k2*r_2*r_2)+2*p2*x*y+p1*(r_2+2*y*y);//去畸变后的图像坐标double u_undistort=fx*x_undistort+cx;double v_undistort=fy*y_undistort+cy;//插值if(u_undistort>=0 && v_undistort>=0 && u_undistort<image_distort.cols && v_undistort<image_distort.rows){image_undistort.at<uchar>(v,u)=image_distort.at<uchar>((int)v_undistort,(int)u_undistort);}else{image_undistort.at<uchar>(v,u)=0;}}}imshow("去畸变的图像",image_undistort);waitKey(0);destroyAllWindows();return 0;
}

Linux基于V4L2的摄像头图像采集

一、V4L2的定义

V4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口,在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/videoN下,N可能为0,1,2,3… 一般为0。

二、工作流程

Step1:初始化摄像头。打开设备->检查和设置设备属性->设置帧格式

Step2:启动采集命令。申请帧缓冲->内存映射->帧缓冲入队列->开始采集->帧缓冲出队列->重新入队列循环采集

Step3:停止采集命令

Step4:关闭摄像头

三、常用的结构体(参见/usr/include/linux/videodev2.h)

struct v4l2_requestbuffers reqbufs;//向驱动申请帧缓冲的请求,里面包含申请的个数
struct v4l2_capability cap;//这个设备的功能,比如是否是视频输入设备
struct v4l2_input input; //视频输入
struct v4l2_standard std;//视频的制式,比如PAL,NTSC
struct v4l2_format fmt;//帧的格式,比如宽度,高度等

struct v4l2_buffer buf;//代表驱动中的一帧
v4l2_std_id stdid;//视频制式,例如:V4L2_STD_PAL_B
struct v4l2_queryctrl query;//查询的控制
struct v4l2_control control;//具体控制的值

四、常用的控制命令

VIDIOC_REQBUFS:分配内存
VIDIOC_QUERYBUF:把VIDIOC_REQBUFS中分配的数据缓存转换成物理地址
VIDIOC_QUERYCAP:查询驱动功能
VIDIOC_ENUM_FMT:获取当前驱动支持的视频格式
VIDIOC_S_FMT:设置当前驱动的频捕获格式
VIDIOC_G_FMT:读取当前驱动的频捕获格式
VIDIOC_TRY_FMT:验证当前驱动的显示格式
VIDIOC_CROPCAP:查询驱动的修剪能力
VIDIOC_S_CROP:设置视频信号的边框
VIDIOC_G_CROP:读取视频信号的边框
VIDIOC_QBUF:把数据从缓存中读取出来
VIDIOC_DQBUF:把数据放回缓存队列
VIDIOC_STREAMON:开始视频显示函数
VIDIOC_STREAMOFF:结束视频显示函数
VIDIOC_QUERYSTD:检查当前视频设备支持的标准,例如PAL或NTSC。

例如:

//打开
#include <fcntl.h>
int open(const char *device_name, int flags);
//关闭
#include <unistd.h>
int close(int fd);

实验使用UVC摄像头,插入后自动生成设备“/dev/vedio0”,
打开关闭实例如下

int fd = open("/dev/video0",O_RDWR);close(fd);

4 CurveLanes

4 TX2T外接双目相机ZED

下载ZED SDK
https://www.stereolabs.com/developers/release/

     chmod +x ZED_SDK_Ubuntu16_v2.7.1.run./ZED_SDK_Ubuntu16_v2.7.1.run

nuScenes、Culane数据集、Camera选型及内参标定、TX2外接双目相机ZED相关推荐

  1. 要matlab标定数据做双目相机矫正OpenCV C++

    双目相机矫正 系列文章来了,C/CPP实现双目矫正(不使用OpenCV)及矫正源码解析正在更新中. 开始本文内容 标定步骤: matlab标定较为准确,命令行中输入stereoCameraCalibr ...

  2. matlab双目相机标定校正_双目相机的标定过程详解!-----MATLAB

    基于双目视觉的测距.三维重建等过程中的第一步就是要进行标定.双目相机的标定过程在网上有很多资料,但是基本都没有matlab官方网址讲的好.所以请参考MATLAB官方文档:https://ww2.mat ...

  3. 基于Matlab-采用张正友标定法对双目相机进行标定

    一.工作环境 操作系统:Win10 开发环境: Matlab 2019b(需要摄像头驱动包) 相机:USB双目相机,支持UVC标准协议 1.安装摄像头驱动包(OS Generic Video Inte ...

  4. ROS+Opencv的双目相机标定和orbslam双目参数匹配

    本文承接ROS调用USB双目摄像头模组 目录 先完成单目标定 双目标定 生成可用于ORB-SLAM2的yaml文件 生成可用于ORB-SLAM3的yaml文件 参考 按照上面链接配置好后,执行 ros ...

  5. 双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python

    双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python 目录 双目三维重建系统(双目标定+立体校正+双目测距+点云显示)Python 1.项目结构 2. Environment 3.双 ...

  6. matlab鱼眼镜头,普通镜头,单目双目相机标定校正(四)

    写这篇文章的目的,是记录相机标定过程和问题,经过试验,记录问题 1.单目相机与双目相机的标定.区别.目的 2.相机拍照时,距离标定板的距离 3.填写参数时.黑白格的大小有影响? 4.参数的设置 5.拍 ...

  7. 视觉SLAM——针孔相机模型 相机标定原理 双目相机模型 深度相机对比

    前言 本博客为主要学习<视觉SLAM十四讲>第5讲.<机器人学的状态估计>第6章6.4.1透视相机.<多视图几何>第5章摄像头模型等SLAM内容的总结与整理. 主要 ...

  8. 小觅双目相机进行ROS标定

    安装image_pipeline包 使用ROS官方提供的 camera_calibration 包对双目相机进行标定 详情可见官网camera_calibration/Tutorials/Stereo ...

  9. 二十.激光、视觉和惯导LVIO-SLAM框架学习之相机内参标定

    专栏系列文章如下: 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程_goldqiu的博客-CSDN ...

最新文章

  1. 虚函数、纯虚函数、虚函数与析构函数
  2. mysql导入导出乱码问题
  3. P4899-[IOI2018]werewolf 狼人【Kruskal重构树,主席树】
  4. 在Spring使用AWS SQS创建消息驱动Bean
  5. 生活窍门 这样用钱就会富足
  6. tmc4361 闭环_TMC4361A-LA
  7. 借给朋友两万块钱,已经两年,每次要钱都各种借口,我该怎么办?
  8. jQuery插件之ajaxFileUpload异步上传
  9. Linux 更换软件源
  10. c语言数组存在哪个地方,C语言数组考点归纳
  11. php 获取农历,PHP获取农历、阳历转阴历
  12. 聊天软件端到端加密使用的什么算法?是否能防止第三方抓包软件?
  13. Linux 网络编程: daytime Service
  14. AWS中国(北京)区域正式在中国商用
  15. 卡片IOT板开发计划
  16. 自适应控制学习——MIT自适应律
  17. 牛逼,Python3竟然内置找茬神器!一起来找茬吧!
  18. 爬楼梯问题/上台阶问题
  19. Windows Server 2008 R2 配置AD(Active Directory)域控制器(图文教程)
  20. 基于 OAuth2 和 Security 的单点登录 原理与实战

热门文章

  1. 带有随机指针链表的深拷贝
  2. buuctf(pwn)
  3. python高效开发实战--djangotornadoflasktwisted(第2版_Python高效开发实战——Django、Tornado、Flask、Twisted(第2版)...
  4. js parseFloat 会丢失精度
  5. 互联网用户账号信息真实性认证(阿里云身份信息实名认证API接口服务)
  6. 电脑端甘特图软件推荐,十分好用
  7. 全国地级市1999—2020年用地面积指标(建设用地\居住用地\绿地\建成区等)
  8. EC20调试过程备份
  9. 支付宝沙箱环境使用详解
  10. 【爬虫系列】Python 爬虫入门(1)