Tips:仅学习记录
技术背景
1、摄像头三种主要接口:MIPI/LVDS/DVP,其中MIPI/LVDS都是串行接口,两者无法不能同时工作,其它组合可以同时工作;DVP是并行串口,相对MIPI传输速率有限,一般用于速率≤5M的摄像头
2、名词解释:
Raw:CMOS或者CCD图像感应器捕捉到的光源信号转化为数字信号的原始数据
RAW RGB data,Rawdata, Raw RGB:CMOS通过滤光片的原始数据 经过彩色插值成RGB
Grey:灰度图,传感器无插值原始数据;
YUV:原始数据tunning之后的数据,非RGB编码
Y:明亮度,Luma、luminance
U/V:色度,Chroma、Chrominance;作用是描述影像色彩及饱和度,分别是Cb ,Cr表示
RGB:三原色编码
Bayer Raw(最常见)
格式:RGGB
、BGGR
、GRBG
、GBRG
例子:RAW10
、RAW12
、RAW14
(每像素 10/12/14 位)
典型应用:CMOS 传感器输出(如 RV1126 摄像头)
YUV Raw(未压缩 YUV)
格式:YUV420
、YUV422
、YUV444
典型应用:视频处理、图像传输
RGB Raw
格式:RGB888
、RGB565
、ARGB1555
典型应用:LCD 显示、GPU 处理
3、Raw数据存储格式:紧凑型和非紧凑型,非紧凑型指raw数据存储按照高字节16bit对齐,少的bit不补数据,紧凑型则首尾相连存储。以word(32bit)为单位。
4、
TV range:Y∈[16,235],Cb∈[16-240],Cr∈[16-240]
Full range: [0,255]
5、对于所有的linux下的camera sensor驱动,包括DVP、MIPI、LVDS,都主要包括下面4个部分:
DTS配置文件:kernel/arch/arm/boot/dts/rv1126.dts
驱动文件:kernel/drivers/media/i2c/sensor.c
menuconfig选项,包括Kconfig、Makefile:kernel/drivers/media/i2c/
ISP sensor还需要iqfile配置文件。
6、
ISP的主要内部构成:ISP内部包含 CPU、SUP IP(各种功能模块的通称)、IF 等设备
ISP的控制结构:1、ISP逻辑 2、运行在其上的firmware
ISP上的Firmware包含三部分:
AP对ISP的操控方式:外置:I2C/SPI。 内置:MEM MAP、MEM SHARE
ISP架构方案:内置、外置
ISP 处理流程:
Bayer、黑电平补偿 (black level compensation)、镜头矫正(lens shading correction)、坏像素矫正(bad pixel correction)、颜色插值 (demosaic)、Bayer 噪声去除、 白平衡(AWB) 矫正、 色彩矫正(color correction)、gamma 矫正、色彩空间转换(RGB 转换为 YUV)、在YUV 色彩空间上彩噪去除与边缘加强、色彩与对比度加强,中间还要进行自动曝光控制等, 然后输出 YUV(或者RGB) 格式的数据, 再通过 I/O 接口传输到 CPU 中处理。
ISP是Image Signal Processor 的简称,也就是图像信号处理器。
DSP是Digital Signal Processor 的缩写,也就是数字信号处理器。
ISP一般用来处理Image Sensor(图像传感器)的输出数据,如做AEC(自动曝光控制)、AGC(自动增益控制)、AWB(自动白平衡)、色彩校正、Lens Shading、Gamma 校正、祛除坏点、Auto Black Level、Auto White Level等等功能的处理。
而DSP功能就比较多了,它可以做些拍照以及回显(JPEG的编解码)、录像以及回放(Video 的编解码)、H.264的编解码、还有很多其他方面的处理,总之是处理数字信号了。ISP是一类特殊的处理图像信号的DSP。
7、Lane
指摄像头的数据传输通道数,其是一种差分传输方式,每个lane代表一条数据传输通道。
问题:
1、为什么RAW 文件数据格式都有两个G?
拜尔阵列有关
-
人眼对绿色更敏感
人眼的感光细胞(视锥细胞)对 绿色最敏感,对亮度(Luminance)贡献最大。
亮度 Y = 0.299R + 0.587G + 0.114B,其中 绿色占 58.7%,远高于红色和蓝色。
这意味着 绿色像素可以更好地捕捉亮度细节,提升图像质量。
-
提高亮度分辨率
Bayer 传感器是单片式的,不能像三片式传感器(3CCD)那样分别采集 RGB 通道。
由于 绿色像素数更多,亮度信息的分辨率更高,降低了后续图像处理中的噪声。
-
色彩插值(Demosaicing)优化
由于绿色像素最多,插值计算时可以更精确地还原红色和蓝色,提高整体图像质量。
例如,红色和蓝色像素较少,在重建 RGB 图像时,主要依赖 绿色像素的邻域插值。
2、为什么不能1:1:1?
如果采用 等量的 R、G、B,例如 3×3 结构(RGB 各 1/3):
亮度信息会不够细腻,导致图像看起来不够清晰。
色彩插值更复杂,计算成本更高。
反而会导致最终解码后的颜色精度下降。
3、除了拜尔阵列,还有啥
Bayer 之外的其他滤波阵列
(1) X-Trans(富士 X-Trans 传感器)
采用 6×6 复杂排列,避免伪色,提高细节表现。
但计算复杂,处理成本高。
(2) CYGM(Cyan-Yellow-Green-Magenta)
用 青色、黄色、绿色、品红 代替 RGB,提高低光性能。
但色彩还原度较低,因此不常见。
(3) RGBW(加白色像素)
增加 白色(W)像素,提高动态范围,常用于 夜拍 传感器。
但色彩精度会下降。
4、YUV有4:2:0/ 4:2:2定义,如何区别?
格式定义如 4:A:B,表示:
"4":代表 水平方向 4 个像素的亮度 Y
"A":代表 色度 U、V 在第一行的采样个数
"B":代表 色度 U、V 在第二行的采样个数
YUV 4:4:4(无子采样,全色彩)一个Y分量对应着一个U分量和一个V分量。一个YUV占8+8+8=24bits,3个字节
YUV 4:2:2(色度采样减半,广播级)垂直完全采样。一个YUV占8+4+4=16bits,2个字节;
YUV 4:2:0(常见视频格式,色度降到 1/4)垂直 2:1 采样。一个YUV占8+2+2=12bits,1.5个字节
YUV 4:1:1(老旧 NTSC 电视),水平方向
YUV 4:2:2 | YUV 4:2:0 |
---|
色度水平采样 | 每 4 个 Y 共享 2 个 U/V | 每 4 个 Y 共享 1 个 U/V |
色度垂直采样 | 每行都有 U/V | 每 2 行共享 1 行 U/V |
色彩精度 | 较高,适合编辑 | 较低,适合压缩 |
存储大小 | 比 4:2:0 大,但比 4:4:4 小 | 更省空间,更适合视频 |
典型应用 | 专业摄像机、HDMI、蓝光 | MP4、H.264、H.265、YouTube |
5、NV16、NV12区别, YU12、YU16区别?
格式 | 采样方式 | 存储方式 | 典型应用 |
---|---|---|---|
NV12 | YUV 4:2:0 | Y 平面 + 交错 UV | H.264/H.265 视频,GPU 加速 |
NV16 | YUV 4:2:2 | Y 平面 + 交错 UV | HDMI 传输,广播电视 |
YU12 | YUV 4:2:0 | Y 平面 + U 平面 + V 平面 | OpenGL,视频解码 |
YU16 | YUV 4:2:2 | Y 平面 + U 平面 + V 平面 | 高质量视频处理 |
NV12(YUV 4:2:0) 是最常见的视频格式,存储效率高,适用于 流媒体、MP4、H.264。
NV16(YUV 4:2:2) 质量更高,适用于 HDMI 传输 & 广播电视。
YU12(YUV 4:2:0) 与 NV12 类似,但 U、V 分开存储(不常见)。
YU16(YUV 4:2:2) 质量高,适用于专业视频编辑。
6、如何区分TV range Y(16-235)?
常见的一些解码帧结构体里面有color_range参数,如果为MPEG 或者 LIMITED 则表示为TV range。
在完全黑画面的时候打印出图像的Y数据,如果Y=16左右,说明YCbCr 为TV range,如果Y=0左右,说明YCbCr为 full range。
7、YUV可以转RGB么?
NV12转RGB
r = y + (140 * (v-128))/100; //r
g = y - (34 (u-128))/100 - (71 (v-128))/100; //g
b = y + (177 * (u-128))/100; //b
8、如何生成lqfile文件
lqfile文件的作用
存储 ISP 图像调试参数,如 白平衡(AWB)、黑电平(BLC)、降噪(NR)、色彩校正(CCM) 等。
在 rkisp 或 rkipc 运行时,加载 lqfile 以优化图像质量。
适用于 摄像头模组的 ISP 适配,不同的摄像头需要不同的 lqfile
。
Rv1126:
1、使用rkaiq_tool生成
2、手动转换json到lqfile
加载:
rkipc --iqfile /path/to/your.lqfile
Or
export RKIQFILE=/path/to/your.lqfile
9、双ISP注意什么?
总 MIPI 带宽受限,如果两个摄像头的总数据量超过 4Gbps,可能会丢帧。
MIPI 时钟源共享,如果两个摄像头的时钟要求不同,可能需要额外调整。
如果两个摄像头型号不同,需要确保:
摄像头驱动(I2C)不会冲突
MIPI 传输格式匹配(YUV / RAW)
ISP 适配(如果使用 RKISP,需要匹配 lqfile)
检查 dmesg | grep rkisp
确保 rkisp1 和 rkisp2 均已注册。
查看 /dev/video*
设备,如果只有一个 ISP 相关设备,则不是双 ISP 模式。
运行 gst-launch
或 rkipc
测试,确认两个 ISP 是否都能采集图像。
检查 DTS 配置,确保 csi0
和 csi1
都已启用。