终端_传感器_摄像头驱动和图片编码格式

摄像头驱动

Linux Driver是在内核模式下获取硬件信息,反馈到用户模式下。
     并提供在用户模式下控制内核模式下才能访问的硬件的途径(ioctl)。
ROS Driver则不同,它完全是在用户模式下,
    从Linux层面获取数据。并通过Topic发送Message
	 使得其它ROS Node可以通过topic得到信息的程序。
usb_cam 就是个典型的ROS Driver. 
     usb_cam 只是个应用程序,通过V4L2接口设置Camera并获取数据, 
	 利用ROS接口发布Topic,供其它Node实用.
	   V4L2是Video for linux2的简称,为linux中关于视频设备的内核驱动
	      摄像头在/dev/video*下,如果只有一个视频设备,通常为/dev/video0
		  UVC 全称为USB Video Class,即:USB视频类,是一种为USB视频捕获设备定义的协议标准。
     使用USB摄像头的时候
        摄像头驱动节点,以及获取图像并显示节点;
          同时涉及到一个主题,这两个节点通过这个主题来进行交互

代码分析

src/usb_cam.cpp 最终产生libusb_cam.so, 
     它使用V4L2 接口访问Camera,并提供一些必要的格式转换工具
nodes/usb_cam_node.cpp 最终产生usb_cam_nodd	 
     publishe Image 使用格式为:sensor_msgs::Image.
 可以    使用 image_transport  库去传输压缩格式 Image。

摄像头输出格式

摄像头能够输出的格式 yuyv  uyvy mjpeg 格式
标定的内容包括三部分:内参,外参还有畸变参数
摄像头多路同步触发采集

视频驱动

系统存在video4linux文件夹说明已安装过视频驱动,video4linux目录下每个链接文件代表一个视频设备
  ls /sys/class/video4linux/

查看摄像头是否已经挂载的命令

linux下usb摄像头操作,离不开v4l2框架
V4L2是Video for linux2的简称,为linux中关于视频设备的内核驱动。
   在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/video0下
   
   查看linux 摄像头设备,如果存在有效的摄像头设备,则可以在dev目录下查看
    ls dev/video* -l
	或者: 
	   dmesg | grep video
	   
 占用端口以及实际有相应的设备的关系

格式说明

格式存储相机种类	图像格式	细分	说明
    黑白相机	Mono	Mono8、Mono10、Mono12,Mono10 Packed、Mono12 Packed	
    彩色相机	Bayer	Bayer8、Bayer10、Bayer12 、Bayer10 Packed、Bayer12 Packed	
    彩色相机	YUV	YUV 422 (YUYV) Packed、YUV 422 Packed	
    彩色相机	RGB	RGB8 Packed、BGR8 Packed	两者的区别就是R、B排列是相反的

相机格式

[GenAPI|ROS] image encodings: 
 ['Mono8'|'mono8'] 
 ['BayerRG8'|'bayer_rggb8'] 
 ['BayerRG12'|'bayer_rggb16'] 
 ['BayerRG12Packed'|'NO_ROS_EQUIVALENT'] 
 ['YUV422Packed'|'yuv422'] 
 ['YUV422_YUYV_Packed'|'NO_ROS_EQUIVALENT']

工业相机成像有黑白(gm)与彩色(gc)两种,

分别为两种不同的像素存储格式
灰度图存储中一个像素点表示了其灰度值,灰度图像素使用 Mono 格式存储
彩色图使用的是BayerRG格式,其中通过红绿蓝三种像素点的排列输出彩色图像。

1.Mono:
   mono8,就是2^8=256灰阶,因此你看见的黑白mono8图像,灰度值范围时0-255
   mono10,mono12分别是2^10、 2^12, 图像灰度值范围0-1024、0-4096
  mono10、mono12:分别代表10位、12位黑白图像,在内存中以16位数据存储,不够的数据位填0补充
  Mono10 Packed、Mono12 Packed:这种数据跟上面的mono10、mono12没有本质上的区别,
    差异就是,在数据排列上面,16位数据存储,原来补0的位置,被下一帧图像数据填充,
	这样的好处就是节约了传输带宽,坏处就是小小的增加了解码的难度

2.bayer格式图片是伊士曼·柯达公司科学家Bryce Bayer发明的
 当Image Sensor往外逐行输出数据时,
    如果偶数行(以0开始)为 BGBGBG......,则奇数行为GRGRGR......,即像素总是交错排列,
    像素的序列为GRGRGR.../BGBGBG...(顺序RGB)
 Bayer格式与BGR的转换:
 Bayer分为BayerRG、BayerBG、BayerGB、BayerBG
     在OpenCV中,对以上这4种排列,取排列名称的每行的前两位字母连着读,OpenCV定义为4种格式,分别为:
     BGGR排列 -> BG格式
     RGGB排列 -> RG格式
     GRBG排列 -> GB格式
     GBRG排列 -> GR格式

3.YUV是由bayer数据先转化为RGB,然后RGB转化为YUV数据得到的,其中Y代表亮度值
  数据排列分别是UYVY、与YUYV两种,它们都是16位存储的,Packed就是数据填充方式
  YUV 422 Packed、 -----》 UYVY
  YUV 422 (YUYV) Packed:---》 YUYV
 YUV格式有两大类:planar和packed。
   01.平面格式(planarformats) 对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
   02.紧缩格式(packedformats 对于packed的YUV格式,每个像素点的Y,U,V是连续交替存储的。
  YUV 色彩空间实际上是把一幅彩色的图片分成了一个表示暗亮程度的
    亮度信号(Luminance)Y,和两个表示颜色的UV分别表示色度(Chrominance)和浓度(Chroma)
   YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。		
  

4.OpenCV中对RGB图像数据的存储顺序是BGR

颜色空间

  RGB 的局限性  RGB模式是一种屏幕显示发光的色彩模式
  HSV 颜色空间  Hue(色调、色相) Saturation(饱和度、色彩纯净度) Value(明度)
  HSL 颜色空间  hue(色相)、saturation(饱和度)、lightness(亮度)。

印刷色彩模式-CMYK模式是减色模式

印刷四色模式是彩色印刷时采用的一种套色模式,利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,
形成所谓“全彩印刷”。四种标准颜色是:
    C:Cyan = 青色,又称为‘天蓝色’或是‘湛蓝’;
    M:Magenta = 品红色,又称为‘洋红色’;
    Y:Yellow = 黄色;
    K:blacK=黑色
Advance Photo System 先进进摄影系统
   摄影者在拍摄时,可以设置标准(C 2:3),高清电视(H 9:16),全景 (P 1:3)三种取景框设置,
   这个设置也会存储在胶片中,冲洗时可以自动冲洗出4*6,4*7,4*11三种不同规格的相片

图像数据

  商业相机接口
       视频接口,如 HDMI 、DP、VGA、DVI和Type-C
       USB的视频传输(一般不传音频)。 通常基于UVC、RTP、RTSP协议。
	     基于UVC的摄像头,常见于电脑外设,兼容性好且便宜,但其主要战场在PC(如:网络视频通话等)
  工业相机的接口
        GMSL(Gigabit Multimedia Serial Link)千兆多媒体串行链路 接口 
		   GMSL 是 Maxim 公司推出的一种高速串行接口,适用于视频、音频和控制信号的传输
		     GMSL接口专为视频数据传输设计,分为GSML1、GSML2、GSML3三个版
			  同轴电缆供电 (PoC) 技术
			  GMSL系统中,由于采用了串行器和解串器的架构
		FPD-Link(Flat Panel Display Link) FPD-Link 是 TI 公司的串行总线方案,
	    GigE (千兆以太网)   PoE (以太网供电)
	       图像传感器 处理器  以太网物理层(PHY
		 
		01.usb_cam了,V4L(Video for Linux)USB摄像头驱动在ROS   /usb_cam/image_raw
		    刚开始使用基于 USB 和以太网的摄像头 CPU 负责从 USB /以太网接口读取数据 -
		02.FPGA 的传感器网关
		03.NVidai
	车辆一般采用数字摄像头-camera
  
 车辆标定
    标定的参数可以包括传感器的校准、车辆动力学参数、障碍物检测和跟踪算法等
 数据采集
     	 
 数据回灌
    数据回灌是指将采集到的实际车辆数据再次注入到整车控制器或域控中进行仿真和测试
	    传感器数据包括摄像头、激光雷达、毫米波雷达等的实时处理是硬回灌的一种典型应用
      1.回灌过程中使用的数据质量和一致性		
            Raw图像 是由图像传感器直接输出的未处理数据,涵盖了完整的图像信号信息
	  2.台架--回灌数据分析
	  3.摄像头与域控制器间
	      视频数据的回灌就可以按照原系统的链路,在不做变更的情况下回灌给ECU
		     摄像头输出的是RAW数据,经由ECU的ISP处理后而得到的 YUV数据,通过SoC处理得到具有精确时间戳
		图像采集的过程为:光照在成像物体被反射 -> 镜头汇聚 -> Sensor光电转换-> ADC转换为rawRGB
        RAW数据到ISP中进行转化输出成YUV的数据格式,进行数据落盘			
	        相机内部就已经内置ISP,相机的输出就是yuv格式的数据,数据落盘的方式可以YUV或者yuv压缩
        针对YUV的数据,做H26X的压缩,例如H264、H265的压缩 把YUV数据的落盘成一张张的图片流如JPEG或者MJPEG的格式	
            H264/H265/JPEG/MJPEG编码传输。				
	激光雷达数据
        LiDAR而言,接入到数采设备后,数采设备接收它的UDP报文,也会对雷达进行PTP的授时		
数据安全和隐私保护
    摄像头的图像信号处理(ISP)输出是在 YUV 颜色空间,在 GPU 上进行 YUV 到 RGB 的转换需要约 0.3ms。
	
	YUV和RGB的相同点:对颜色的描述思路和方法不同。
	   RGB将一个颜色拆解为3个纯色的亮度组合,YUV将一个颜色分解为一个亮度和2个色度的组合
存储格式:
   YUV存储格式通常有两大类:打包(packed)格式和平面(planar)格式	

图像格式

Y’UV, YUV, YCbCr,YPbPr等都可以称为YUV。Y 代表明亮度(Luminance或Luma);U 和 V 则代表色度(Chrominance或Chroma)
     采样 YUV422P 也属于YUV422的一种,它是一种Plane模式,即平面模式,
     并不是将YUV数据交错存储,而是先存放所有的Y分量,然后存储所有的U(Cb)分量, 最后存储所有的V(Cr)分量	
      JPEG采用YCrCb的颜色模式,通常叫着YUV,其中Y代表亮度,Cr,cb代表色度和饱和度
  零级语义
      语义分层是为了可以进行工程化的闭环测试。

  NVIDIA GPU 上的专用硬件视频编码器将图像压缩格式从  JPEG 迁移到 HEVC(H.265)  NVENC 支持 H264/H265		  
        
  小马智行 自动驾驶汽车传感器数据处理流水线
格式存储相机种类	图像格式	细分	说明
    黑白相机	Mono	Mono8、Mono10、Mono12,Mono10 Packed、Mono12 Packed	
    彩色相机	Bayer	Bayer8、Bayer10、Bayer12 、Bayer10 Packed、Bayer12 Packed	
    彩色相机	YUV	YUV 422 (YUYV) Packed、YUV 422 Packed	
    彩色相机	RGB	RGB8 Packed、BGR8 Packed	两者的区别就是R、B排列是相反的
YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽
    OpenCV中对RGB图像数据的存储顺序是BGR
	
	
原图--图像的存储格式和大小--图像模型推理需要进行resize处理‌	
    CUDA实现模型推理前处理,Resize和Padding

ROS

  sensor_msgs/Image 和 sensor_msgs/CompressedImage 
  是 ROS 中用于传输图像数据的两种不同消息类型,它们有一些显著的区别:

数据格式:
    sensor_msgs/Image          :原始的未经压缩的图像消息,通常用于传输原始图像数据,例如 RGB、灰度或深度图像。
    sensor_msgs/CompressedImage:经过压缩的图像消息,以减少数据量。压缩格式通常是 JPEG 或 PNG。
数据量:
    sensor_msgs/Image 包含原始图像数据,因此它可能会占用较多的带宽和存储空间。
    sensor_msgs/CompressedImage 则通过压缩算法减少了数据量,因此在传输和存储时需要的带宽和空间更
	
	
	
量产车的摄像头可能不带有ISP,采集的数据可能是raw数据,ISP集成到了域控制器
    TI的TDA4系列就搭载了TI的第7代ISP
研发的摄像头--自带ISP
    每个摄像头传感器提供ISP	 摄像头端,由于高像素带来的散热问题,模组内置ISP将进一步恶化

image sensor raw数据 Bayer raw数据  --ISP-->YUV---> RGB数据	
   摄像头CMOS端集成高性能ISP
   SoC端集成高性能ISP: 摄像头仅保留光学部分和CMOS芯片,将图像处理芯片转移至域控制器
              ISP被集成到视觉处理器(SoC)中,意味着可以同时处理多个摄像头数据,实现成本下降
   ISP(image signal processor)	
	   ARM ISP,其中列出了一些主要的图像处理模块,包括去噪、去坏点,去马赛克,
	      局部和全局tone map,颜色处理和gamma等,其实没画出的还包括增强(sharpen), 去shading等
	    ISP处理每个摄像头大概需要1.6ms延时
		  般技术上会将每个摄像头的图像分为较小的tile(或叫做块),
		   ISP一次处理完一个摄像头的tile然后处理下一个摄像头的tile,如此轮转交织前进
		Arm的模式,是将ISP与CPU、GPU等IP核采用同样的设计理念,客户可以直接将ISP集成到SoC设计中   
	去掉的是大部分为讨好人眼所进行的图像后处理(image post-processing),不是整个ISP

参考

 海康彩色工业相机图像格式转换方法(Bayer转RGB) https://blog.csdn.net/qq_23107577/article/details/113258116
posted @ 2022-07-26 16:11  辰令  阅读(731)  评论(0)    收藏  举报