英伟达TX2的ISP支持情况(24年落伍版)

2024-08-21 11:18:09 浏览数 (2)

Jetson TX2 拥有强大的计算能力,在处理 720p 彩色图像时的每秒帧数可达 100 帧以上

我的好基友玩不明白就给我玩了(我也玩不明白,可是我能摸啊!)

拿来吧你

其实TX2的型号还不少

大的分类就是这个样子的

这个TX2i是三防版本,生而为板我很抱歉

这个是开发板的样子,二代的风扇调控是不激进的,也就是发热的时候才转。

这个就是喜闻乐见的i系列了,我其实没有见过

这个是盒子内部的板卡

我也没有别的板子,不过可以和Nano系列的比较

JetPack 5 支持 Jetson Orin 和 Jetson Xavier 以及生产就绪的功能版本。

JetPack 4 处于持续模式,支持 Jetson Xavier、Jetson TX2 和 Jetson Nano。

然后就是真的很混乱,TX2其实已经停产了。就是说其实现在的程序基本上都是稳定版的。

这个是最新的支持版本

内核版本是这个

一般我们就关注,这个API

加速器,只有NX可以使用(还有这个CV的接口)

单独的有一个RTOS,这个系统Jetson标配

应该是TX也可以使用的,加速传感器输入的

NVIDIA ® Jetson ™在始终开启的电源域内提供内置 Cortex-R5 微控制器,也称为传感器处理引擎 (SPE)。

这个是给的demo

有这个RTOS的区别

T186 处理器(Jetson TX2 系列)和 T194 处理器(Jetson AGX Xavier 系列和 Jetson Xavier NX 系列)

明白了!

这个是TX2的相机构架

NX的,其实感觉文档就是迁移了,应该搞明白一个别的都可以使用了

如果使用ISP,这个Lib argus是首选的

如果不使用ISP,可以使用V4L2的API,UVC相机的驱动是需要自己编译的。

使用拜耳传感器、YUV 传感器或 USB 相机输出 YUV 图像而无需 ISP 处理,不使用 NVIDIA 相机软件堆栈。

相机输出拜尔图像后,通常需要经过以下几个步骤进行处理:

1. 色彩空间转换

拜尔图像是一种原始图像,只包含一个通道的图像数据。为了将拜尔图像转换为可供人眼感知的RGB彩色图像,需要进行色彩空间转换。常用的色彩空间转换方法包括:

  • 去马赛克:去马赛克是指将拜尔图像中的每个像素颜色还原为RGB彩色图像中的每个像素颜色。常用的去马赛克算法包括:
    • 双线性插值:双线性插值是一种简单的去马赛克算法,其基本思想是利用周围四个像素的颜色值来估计当前像素的颜色值。
    • 边缘引导滤波:边缘引导滤波是一种基于边缘信息的去马赛克算法,其基本思想是利用边缘信息来提高去马赛克的精度。
    • 学习基于字典的方法:学习基于字典的方法是一种基于机器学习的去马赛克算法,其基本思想是利用字典来学习拜尔图像和RGB彩色图像之间的映射关系。
  • 白平衡

白平衡是指调整图像的颜色,使其在不同光照条件下看起来自然。常用的白平衡方法包括:

  • 灰度世界假设:灰度世界假设是一种简单的白平衡方法,其基本思想是假设图像中存在一个灰度值为18%的区域,并根据该区域来调整图像的颜色。
  • 自动白平衡:自动白平衡是一种基于图像特征的白平衡方法,其基本思想是利用图像中的特征来估计图像的白平衡参数。

2. 图像增强

图像增强是指改善图像的视觉效果,使其更适合人眼感知。常用的图像增强方法包括:

  • 锐化:锐化是指增强图像的边缘和细节。常用的锐化方法包括:
    • 均值滤波:均值滤波是一种简单的锐化方法,其基本思想是利用周围像素的平均值来替换当前像素的值。
    • 高通滤波:高通滤波是一种基于频域的锐化方法,其基本思想是增强图像的高频成分。
  • 去噪:去噪是指去除图像中的噪声。常用的去噪方法包括:
    • 均值滤波:均值滤波是一种简单的去噪方法,其基本思想是利用周围像素的平均值来替换当前像素的值。
    • 中值滤波:中值滤波是一种基于非线性滤波的去噪方法,其基本思想是利用周围像素的中值来替换当前像素的值。
  • 对比度增强

对比度增强是指增强图像的对比度,使其明暗层次更加分明。常用的对比度增强方法包括:

  • 直方图均衡化:直方图均衡化是一种基于直方图的对比度增强方法,其基本思想是将图像的直方图调整为均匀分布。
  • 自适应对比度增强

3. 图像分析

图像分析是指从图像中提取信息。常用的图像分析方法包括:

  • 边缘检测:边缘检测是指检测图像中的边缘。常用的边缘检测方法包括:
    • Sobel算子:Sobel算子是一种基于一阶导数的边缘检测方法。
    • Canny算子:Canny算子是一种基于多尺度和多方向的边缘检测方法。
  • 特征提取:特征提取是指从图像中提取具有代表性的特征。常用的特征提取方法包括:
    • 尺度不变特征变换(SIFT):SIFT是一种基于局部特征的特征提取方法。
    • 方向直方图特征(HOG):HOG是一种基于梯度方向的特征提取方法。
  • 图像分类:图像分类是指将图像分配到预定义的类别中。常用的图像分类方法包括:
  • 支持向量机(SVM):SVM是一种基于机器学习的图像分类方法。
  • 卷积神经网络(CNN):CNN是一种深度学习模型,在图像分类领域取得了 state-of-the-art 的结果。

4. 图像压缩

图像压缩是指减少图像的数据量,以便存储或传输。常用的图像压缩方法包括:

  • JPEG:JPEG是一种有损压缩算法,其基本思想是利用人眼的视觉特性来丢弃一些视觉上不重要的信息。
  • PNG:PNG是一种无损压缩算法,其基本思想是利用哈夫曼编码和字典编码来减少图像的数据量。

以上是相机输出拜尔图像后处理的常见步骤。

相机输出YUV图像后,通常需要经过以下几个步骤进行处理:

1. 色彩空间转换

YUV图像是一种颜色空间,其中Y代表亮度分量,U和V代表色度分量。YUV图像通常用于视频压缩和传输,因为它比RGB图像更节省空间。

YUV的图像是这样的

如果需要将YUV图像转换为RGB图像,则需要进行色彩空间转换。常用的色彩空间转换方法包括:

  • BT.601/YCbCr:BT.601/YCbCr是一种常用的YUV色彩空间,其基本思想是将RGB图像中的红色分量转换为Y分量,将绿色分量转换为Cb分量,将蓝色分量转换为Cr分量。
  • BT.709/YCbCr:BT.709/YCbCr是一种用于高清晰度电视(HDTV)的YUV色彩空间,其基本思想与BT.601/YCbCr类似,但其转换矩阵不同。

拜尔图像和YUV图像没有先后顺序,它们是两种不同的图像格式。

拜尔图像是一种原始图像格式,它只包含一个通道的图像数据。每个像素只包含一个颜色分量,通常是红色、绿色或蓝色。拜尔图像通常由相机传感器直接输出。

YUV图像是一种颜色空间,其中Y代表亮度分量,U和V代表色度分量。YUV图像通常用于视频压缩和传输,因为它比RGB图像更节省空间。

拜尔图像和YUV图像可以相互转换。拜尔图像可以转换为YUV图像,也可以将YUV图像转换为拜尔图像。

在实际应用中,拜尔图像通常会先转换为RGB图像,然后再转换为YUV图像。这是因为RGB图像更易于处理和分析。

以下是一些拜尔图像和YUV图像的常见应用:

  • 摄影:拜尔图像通常用于数码相机,因为它们可以由相机传感器直接输出。
  • 视频:YUV图像通常用于视频压缩和传输,因为它比RGB图像更节省空间。
  • 计算机视觉:拜尔图像和YUV图像都可以用于计算机视觉任务,例如图像分析和图像识别。

拜尔图像和YUV图像各有优缺点。

拜尔图像的优点是:

  • 信息量更丰富:拜尔图像包含一个通道的原始图像数据,每个像素只包含一个颜色分量,通常是红色、绿色或蓝色。这使得拜尔图像保留了原始图像的更多信息。
  • 计算量更小:拜尔图像的去马赛克算法通常比YUV图像的色彩空间转换算法更简单,因此计算量更小。

拜尔图像的缺点是:

  • 难以处理:拜尔图像只包含一个通道的图像数据,因此难以直接进行处理和分析。
  • 色彩失真:拜尔图像的去马赛克过程可能会导致色彩失真。

YUV图像的优点是:

  • 易于处理:YUV图像通常包含三个通道的图像数据,每个通道代表一个颜色分量。这使得YUV图像更容易进行处理和分析。
  • 色彩保真度高:YUV图像的色彩空间转换过程通常不会导致色彩失真。

YUV图像的缺点是:

  • 信息量较少:YUV图像通常经过压缩,因此信息量较少。
  • 计算量较大:YUV图像的色彩空间转换算法通常比拜尔图像的去马赛克算法更复杂,因此计算量较大。

总而言之,如果图像分析任务需要尽可能多的信息,并且对计算量不敏感,那么拜尔图像可能是更好的选择。如果图像分析任务需要易于处理和分析的图像,并且对信息量和色彩保真度要求不高,那么YUV图像可能是更好的选择。

以下是一些具体的建议:

  • 如果进行图像分割或目标检测等任务,那么拜尔图像可能是一个更好的选择,因为它们包含更多的信息。
  • 如果进行图像分类或特征提取等任务,那么YUV图像可能是一个更好的选择,因为它们更容易处理和分析。
  • 如果进行视频分析,那么YUV图像通常是更好的选择,因为它们通常用于视频压缩和传输。

API文档在这里

libargus 的基本操作是捕获:从传感器获取图像并将其处理成最终输出图像。目前,Android 和所有 Jetson Linux 平台都支持 libargus。

Libargus 旨在满足许多基本要求:

  • 支持多种用例(传统摄影、计算摄影、视频、计算机视觉和其他应用领域)。为此,libargus 是一个基于框架的 API;每次捕获均由明确指定如何执行捕获的显式请求触发。
  • 支持多种平台,包括L4T和Android。
  • 高效、简单地集成到应用程序和更大的框架中。为了支持这一点,libargus 使用 EGLStreams 提供图像,这些图像由 OpenGL 和 Cuda 等其他系统组件直接支持,并且在交付给消费者期间不需要缓冲区副本。
  • 扩展的元数据以及每个输出图像。
  • 支持多个传感器,包括对独立传感器的单独控制以及对同步多传感器配置的访问。(当前版本不支持后者。添加支持后,仅在某些 NVIDIA 平台上可用。)
  • 版本稳定性和可扩展性,由不变的虚拟接口和供应商添加专用扩展接口的能力提供。

Libargus 提供了许多不同领域的功能:

  • 使用多种设置进行捕捉。
  • 可选的自动控制(例如自动曝光和自动白平衡。)
  • 以不同方式使用 EGLStream 输出的库;例如,jpeg 编码或直接应用程序访问图像。
  • 通过 libargus 事件和 EGLStream 元数据传递元数据。
  • 图像后处理,例如降噪和边缘锐化。
  • 通过同步事件队列通知错误、图像采集开始和其他事件。

libargus 未提供的功能:

  • 自动对焦。(计划在以后的版本中添加。)
  • YUV 图像的重新处理(例如 Android 的零快门延迟功能所需的处理。)
  • 拜耳(原始)图像的再处理。(计划在以后的版本中添加。)
  • 拜耳(原始)图像的输出。(计划在以后的版本中添加。)

扩展的函数

ISP 引擎仅适用于拜耳传感器。图像信号处理器 (ISP) 具有从 Bayer 转换为 YUV 的能力。

Jetson TX1/TX2/Xavier/Nano 有两个 ISP,nvcamerasrc 元素是由 NVIDIA 创建的,它可以访问 ISP。

当在 Jetson (TX1/TX2/Xavier/Nano) 上开发驱动程序时,可以通过 2 种不同的方式捕获它。

一种是将 V4L2 标准 API 与 GStreamer (v4l2src)、v4l2-ctl 或 yavta 等应用程序结合使用。这是直接捕获,Jetson 不会对图像进行任何颜色转换或更改,格式保持传感器给定的格式。

第二种方式是使用 NVIDIA 专有软件,例如 GStreamer nvcamerasrc/nvarguscamerasrc elements 或 libargus,当使用这些应用程序时,帧将通过内部 Jetson 的 ISP,执行去拜耳处理(从 RAW 到 YUV 格式的转换)和颜色转换/基于 ISP 可配置参数的更正。

事实上,ISP并没有完全开放

3个带宽的大小

TX2的转换:专用RAW转YUV处理引擎处理速度高达1.4Gpix/s | MIPI CSI 2.0 高达 2.5Gbps(每通道)|支持 x4 和 x2 配置(最多 3 个 x4 通道或 6 个 x2 通道摄像机)

支持最多 6 个 MIPI CSI 摄像头,可以使用 GStreamer 或 libargus 捕获它们。 nvcamerasrc 集成的驱动程序,因此 ISP 可用于 Debayer。TX2 支持 4 个相机 MCLK,而 TX1 仅支持 2 个。

MCLK 代表 主时钟。它是主处理器(通常是片上系统或 SoC)提供的参考时钟信号,用于相机模块中的图像传感器。MCLK 用于同步图像传感器的操作并确保其以正确的帧率捕获图像。

MCLK 的频率通常在 10 MHz 到 200 MHz 之间,具体取决于特定的图像传感器和相机模块。更高的 MCLK 频率允许图像传感器以更高的帧率捕获图像,但它也需要更多的功率并可能会产生更多噪声。

除了 MCLK 之外,图像传感器还可能需要其他时钟信号,例如 像素时钟 (PCLK) 和 垂直同步 (VSYNC)。PCLK 用于时钟图像传感器的输出,VSYNC 信号用于指示每个帧的开始。

MCLK 是相机模块时序系统的重要组成部分,在确保相机捕获高质量图像方面起着至关重要的作用。

以下是 MCLK 在相机模块中的一些功能:

  • 为图像传感器提供参考时钟信号
  • 同步图像传感器的操作
  • 确保图像传感器以正确的帧率捕获图像
  • 影响图像传感器的功耗和噪声

什么是V4L2?

在Linux下,所有外设都被看成一种特殊的文件,成为"设备文件",可以象访问普通文件一样对其进行读写。

一般来说,采用V4L2驱动的摄像头设备文件是/dev/v4l/video0。为了通用,可以建立一个到/dev/video0的链接。V4L2支持两种方式来采集图像:内存映射方式(mmap)和直接读取方式(read)。

V4L2在include/linux/videodev.h文件中定义了一些重要的数据结构,在采集图像的过程中,就是通过对这些数据的操作来获得最终的图像数据。Linux系统V4L2的能力可在Linux内核编译阶段配置,默认情况下都有此开发接口。V4L2从Linux 2.5.x版本的内核中开始出现。

V4L2支持内存映射方式(mmap)和直接读取方式(read)来采集数据,前者一般用于连续视频数据的采集,后者常用于静态图片数据的采集,本文重点讨论内存映射方式的视频采集。

应用程序通过V4L2接口采集视频数据分为五个步骤:

  1. 首先,打开视频设备文件,进行视频采集的参数初始化,通过V4L2接口设置视频图像的采集窗口、采集的点阵大小和格式;
  2. 其次,申请若干视频采集的帧缓冲区,并将这些帧缓冲区从内核空间映射到用户空间,便于应用程序读取/处理视频数据;
  3. 第三,将申请到的帧缓冲区在视频采集输入队列排队,并启动视频采集;
  4. 第四,驱动开始视频数据的采集,应用程序从视频采集输出队列取出帧缓冲区,处理完后,将帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据;
  5. 第五,停止视频采集。

什么是RAW格式?

相机输出的 RAW 数据是一种未经处理的图像数据格式,它保留了图像传感器捕获的所有原始信息。RAW 数据通常以文件形式存储,扩展名通常为 .RAW、.ARW、.CR2、.NEF、.ORF 等,具体取决于相机厂商和型号。

RAW 数据的格式通常由相机厂商定义,但通常包含以下信息:

  • 图像元数据: 包括图像的尺寸、分辨率、色彩空间、拍摄日期和时间等信息。
  • 原始像素数据: 每个像素的数据,通常使用 12 位或 14 位表示每个颜色分量 (R、G、B)。
  • 白平衡信息: 相机用于校正图像颜色的白平衡设置。
  • 感光度信息: 相机的 ISO 感光度设置。
  • 曝光信息: 相机的曝光设置,包括快门速度和光圈值。

RAW 数据的优点是:

  • 保留了图像的所有原始信息, 允许在后期处理中进行更大的灵活性。
  • 更高的图像质量, 因为原始数据没有经过压缩。
  • 更大的动态范围, 允许在阴影和高光区域保留更多细节。

RAW 数据的缺点是:

  • 文件体积较大, 因为它们包含未经压缩的原始数据。
  • 需要特殊的软件进行处理, 普通的图像编辑软件通常无法处理 RAW 数据。
  • 处理起来更耗时, 因为需要将 RAW 数据转换为可视化的图像格式。

可以使用该接口与NVIDIA V4L2驱动程序进行通信,而无需使用相机核心库。使用此路径从传感器捕获 RAW 数据。

我还没有玩过写驱动:

这是在设备树里面写启用的相机的个数

如果模块在板子上面,还可以设置电源

MIPI摄像头的设置

可以输出的编码方式

上面是1.0的驱动

牛逼

换个文档吧,一会儿看的又想买了。

看TX2吧

TX2支持虚拟ISP???

也就是车上有很多摄像头,使用这个协议转换成串行的走

Gigabit Multimedia Serial Links (GMSL)是Maxim公司推出的一种高速串行接口,适用于视频、音频和控制信号的传输,使用50Ω同轴电缆或100Ω屏蔽双绞线(STP)电缆时的距离可达15m或更长。

GMSL 专门设计用于高级驾驶辅助系统 (ADAS) 和摄像头监控系统 (CMS)。它可以提供高达 6 GB/秒的视频传输速度。它使用 STP 或同轴电缆,既便宜又抗 EMC 干扰。

牛逼

TX2 可以4路

聚合数量

11个

Argus NvRaw ( nvargus_nvraw)是一款拜耳原始命令行界面 (CLI) 捕获工具,适用于在 Jetson Linux (L4T) 上运行的 NVIDIA ® Jetson™ 平台。

它使用 nvraw 格式将捕获的图像及其元数据保存在文件中,它还可以以 JPEG、YUV 和无头原始格式保存捕获的图像。它接受用户指定的手动曝光控制参数。

Nvraw 格式,也称为Bayer Raw 格式,nvraw 是 NVIDIA 专有的文件格式,用于保存 Bayer Raw 图像捕获和相关元数据。nvraw 文件的文件扩展名为.nvraw。如果图像包含多次曝光(例如 HDR 图像捕获),则 nvraw 文件也可以保存各个曝光。

Nvraw 文件主要用于在相机驱动程序开发过程中调整和提高图像质量。

这个库我应该以前写过,不记得了

我看过以后发现不是做实时处理的,而是训练前的前处理

这个图也展示的很清楚

其实就是ROI图像,缩小训练

至于信号处理库,我现在才知道,原来都是在CUDA的完整包里面

英伟达可以研究的东西太多了!

留个谜题,猜猜这个是什么?

代码语言:javascript复制
https://github.com/CVCUDA/CV-CUDA
代码语言:javascript复制
https://cvcuda.github.io/samples/python_samples/classification/postprocessor_cvcuda.html
代码语言:javascript复制
https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3273/index.html#page/Tegra Linux Driver Package Development Guide/argus_nvraw_tool.html#
代码语言:javascript复制
https://docs.nvidia.com/jetson/archives/r34.1/DeveloperGuide/text/SD/CameraDevelopment/JetsonVirtualChannelWithGmslCameraFramework.htm
代码语言:javascript复制
https://www.cnblogs.com/yangjiquan/p/11369170.html
代码语言:javascript复制
https://developer.ridgerun.com/wiki/index.php/JetsonTX2/Getting_Started
代码语言:javascript复制
https://developer.ridgerun.com/wiki/index.php/NVIDIA_Jetson_ISP_Control
代码语言:javascript复制
https://docs.nvidia.com/jetson/spe/rt-faq.html

0 人点赞