Showing Posts From
Image sensor
- 15 Sep, 2025
短红外(SWIR)传感器的工作原理与应用总结
本文简要总结了基于短波红外光频段成像的SWIR传感器及其成像系统的技术概念以及在工业和生活中的常见应用,为理解和在实际产品中应用该技术做好基础。 SWIR技术简介 SWIR:Short Wave InfraRed Light,短波红外光。波长范围通常在0.9-1.7um波段(也有一种说法是0.9-2.5um波段)。 下图是红外光在频谱上所在的波段。总的来说,红外光波段可以分为SWIR短红外、MWIR中红外、LWIR远红外这几个部分。各个部分对应的波长范围大致如下图所示。 !image.png 从曝光成像的工作原理上讲,SWIR传感器与我们常见的可见光谱的图像传感器的工作机理类似,都依赖于被拍摄物体材料的反射特性:外部光照中所包含的光子要么被物体反射,要么被物体吸收,从而产生高分辨率图像所需的对比度和阴影。 - 这一点与MWIR和LWIR波段的成像原理差异很大,MWIR和LWIR波段的成像依赖于物体本身的黑体辐射,辐射量与温度相关。_因此,可见光和SWIR的成像要依赖于外部的光照情况,外部光照照射到物体上被反射后进入镜头成像,因此其成像不是全天候的,晚上一般需要额外补光;而MWIR和NWIR成像依赖于物体本身的黑体辐射,因此可支持全天候24h成像。_ 因此,SWIR相机所产生的图像,在灵敏度和细节上与可见光相当,具有鲜明的阴影和高对比度。当然,SWIR的成像是单色的。 SWIR传感器的工艺及其限制 常见的可见光的图像传感器都是基于标准硅工艺生产的,因为硅元素的吸收系数在1100nm波长附近迅速下降,因此基于硅工艺的光传感器的实际有效检测的上限一般为1000nm。也就是说,硅对1000nm以上的光子吸收能力极弱,导致在该波长段的信号响应几乎为0,因此硅工艺不适合用于进行SWIR成像。 SWIR成像传感器一般采用InGaAs工艺,其对光子的探测波长上限为约1700nm,因此InGaAs传感器可以有效的吸收并且转换900-1700nm范围内的光子,是SWIR成像领域的主流选择。 InGaAs传感器的问题则在于: - InGaAs不能直接在硅晶圆上生长,材料昂贵,工艺复杂且良率低,导致传感器的生产成本和价格均很高。 - InGaAs传感器的像素尺寸缩小以后会影响图像质量,难以做到CMOS一样的高集成度和大阵列。 SWIR传感器的典型应用 夜视成像 夜间的图像监控对于普通的可见光相机而言始终是个难点。其主要的原因是夜里并非没有光线,而是处于可见光频段的光线能量太弱,进入可见光图像传感器的光子太少,不得不通过外部补光以及提升增益(图像质量变差)、增大pixel size和lens光圈(成本太高)的方式缓解问题。而在900-1700nm频段的短波红外光频段,大气辉光(nightglow)、星光和1.5 µm激光反射等仍然充足,SWIR 传感器(InGaAs)可以把这些人眼看不见的光转成高分辨率图像。 因此在夜视成像领域,SWIR相比普通的可见光相机而言,图像亮度要比可见光高5-7倍;而相比工作在LWIR频段的热成像仪而言,图像的分辨率又要高很多。 以下左图为可见光相机的成像,右图为相同环境下SWIR相机的成像: !image.png 水果水分/农产品拣选 水对900-1700nm频段的光线有着比较强的吸收特性,在1.45µm最强,1.95µm次之。一般的农产品和水70%都是水,含水量越高的情况下,该物体对于SWIR频段光线的反射率越低,呈现在SWIR图像中就越黑。而农产品和水果的任何生理变化(成熟、碰伤、腐烂、糖积累)都会改变其内部的水分分布或糖分浓度,于是在SWIR的图像里就会出现肉眼看不见的明暗反差。 !image.png 穿透雾霾成像 在雾霾天气的情况下,雾霾的颗粒直径普遍在0.1-1um之间,该范围的雾霾颗粒对于可见光的反射最大,而对于SWIR波段的散射要小很多,因此更多SWIR频段的光线可以透射雾霾颗粒,在SWIR相机中成像的图像白雾层就会大幅减薄。因此,在浓雾、雾霾等天气状况中,使用SWIR成像系统在边境、机场、海岸等监控领域中,其成像比可见光相机要清晰很多。 !image.png 高温检测 当物体的温度超过140摄氏度时,会越来越多地向外发射红外辐射,这些辐射的红外光可以通过SWIR技术检测到。当物体越热的时候,它发出的红外辐射就越多,物体在图像中就越亮。这就意味着可以使用SWIR技术在工业监测等领域中对温度检测提供竞争优势,因为它可以实现材料和产品的非接触式温度监测。这在传统温度测量方法不切实际或危险的环境中特别有用。 例如下图是电烙铁在400摄氏度的情况下,在普通的可见光相机(左图)以及SWIR相机(右图)下的对比图片。 !image.png 参考资料 - What is SWIR? | Edmund Optics - What is SWIR? | SWIR Vision Systems - Understanding SWIR: Applications and Benefits- Oxford Instruments - Clear Align Knowledge Center-Optical Engineering Insights & Resources || Why SWIR is Ideal for Border Surveillance & Maritime Imaging
- 27 Mar, 2025
图像传感器和镜头的CRA参数解释及其匹配
CRA:Chief Ray Angle,也就是主入射光线角度。对于镜头和Image Sensor而言,虽然两者都有CRA参数,但是其实际定义是明显不同的。 镜头的CRA参数 Lens的CRA参数则由镜头的设计本身决定,表示从镜心到成像面的光线角度分布模式。也就是就是镜头各个位置的主光线(过入瞳中心的光线)通过光学系统到达像面以后,与像面交点位置处的法线之间的夹角。 如下图所示,镜头每个位置的主入射光线角度是不同的,因此也就意味着,镜头的CRA参数个固定值,而是根据镜头视场角位置的不同而不同。例如下图从上到下展示了ZEMAX镜头库Double Gauss 28 Degree Field光学系统在14°、10°以及0°视场对应的主光线角度。 !image.png 从以上的镜头光线成像原理图上可以看出,镜头视场角越大,其对应的CRA的角度也越大。镜头中心位置即0度视场角,可以认为其CRA为0,越到镜头的边缘位置,CRA角度越大。我们通常意义上所说的镜头CRA角度,一般指的就是镜头边缘位置的CRA角度。 下图就是某个型号的镜头不同像面高度归一化后对应的CRA,镜头中心的CRA为0,镜头像面上不同高度的主光线角度不同,从而可以得到一条随像面高度变化的CRA曲线。 !image.png 图像传感器的CRA参数 相比于镜头的CRA参数,Lens的CRA参数要稍微复杂一点。 首先,Image Sensor的每个像素上都有一个微小的微透镜(Micro Lens),用于把镜头透入的光线尽可能多的聚焦到其下的光电二极管,实现光电转换。从下图可以看到,在光电二极管的上面增加Micro Lens,可以把更多的光线通过这个微型透镜折射到感光面上,从而提升光电二极管上的光通量,这就是增加Micro Lens的主要作用。 !image.png 按照以上微透镜的结构,如果从镜头透入的光线角度是垂直入射到微透镜上(例如图像传感器和镜头中心区域),那么这些光线就都可以通过微透镜进入像素阵列中的光吸收区域。但是,如果镜头投入的光线是以一定的角度斜射到到微透镜上(例如图像传感器和镜头的边缘位置),经过微透镜折射后,这些光线就会照射到像素内部的金属层上面(如上图的灰色区域),无法照射到中心吸收区域,这样就会使得光吸收区域光照强度下降,从而使边缘像素的灵敏度下降、光学串扰增加。如下图所示。 !image.png 以上问题就引出了Micro Lens的平移设计。 Micro Lens的平移设计 针对以上图像传感器边缘位置的像素感光问题(通过镜头的光线斜射到微透镜上),需要将微透镜平移一定的距离,这样可以使得光线经过折射以后,将未平移透镜之前损失的光线,重新聚焦到光吸收区域。如下图所示,把微透镜的位置向中心位置平移一定距离以后,以一定角度入射的光线会被微透镜折射到该像素的中心吸收区域。 !image.png 从以上镜头CRA的光学理论了解到,通过镜头进入图像传感器感光面的主入射光线角度,与镜头以及Sensor感光面的位置有关。一般的光学应用中,镜头和Sensor的光轴中心是重合的,那么在Sensor的中心位置,从镜头透入的主光线角度基本上是垂直照射在Sensor中心像素的微透镜上,因此大部分光线就可以被微透镜折射到中心吸收区域。 而从中心向四周延展的过程中,镜头透入光线的主光线角度随之越来越大,此时就可以通过对Sensor四周区域像素的微透镜进行以上平移的处理。平移的方向和幅度大小应该跟这个位置上镜头主入射光线的角度相关。这就是镜头与Sensor之间的CRA匹配的问题。 Sensor的CRA同样与像素所在位置相关 同样的逻辑,对于Image Sensor的设计而言,Sensor像素上微透镜的平移方向和幅度与其应接收到的透入光线的主光线角度匹配,这就是Sensor所要求的CRA参数。同样的,以Sensor中心为轴,Sensor中心的CRA为0,向四周延申的不同位置的Sensor区域的CRA不同,越到Sensor的边缘,CRA越大。 以下是GC4653的CRA数据,Sensor中心位置CRA为0,边缘位置接近10度。而一般而言,我们在Sensor数据手册上看到的CRA数据就是其边缘位置最大的CRA角度。 !image.png Sensor和镜头的CRA匹配选型 在进行Image Sensor和镜头的选项流程中,需要特别注意两者CRA的匹配,最理想的情况为镜头的CRA和sensor的CRA产生了完美的匹配,此时光接收效率最高。但实际应用中很难做到两者的完美匹配,此时应确保镜头CRA与Sensor CRA的差异控制在2-3度以内。 !image.png 如果Sensor和镜头的CRA不匹配的话,后期调试的图像效果会存在难以解决的问题: - 当Lens CRA > Sensor CRA时,镜头射入的光线会超出Sensor微透镜的矫正能力,导致后期图像出现相邻像素串扰(Color Shading)的问题,具体表现为图像边缘偏色。 - 当Lens CRA
- 26 Nov, 2024
基于CV4003IoT Sensor实现Pre Roll电池摄像头方案
电池摄像头的Pre Roll工作模式 之前我在另外一篇笔记(Ring Doorbell的Pre Roll功能及其工作原理)中详细总结和分析了Ring Doorbell中大力推广的Pre Roll模式的工作原理和系统设计框架。 在电池摄像头Pre Roll模式的宣传推广和技术产品演进过程中,OmniVision始终处于相对比较积极的状态之中,所以目前能够找到的关于Pre Roll模式设计方案的公开资料,大多数都来自于OmniVision。下图就是从OmniVision公网宣传资料上得到的一张关于pre roll模式的系统设计示意图: !image.png 相比于普通的BPI Camera产品而言,Pre Roll Camera在系统设计方面最明显的部分就是上图的Always On Camera Block部分,其他部分跟别的BPI Camera部分的设计别无二致。在Always On Camera Block中,主要包含了一个Image Sensor(OS04C)和一个Pre Roll图像协处理器OA7600,这两个部分在工作中都处于长期上电的状态,只不过Image Sensor设置为定时唤醒曝光一帧图像送入协处理器进行Motion判断和Pre roll存储,然后继续休眠以降低Sensor所产生的功耗,而OA7600这个Pre Roll协处理器就负责接收来自Image Sensor的time elapse图像帧,进行Motion判断并把图像帧滚动保存在其内部的RAM Buffer中。当协处理器的Motion判断有效的情况下,立即同时唤醒Image Sensor和后一级的应用处理器,并在后续工作中把Pre Roll RAM Buffer中缓存的time elapse图像帧传入应用处理器,与实时图像一起压缩存储为事件录影文件。 以上方案存在的问题是:Always On Camera Block部分的系统设计有些复杂了,导致产品的实现难度较大,成本也会比较高。这个问题使用创视微电子的CV4003IoT Image Sensor可以得到非常完美的解决。 CV4003IoT Image Sensor的规格简介 CV4003IoT是创视微电子推出的一颗400万像素CMOS Image Sensor。相比于其他的图像传感器,其最大的特色是能够在Sensor内部支持Always On Pre Roll和Smart Motion Detection以及Wake on Motion应用。相当于是直接在Image Sensor内部独立的完成了以上OmniVision框图中Image Sensor+Pre Roll协处理器的工作,既简化了系统设计与实现的复杂性,也降低了开发难度和成本。 CV4003IoT的主要规格: - 400万像素,2560x1440即2.5K。最高可通过MIPI接口输出2.5K 50fps的10bit Bayer RAW图像。 - Sensor尺寸1/3英寸,pixel size是2.0um。 - 图像接口:MIPI(1lane/2lane),DVP(8bit),SPI(2ch/4ch) - 可支持stagger HDR - 可支持水平和垂直方向翻转输出 - 可支持Window Cropping和bining模式输出 - 差异化特性: - Smart Motion Detect,可以在Sensor内部进行连续两帧之间的motion判断并给出结果 - Fast AEC/AGC,要支持sensor独立实现pre roll模式,sensor就必须自己能够支持自动曝光特性,不依赖于ISP - Always On Pre Roll,支持pre roll模式,把time elapse frame保存在缓存中 - Always On Wake On Motion,可以支持在Pre roll模式运行的过程中根据Motion判断唤醒应用处理器 !1732609349424.png 以上CV4003IoT框图与普通Image Sensor的最大区别在于两点: - 额外增加了一个Image Processing Block,应该是专门用于进行Motion、AEC、Pre Roll相关功能的处理。 - 支持的三组输出接口DVP、MIPI、SPI是分开独立的接口,具体的实现上可以使用MIPI与后一级的应用处理器SOC接口传输Sensor的图像数据,使用SPI与Pre Roll RAM buffer接口,用于保存time elapse video frame到buffer中。 基于CV4003IoT实现的Pre Roll电池机方案 从以上CV4003Iot所具备的规格参数以及结构框图上看,基本上可以认为CV4003IoT的作用就是OmniVision方案的Always On Image Sensor和协处理器的组合,把整个Always On Camera Block全部包在Sensor内部了。集成度更高的同时,简化了产品设计和开发的难度,也降低了整体的BOM成本。 以下是基于CV4003IoT来实现Pre Roll电池摄像头的方案框图: !1732615009346.png 可以看到,使用CV4003IoT以后,整个Always On Camera Block部分简化到只有一个CV4003IoT Image Sensor,再加上一个SPI接口的PSRAM用于作为Pre Roll Buffer缓存time elapse video frame。 实际运行的过程中,AV4003IoT Sensor和PSRAM始终处于上电状态,后级的SOC等电路则处于掉电状态以降低功耗。AV4003IoT Sensor按照设置每1-2s读取一个图像帧,进行Motion Detction的情况下同时通过SPI接口滚动保存在PSRAM中。 当Sensor内部的Motion Detection算法检测到Motion事件时,Sensor会唤醒SOC,SOC通过MIPI接口读取并压缩保存来自Sensor的实时图像流和缓存在PSRAM中的time elapse图像帧,记录完整的事件录像。 再次对比Pre Roll与AOV的实现 基于以上CV4003IoT方案再来思考一下,对于电池+/太阳能板供电的这类低功耗摄像头产品而言,这种Pre Roll工作模式相比于AOV工作模式的优劣势: - 成本和实现复杂性。之前OmniVision的Pre roll方案因为对Sensor和应用处理器SOC都有要求,而且还要增加Pre Roll协处理器,整个系统设计相对比较复杂,导致成本也会比较高。创视微CV4003IoT的这个方案把Sensor和协处理器合并在一起,对应用处理器SOC也没有额外的要求,就是普通的能够支持MIPI接口的电池摄像头方案就可以,那么就可以采用类似君正T23、瑞芯微RV1103以及爱芯AX520这类low cost的BPI方案,整机的成本就可以做的比较低了。而AOV方案,目前相对比较成熟的,例如君正T41以及爱芯的AX620,相对价格还都比较高。所以在这一点上,采用CV4003IoT搭配low cost BPI方案的价格应该是可以做的更低。 - 功耗。Pre roll模式相比AOV在功耗方面当然是大幅降低了,按照CV4003IoT宣传资料给出的数据,即使Sensor端缓存的time elapse frame的分辨率是原图的4M尺寸,平均功耗也可以做到5mW,这个功耗基本上是目前主流AOV方案的1/10。所以基本上AOV脱离了太阳能板就很难提供良好的使用体验了,而Pre Roll模式在BPI的基础上增加5mW的待机功耗,搭配10000mAh的电池,产品的续航时间基本上还是能够覆盖大部分应用场景需求的。 - 快起、快连时间。Pre Roll模式下后一级的应用处理器SOC是处于完全掉电的状态的,每次Motion/PIR检测有效的情况下才唤醒SOC,整个Kernel、文件系统和应用程序要从头加载,而AOV模式下,DDR不断电,每次唤醒后直接从原来的代码执行位置继续执行,只需要重新加载wifi驱动即可,所以快起以及联网时间上Pre Roll相比于AOV肯定是比较差的。不过,无论pre roll模式还是AOV模式,因为time elapse的图像帧已经被缓存在buffer中了,所以这个时间上的延迟应该不会造成很大的用户痛点。 - Sensor选型限制。基于CV4003IoT的Pre roll方案的核心就在于这个Image Sensor,所以离开了这个Sensor整个方案也就不存在了,那么产品的图像效果、性能基本上都会受限于这个Sensor本身的能力和表现。而AOV方案中,只要能够支持suspend、resume模式的Image Sensor一般而言都是可以用的,所以相比之下,使用AOV方案,在Sensor挑选空间上就会比较大一些,可以根据自己应用的需求选择不同分辨率以及其他规格参数的Sensor。不过CV4003IoT在提供了Pre roll功能的情况下,价格只有1.x,也算是性价比非常好的方案了。 参考资料 - CV4003IoT CMOS Image Sensor Data Sheet
- 16 Jul, 2024
RGBIR Sensor的工作原理和流程总结
一般情况下,IPC摄像头行业绝大多数情况下都采用白天全彩,夜视切换为黑白的工作模式。这种方案采用白天和晚上两套滤光片,使用SOC的GPIO来控制IRCUT机构件对滤光片进行切换:白天模式下,ISP设置为全彩模式,IRCUT切换为白天的滤光片,关闭IR灯,出彩色图像;黑夜模式下,ISP设置为黑白模式,IRCUT切换为晚上的滤光片,打开IR灯,出黑白图像。白天和晚上两套滤光片的差异主要是,白天的滤光片带宽范围更窄,把更多的红外光滤掉,色彩还原更真实;晚上滤光片的带宽更宽,主要是增加了更多的红外光部分,这样IR灯发出的红外光就可以进入滤光片补光。 - 当然也有部分例外的就是目前逐渐兴起的所谓夜视全彩,星光全彩等方案,ISP端可以采用AI-ISP来实现更好的降噪效果,但是最重要的是Lens和Image Sensor也都要采用能够支持夜视全彩的组合,Lens的光圈越大越好,F1.2甚至F1.0,Image Sensor的Pixel Size在1.8um以上。最终的结果就是这个光学方案的价格很高,200万像素一般需要6-7左右。 RGBIR Image Sensor相比于一般摄像头所使用的Bayer Sensor,最大的区别是,进入滤光片后,Sensor所产生的图像不仅包含了RGB三原色,还有IR图像,相当于Sensor同时产生彩色图像和IR的黑白图像给后端的ISP和编码器,省掉了对IRCUT这个机械机构的依赖。 RGBIR vs Bayer 目前市场上绝大多数各类摄像头所使用的图像传感器都是输出Bayer格式的图像数据到ISP中进行进一步的处理。 !image.png - Bayer图像阵列中,每4个像素组成一个模块,其中包含有一个蓝色B像素,一个红色的R像素,以及两个绿色的G像素。 而RGB-IR类型的Image Sensor的图像阵列则如下所示: !image.png - RGB-IR Image Sensor中,一个模块包含4x4=16个像素。其中包含有两个红色的R像素,两个蓝色的B像素,八个绿色的G像素,以及4个专门对于红外频谱感光的IR像素。 也就是说,在RGB-IR像素中,实际上是牺牲了红色像素和蓝色像素的数量,增加了专门对红外频谱感光的IR像素。 支持RGB-IR的前提条件 Image Sensor - 首先当然是要选择支持RGB-IR的sensor。如上所述,目前绝大多数CMOS的Image Sensor,基本上都是输出Bayer格式的图像数据。所以如果要做RGB-IR的图像系统,首先要选择输出RGB-IR格式图像的图像传感器。 滤光片 - 对于普通的Bayer格式的摄像头而言,白天使用的滤光片仅允许处于可见光波段的光线进入,而夜晚所使用的滤光片则仅允许红外光波段的光线进入。也就是说,白天的滤光片和晚上的滤光片都是单波段的带通滤波器。 - 而对于RGB-IR类型的Image Sensor而言,因为在Sensor上要同时进行可见光和红外光两个波段的过滤,所以这类图像传感器配合的滤光片应该设计为双波段的带通滤波器。如下图所示的同时运行400-650nm的可见光和800-950nm的红外光进入传感器。 !image.png ISP - 在ISP方面,ISP的Vin接口必须要能够支持正确的接收并解析RGB-IR Image Sensor所传过来的图像数据,将其中包含RGB和IR的图像数据分离到两个不同的图像帧中。而且ISP必须能够同时处理RGB图像帧和IR图像帧,而且还应该有一个算法模块用于处理掉RGB通道上叠加的IR污染以确保RGB图像帧输出正确的颜色。 - ISP还应该有能力根据系统的要求同时输出处理过的RGB或IR帧,相当于从RGB-IR上读取的一个图像帧,在ISP的处理后总是会生成一个RGB图像帧和一个IR图像帧。 !image.png RGB-IR Sensor的对比与典型应用 相比于目前主流的Bayer格式的RGB摄像头,RGB-IR存在的缺陷显而易见: - 在Bayer BGGR图像阵列中增加了IR像素,减少了B和R像素,这样毫无疑问会降低图像的色彩还原度,所以如果对于图像的色彩还原要求较高的话,RGB-IR明显是不合适的。 - 尽管现在有不少的Sensor和ISP厂商已经推出了支持RGB-IR的产品,但是仍然是非主流,所以这类产品避免不了价格更高,开发难度更大,注定只能做一些小众化的市场。 当然,RGB-IR的优势也是很明显的:它可以在任何光照条件下同时输出彩色图像和IR的黑白图像。因此重点就是找到对于这个特性有需求的应用场景。 基于红外图像在全黑环境下AI图像检测 !image.png 大多数AI算法都是针对光线较好情况下的彩色图像进行AI检测,在光线不足的情况下,图像中物体边缘的锐度严重下降以及层出不穷的各种噪点会严重劣化AI算法判断的精度。此时使用RGB-IR Sensor输出的IR图像进行检测,效果就会好很多。当然,这种应用在普通的使用IR CUT切换IPC上也可以做到,但是RGB-IR的优势则在于去掉了对IRCUT这个机械器件的依赖,产品运行更稳定,寿命也更长。 利用IR光的穿透性提供与彩色图像的差异化功能 例如940nm波段所发出的红外光线,人眼看不到,因此不会对用户的使用体验有直接的干扰和影响,但是这个波段的红外光穿透性更强,配合对应的RGB-IR Sensor以及滤光片,可以看到一些可见光环境下无法看到的场景。例如穿透墨镜或者部分口罩材质。 !image.png 利用IR隐藏在可见光下看不到的标识 针对一些特殊领域的标识或者防伪信息方面的应用,市场上存在一些涂料,只有特定波段的IR光照射于其上,并且IR摄像头才能看到。例如下图中在可见的交通标识中隐藏一个二维码,以及在安全带上隐藏字符串等信息。 !1723602416386.png !image.png 参考文档 - What is an RGB-IR camera? How does an RGB-IR camera work? - e-con Systems - 人工智慧車載更敏銳的視覺方案 - RGB-IR攝影機 | 茂綸股份有限公司 (macnica.com)
- 30 May, 2022
CMOS Sensor的曝光与读出时序
很长时间没有自己动手调试CMOS Sensor的驱动程序了,这两天开始配合调试Sony IMX662和IMX585两个Sensor DOL HDR模式下的驱动,关于CMOS工作时序的概念有点模糊了,在这里重新基于对网上资料的学习总结一下。 首先要搞清楚一个对于CMOS Sensor而言很重要的一个概念:Line Time。 所谓的Line Time实际上很简单:实际上就是Sensor向ISP输出一行图像数据(包括每行前面和后面的Blank)所用的时间。这个时间与很多因素有关,包括pixel clock、分辨率大小(尤其是图像宽度包含多少列像素)、每行前后blank数量多少、MIPI Lane的数量等等。 - Line Time最简单的计算公式:line_time = line_length / pclk。 Line Time之所以重要,是因为后续的曝光时间都是以Line Time为单位的,而不是以实际的us、ms等绝对时间为单位的。 自动曝光的AE算法因为要保证算法本身的通用性,所以一般AE算法计算出来的曝光时间都是以us等为单位的绝对时间。但是这个绝对时间要设置到Sensor的寄存器中,就需要做一个us到Line time的转换才行。 下图(来自参考文档1)就是CMOS Sensor像素曝光和读出的示意图,横坐标的T正是以上面介绍的Line Time为单位,而纵坐标则是图像的每一行: !Untitled.png 可以看到对于CMOS图像而言,每一行像素的起始曝光时间、终止曝光时间和读出时间的时隙都是不同的。但是各行像素的曝光时长是一致的。 - 首先是第一行像素开始曝光,曝光时间长度为5个Line Time(T0-T5);从T5开始这行像素向ISP的输出,输出时间就是1个Line time。因此在T6时间第一行时间完成向ISP的输出。 - 第一行像素开始曝光后的一个Line Time后,第二行像素开始曝光(T1),第二行像素的曝光时间窗口是T1-T6;第二行像素从T6时间开始向ISP输出(这个时候第一行像素刚好输出完成),经过一个Line Time后在T7时间完成向ISP的输出。 - 后面的像素行依次类推。 因此,总结起来,CMOS Sensor曝光和读出的时序就是: - 每一行像素的开始曝光时间和停止曝光时间都是不同的,但是每一行像素的曝光时长是一样的,这就确保了在光源稳定的情况下各行得到的曝光量基本上是一致的。 - 每一行像素的开始曝光时间都比前一行像素晚一个Line Time,终止曝光时间同样比前一行像素晚一个Line Time; - 每一行像素曝光完成后立即向ISP输出,每一行像素的输出时间都是固定的一个Line time。 参考文档: - CMOS图像传感器的曝光及读取时序_年少时的棉花糖的博客-CSDN博客_cmos曝光时间 - sensor逐行曝光原理_乐正倩彦的博客-CSDN博客_sensor曝光时间
- 06 May, 2022
MIPI CSI接口的长短包结构与虚拟通道的概念
MIPI协议层在进行数据发送的时候,以数据包为单位进行通信。根据传输数据类型的不同,又可以分为长包和短包两种形式。其中长包用于传输图像数据,短包则用于传输同步信号、图像数据格式描述信息等数据。 MIPI协议层在进行数据通信的时候,无法发送的是长包还是短包,都是以SOT(Start Of Transmission)信号开始,以EOT(End Of Transmission)信号结束。 !Untitled.png - 长短包数据传输的间隙是LPS状态,这个时候MIPI进入低功耗模式,不进行数据传输。 长短包的数据类型Data Type 在MIPI上传输的长包和短包的包头结构中,都包含有一个Data ID的filed用于定义这个包里面传输的数据类型究竟是什么。 在Data ID中所包含的Data Type Subfield长度为6个bit,因此取值范围为0x00-0x3F。 !Untitled.png 在这些数据类型中,比较常用的是: - 0x00-0x07:表示该短包用于传输行同步和帧同步信息; !Untitled.png - 因为一个长包通常就包含有一行图像数据,因此上面的行同步信息是可选的。 - 0x18-0x1F:表示该长包中包含的数据是YUV格式的图像数据,一般用于直接输出YUV数据的图像传感器; - 0x20-0x27:表示该长包中包含的数据是RGB格式的图像数据,一般用于直接输出RGB数据的图像传感器; - 0x28-0x2F:表示该长包中包含的数据是Bayer Raw Data格式的图像数据; MIPI协议层的短包结构 !Untitled.png 短包长度固定为四个字节: - 首先是1个自己的DATA ID: - VC部分:其中的bit 7:6为虚拟通道的低2bit,虚拟通道的概念在下面继续总结; - DT部分:bit 5:0表示当前包的数据格式类型。 - 然后是2字节长度的短包数据field,也就是这个短包中包含的数据内容,由接收端收到以后进行解析; - 最后是1个字节长度的校验字节: - VCX部分:其中的bit 7:6为虚拟通道的高2bit,虚拟通道的概念在下面继续总结; - ECC部分:bit 5:0为纠错码,能够实现对前面包头数据的1bit错误纠正,以及对2bit错误检测; MIPI协议层的长包结构 !Untitled.png 长包的长度是可变的,其数据负荷由其中的word count field来指定,但是其包头部分是固定的4个字节: - 首先是1个自己的DATA ID,与短包结构定义的DATA ID相同; - 然后是2字节长度的Word Count Field,表示数据负荷部分的字节长度; - 然后是1个字节长度的包头校验字节,与短包结构定义的包头校验字节相同; - 然后就是数据负荷部分,数据长度由Word Count Field指定; - 最后是两个字节长度的CRC校验部分,提供对对整包数据的CRC校验值。 虚拟通道 为什么在MIPI CSI接口上要提供虚拟通道的概念? 原因是MIPI CSI接口的设计上,可以支持使用一个MIPI接口同时传输多路独立的图像流。例如,可以使用一片FPGA把多路图像经过转换后,通过一组MIPI接口传输给应用处理器,那么在同时传输的时候,如何对多路图像数据区分呢?也就是说,对于MIPI的接收端而言,在收到一包数据的时候,如何判定这包数据是哪一路图像的数据? 这里就要用到虚拟通道的概念。所谓的虚拟通道,实际上就是在长短包的packet header中所包含的Virtual Channel信息。对于MIPI CSI接口所使用的D PHY而言,最多可以支持16个虚拟通道,对应到Packet Header中,也就是4个bit,其中高2bit来自于校验字节的VCX Field,低2bit则来自于Data ID中的VC Field。 在这种情况下,不同路的图像数据,可以对Packet Header的Virtual Channel的4个bit设置不同的值,MIPI接口的接收到对这个Virtual Channel进行解析,就可以知道它接收到的每一包数据属于哪一路图像。 实际上,在一个MIPI CSI接口上同时传输多路独立的图像流在应用中并不是很常见。虚拟通道更常用的场景是配合实现Image Sensor的HDR功能。Image Sensor的HDR功能的实现,一般是通过对图像进行多次不同长短的曝光时间进行曝光,然后用MIPI接口把多次曝光的图像发送给ISP,在ISP上对多次曝光的图像进行合并处理来实现高动态范围的效果。在MIPI接口上同时传输多次不同曝光的图像,就需要用到virtual channel来对不同曝光的图像进行区分,这样ISP才能知道收到的每一包数据对应的是长曝光图像还是短曝光图像。 以SmartSens的SC450AI Sensor为例。该Sensor可以支持Stagger HDR模式,使用MIPI的Virtual Channel对多次曝光的图像进行区分: !Untitled.png 参考资料: - 深入浅出MIPI CSI|极客笔记 (deepinout.com)
- 29 Apr, 2022
Image Sensor的MIPI CSI接口学习笔记
MIPI CSI接口及其连接基础 MIPI CSI是用于实现对image sensor和AP(Application Processor)或者ISP处理器之间,进行Image Sensor采集的图像数据进行传输的标准接口。 下图是一个典型的MIPI CSI接口的image sensor与AP之间的连接框图: !Untitled.png - image sensor与AP之间的数据使用CSI Transmitter和Receiver来进行传输,使用差分串行的方式,一般包含一组差分Clock Lane和1组、2组、3组或者4组Data Lane; - image sensor与AP之间不需要pixel clk、HD或者VD这类图像同步接口,这类控制信息通过CSI协议中定义的short packet来进行传输,AP在收到数据后解析可以得到行场同步信息; - image sensor的寄存器设置仍然通过I2C或者SPI这类控制接口来进行设置; MIPI CSI的分层结构 MIPI CSI标准的定义上,实际上是一个如下定义的分层结构: !Untitled.png Application Layer Application Layer用于把image sensor中的pixel data按照协议的要求进行封装。因为CSI接口是一个基于字节流进行传输和接口,最小的传输单位就是一个字节,对于Raw8和JPEG8这种类型的数据而言,可以直接把每个pixel data直接打包传输即可,但是对于像Raw10、Raw12、YUV422、RGB565等这类非8bit对其的数据而言,就需要按照规则把各个pixel data进行组织: - YUV422 :CB0Y0CR0 Y1 CB2Y2CR2 Y3 CB4Y4CR4 ……… - RGB565:{G[4:2], B[7:3]}, {R[7:3], G[7:5]} ……… - RGB555:{G[4:3],1’B0, B[7:3]}, {R[7:3], G[7:5]} ……… - RGB444:{G[4],2’B10, B[7:4], 1’B1}, {R[7:4], 1’B1, G[7:5]} ……… - Raw10 :D0[9:2],D1[9:2],D2[9:2] D3[9:2], {D3[1:0],D2[1:0],D1[1:0] ,D0[1:0]}, D4[9:2],D5[9:2],D6[9:2],D7[9:2], D7[1:0],D6[1:0],D5[1:0] ,D4[1:0]} ……….. ……… Protocol Layer Protocol Layer使用长包long packet(用来发送pixel data数据)和短包short pakcte(用来发送命令和同步信息)的组合来实现Streaming Data的同步传输。 - 长包格式:一个长包由32位(4Byte)的包头,N字节的数据域,和16位的CRC构成,基本上就是一个固定字节的包头+可变长度的data field以及校验域的TLV结构; - 短包格式:短包只包含一个32位(4Byte)包头;在包头中使用不同的cmd type来表示不同的数据命令类型。 - 包头格式:包头由8位数据标志符+16位计数值+8位ECC构成; Protocol Layer的那些缩写定义: - SoT:Start of Transmission;EoT:End of Transmission。 - 无论是短包还是长包的传输,都用一个SoT序列表示传输的开始,用EoT序列表示传输的结束。 - FS:Frame Start;FE:Frame End。 - FS表示一帧图像开始传输,FE则表示这帧图像结束传输。 - LS:Line Start;LE:Line End。 - LS表示一行图像开始传输,LE表示这行图像结束传输。 - PH:Packet Header;PF:Packet Footer+Filler。 - 在MIPI上传输的Pixel data使用Packet进行打包,每个包传输之前有一个PH序列,这个包传输完之后有一个PF序列。 - LPS:Low Power State。 - 当MIPI上暂无数据需要传输的时候,进入低功耗LPS状态。 FS、FE、LS、LE这种同步的包都属于短包,而整帧图像的像素曝光数据则需要封装在Packet中,前加PH,后加PF,在长包中通过MIPI传输出去。 在MIPI上传输的各个传输包之间使用EOT-LPS-SOT序列隔开。 例如下面是一个VD同步也就是帧同步的传输示例: !Untitled.png - 首先是一个FE也就是frame end short packet,表示前一帧传输结束; - 然后是一个FS也就是frame start short packet,表示新的一帧数据开始传输; - 此后就是有很多个pixel data long packet,用于传输所有的像素曝光数据; - 可以看到,所有的short和long packet都使用EOT-LPS-SOT序列隔开; 下面是一个HD同步的传输示例: !Untitled.png - 首先是一个LE也就是Line End short packet,表示前一行传输结束; - 然后是一个LS也就是Line Start short packet,表示新的一行开始传输; - 然后是一个data long packet,表示这行Pixel data的曝光数据; - 所有的short和long packet都使用EOT-LPS-SOT序列隔开; 对于image sensor streaming data传输所必须要的HD和VD信号而言,使用short packet来实现: - 帧同步短包(FS,FE):每帧图象必须开始于帧开始包(FRAME START PACKET),结束于帧结束包(FRAME END PACKET); - 行同步短包(LS,LE)是可选的:对于RGB、YUV、RAW数据格式,每个数据长包里面必须包含一整行图象数据,接收端收到的每一个data long packet就表示一行pixel data,所以不需要使用LS和LE来标示行的开始和结束。 Lane Management Layer Lane管理层根据物理层lane的连接和配置情况,把Protocol Layer的数据分配搭到不同的lane上进行传输,与物理层接口的传输情况对应起来。相应的,接收端的lane management layer也是使用相同的规则把多个data lane上的数据重新组合起来。 !Untitled.png PHY Layer---D-PHY 对于MIPI CSI的物理层而言,目前应用比较普遍的规范是D-PHY,实际上MIPI用于与显示器件接口的DSI规范所使用的物理层也是D-PHY,也就是说CSI和DSI接口的物理层是完全一样的。 D-PHY种的PHY是物理层(Physical)的意思,那么D是什么意思呢?在MIPI D-PHY的文档中有提到过,D-PHY的最初版本的设计目标是500Mbits/s,而D是罗马数字(拉丁文数字)中500 。同理C和M分别是罗马数字中的100和1000,也就是C-PHY和M-PHY中C和M的意思了。 !Untitled.png MIPI D-PHY协议定义了两种传输模式:高速模式(High Speed,HS)和低功耗模式(Low Power,LP),两种模式使用不同的传输电平和传输机制。其中,HS模式下,为差分信号传输,信号电平在100mV~300mV(200mV的压摆);LP模式下,为单端信号传输,信号电平在0~1.2V(1.2V压摆)。HS模式下,信号传输速度可达80Mbps~1Gbps(v1.0)或80Mbps~1.5Gbps(v1.1),采用源同步的传输方式,由主机(Master)设备向从机(Slave)设备提供DDR时钟。LP模式下,信号传输速度为10Mbps,此时传输通道的差分线(HS模式下的)是两根独立的信号线。无论是HS模式还是LP模式,都采用LSB fisrt,MSB last的传输方式。 因为单个lane的传输带宽最高可以达到1.5Gbps,对于目前应用最为广泛的CSI-2标准而言,最高可以支持4个data lane,因此最高可以实现6Gbps的传输带宽。 参考资料: - http://blog.csdn.net/liwei16611/article/details/68146912 - http://blog.chinaaet.com/justlxy/p/5100052466 - http://www.electronicdesign.com/communications/understanding-mipi-alliance-interface-specifications - https://wenku.baidu.com/view/980521c25901020206409ca3.html
- 26 Apr, 2022
CMOS图像传感器的Sensor Flicker问题
CMOS Sensor因为使用Rolling Shutter的原因,所以各行曝光开始和结束的时间点不一样。这样在使用交流电工频电源供电或者LED频闪灯进行补光的情况下,就会出现比较明显的Sensor Flicker问题: !164238121893412.gif - 也就是说,在Sensor进行曝光的过程中,因此从上到下的每一行进行曝光的时间点不一致,而光源的亮度始终是在变化的(与中国国内工频50Hz来计算,交流电供电的光源强度始终以100Hz频率的半正弦波形的强度在变化),那么在光源强度达到波峰和波谷的时候,光源亮度最强,在相同曝光时间下这一行的亮度就最亮;而当光源强度在接近穿越零点的时候,光源强度最弱,在相同曝光时间下这一行的亮度就最暗。整幅图像的完整曝光效果就是如上图所示的亮暗强度不断交织变换的情况。 - 这个问题归根结底还是因为CMOS的Rolling Shutter导致的各行曝光时间的时间点不一致导致,如果是使用Global Shutter的话,因为整幅图像所有行的像素都是在同一时间开始曝光和结束曝光,那么整幅图像的曝光亮度是一致的,不会存在纵向的曝光亮暗强度不一致的问题。 - 但是如果在交流电或者频闪灯光源的情况下,即使使用Global Shutter,还存在另外一个问题,如果每次Global Shutter控制曝光时间的时间点在光源的强度变化曲线的位置上不一样的话,就会导致每一帧的图像曝光亮度有差异,最终的结果就是视频图像的亮度始终中闪烁。解决这个问题,就要求Global Shutter每次控制曝光的时间点要在光源的强度变化曲线的相同位置。 这一点是由CMOS的Rolling Shutter的工作原理上决定的。但是可以通过控制曝光时间来解决问题。 具体而言,就是确保曝光时间的长度是光源强度变化规律的整数倍,最小曝光时间就是光源强度的变化周期。这样可以确保无论每一行是在什么时间点开始与结束曝光的,整个曝光时间的时长都完整的覆盖了整数个光源强度变化周期,这样的情况下每一行的曝光亮度也就是一致的了。 - 对于50Hz工频交流电而言,应该设置曝光时间长度始终为10ms的整数倍,最小曝光时间10ms。 !164238121983037.gif 这一点限制对于HDR模式的图像也是如此。HDR模式的多次曝光中,曝光时间最短的那一帧的最小曝光时间必须是光源强度变化周期,而其他几帧的曝光时间也必须是光源强度变化周期整数倍。 参考资料: - HDR Imaging(2)--Digital Overlap_专栏_易百纳技术社区 (ebaina.com)
- 26 Apr, 2022
Sony的DOL(Digital Overlay) HDR技术总结
DOL HDR与传统的Frame Based HDR的比较 Sony的部分Image Sensor可以支持两曝光(DOL-2)和三曝光(DOL-3)模式的DOL HDR技术。 - DOL-2是一张HDR图像,需在Sensor端进行长短两次曝光后,在ISP上合成为HDR图像的工作模式。因此Sensor的输出帧率是ISP输出帧率的两倍。 - DOL-3是一张HDR图像,需在Sensor端进行长-中-短三次曝光后,在ISP接收到连续的三张图像并合成为HDR图像的工作模式。因此Sensor的输出帧率是ISP输出帧率的三倍。 Sony DOL HDR模式的曝光与读出的流程大致如图所示: !DOL HDR的曝光与输出模式 在两曝光DOL模式工作的情况下,Image Sensor的每一行在曝光的时候,分别会以长和短两种曝光时间进行曝光并输出。这一点与基础的基于整个Frame的HDR技术没有差异。但是无论从曝光流程还是Readout的角度来进行对比,两者的差异都很明显: - 从曝光的角度看: - 传统的Frame Based Video HDR技术中,是以整个图像帧为单位进行不同曝光时间的处理。以两帧曝光HDR模式为例,先对图像整体进行一次长曝光,长曝光过程中,每一行曝光完就开始向ISP输出,第一行输出的同时第二行开始曝光并输出,以此类推;这帧长曝光的图像完整输出之后,再整体进行一次完整的短曝光然后输出。每一行两次曝光的时间差基本上就是一个frame time。30fps的话就是33ms; !Untitled.png - 而对于DOL模式的HDR,不是以图像帧为单位进行曝光时间的控制,而是以行为单位进行控制的。例如先进行第一行的长曝光,第一行长曝光完成后就先输出到行缓冲区中,然后同时进行第一行的短曝光和第二行的长曝光,也就是说这两行的曝光时间有一部分是重叠的,这就是名称中Overlay的由来;第一行的短曝光和第二行的长曝光完成后,同样先进入行缓冲区,然后同时继续进行第二行的短曝光和第三行的长曝光,以此类推。与此同时,行缓冲区中的已曝光行同时开始按照行1长曝光-行1短曝光-行2长曝光-行2短曝光......这样的顺序向外输出。这种曝光模式下,对于每一行而言,两次曝光的时间差非常小,基本上就是一次长曝光的时间。 !Untitled.png - 从Readout的角度看: - 传统的Frame Based Video HDR技术中,也是每一帧采用长短两种或者多种曝光时间进行曝光,但是在Readout的时候,必须是先把一种曝光时间的帧完整读完,然后再以另外一种曝光时间对Sensor进行曝光并读出,这样连续两帧各个行之间就会有明显的读出时间差异。以60fps输出为例,连续两帧之间的两次曝光帧的时间差异达到了16.67ms,后面ISP要把这连续的两帧合并在一起的时候,在运动场景下就会出现明显的图像拖影等问题,因为连续两次曝光的Sensor像素位置在16.67ms之后已经发生了明显的变化。 - Readout的顺序:第1行长曝光-第2行长曝光.....-第1080行长曝光-第1行短曝光-第二行短曝光......第1080行短曝光; - DOL模式的HDR,每一行的长曝光和短曝光完成后就依次向ISP输出了,不需要完整的等待长曝光的那一帧完整送给ISP以后,才能开始短曝光那一帧的曝光和读出。这样连续两帧图像在曝光时间上的差异就会非常小。 - Readout的顺序:第1行长曝光-第1行短曝光-第2行长曝光-第2行短曝光......第1080行长曝光-第1080行短曝光; 因此,从ISP接收的角度来看,如果使用DOL HDR模式的话,也需要ISP能够支持这种模式,并设置为DOL HDR模式,从而从Sensor中能够正确的接收、解析完整图像的各行数据,并在ISP中对多帧图像进行合并操作。 DOL HDR模式存在的问题 如上所述,DOL HDR模式相比于Frame Based HDR而言,确实大大降低了每一行的长曝光和短曝光之间的时间差,从而改善了因为这个时间差导致ISP后期合并两帧图像时出现的各种图像相关的问题(尤其是运动图像的问题)。 但是DOL HDR模式对于每一行进行多重曝光,每一行的曝光时间的长度实际上就是各次曝光时间的总和,这样会导致各行之间曝光开始的时间差远远超过了单次曝光模式下的行时间差。这一点在CMOS Sensor的Rolling Shutter下,会使得果冻效应更加明显。这一点是由其完整的工作原理所限定,无法进行优化。不过果冻效应一般也就是在光线很暗曝光时间较长,以及针对高速运动的物体进行拍摄的时候才会出现,所以对于DOL HDR模式的使用而言,就需要尽可能避免这种应用场景。 参考资料: - HDR Imaging(2)--Digital Overlap_专栏_易百纳技术社区 (ebaina.com) - 【笔记】HDR 成像技术学习(二)_程序猿的探索之路的博客-CSDN博客_多帧合成hdr