zoukankan      html  css  js  c++  java
  • [转]camera教程

    camera教程

    Lens一般由几片透镜组成透镜结构,按材质可分为塑胶透镜(plastic)或玻璃透镜(glass),玻璃镜片比树脂镜片贵。塑胶透镜其实是树脂镜片,透光率和感光性等光学指标比不上镀膜镜片。
    通常摄像头采用的镜头结构有:1P、2P、1G1P、1G2P、2G2P、2G3P、4G、5G等。透镜越多,成本越高,相对成像效果会更出色(个人理解是光线更均匀、更细致;对光线的选通更丰富;成像畸变更小,但是会导致镜头变长,光通量变小)。

    这是摄像头里,光学镜片材质以及数量组成的描述。
    摄像头用的镜头构造有:1P、2P、3P、4P、5P、1G1P、1G2P、2G2P、2G3P、 4G、5G 等。数字代表镜片数量,G代表玻璃材质,效果很好,价格较高,P代表塑料材质,效果一般,价格便宜。比如3G要比3P好,3G2P要比2G2P好。
    镜片越多,成像效果会更出色,成本也会越高。因此一个品质好的摄像头应该是采用多层玻璃镜头。 现在市场上的多数摄像头产品为了降低成本, 一般会采用廉价的塑胶镜头 或一玻一塑镜头(即: 1P、2P、1G1P、1G2P 等)
    DSP是CCM的重要组成部分,它的作用是将感光芯片获得的数据及时地快速地传递到中央处理器并刷新感光芯片,因此DSP芯片的好坏,直接影响画面品质,如:色彩饱和度、清晰度、流畅度等。如果sensor没有集成DSP,则通过DVP的方式传输到baseband芯片中(可以理解为外挂DSP),进入DSP的数据是RAW Data,采集到的原始数据。如果集成了DSP,则RAW Data会经过AWB、color matrix、lens shading、gamma、sharpness、AE和de-noise处理,最终输出YUV或者RGB格式的数据。
    DVP分为三个部分:输出总线;输入总线;电源总线;如下图:

    =
    image
    PWDN

    是camera的使能管脚,有两种配置方式,一种为standby,一种是normal work,设置为standby的时候,一切对camera的操作都是无效的,包括复位。所以在RESET之前,一定要将PWDN管脚设置为normal模式,否则RESET无效。
    RESET

    是camera的复位管脚,此方式为硬复位模式,camera的各个IO口恢复到出厂默认状态。只有在XCLK开启后,将RESET置为低,硬复位才有效,否则复位无效。
    XCLK

    是camera的工作时钟管脚,此管脚为BB提供camera的工作时钟。
    IIC

    是camera和BB通信的总线通道。
    DATA

    data为camera的数据管脚。此数据脚可以输出的格式有YUV、RGB、JPEG等。
    VSYNC

    为camera的帧同步信号管脚。一个VYSNC信号结束表示一帧(即一个画面)的数据已经输出完毕。
    HSYNC

    为camera行同步信号管脚。一个HSYNC信号结束表示一行的数据已经输出完毕。
    PCLK

    为像素同步信号管脚。一个PCLK信号结束表示一个像素点的数据已经输出完毕。
    AVDD

    AVDD为camera的模拟电压。
    DOVDD

    为camera的GPIO口数字电压。
    DVDD

    为camera的核工作电压。
    彩色深度(色彩位数)

    反映对色彩的识别能力和成像的色彩表现能力,实际就是A/D转换器的量化精度,是指将信号分成多少个等级。常用色彩位数(bit)表示。彩色深度越高,获得的影像色彩就越艳丽动人。现在市场上的摄像头均已达到24位,有的甚至是32位。
    MCLK

    摄像头要 工作,必须要有个时钟进行同步,这个时钟就是MCLK,必须要有,否则摄像头就是一个死物,这个时钟由主控芯片提供,确切的说是有主控芯片的控制器提供,下面会提到。
    根据亮度/照度指数进行调试的AEC调试参数都可以使用该策略,使用该策略,可以灵活地通过触发点分割亮度区域的数量,每个区域都将分配到参数调试值。在照度指数处于两个区域之间时,所有参数将通过插值计算得出。
    例如featureA包含param1、param2、param3和param4四个参数。在这四个参数内,需要根据亮度照度指数来调试param1和param2。可根据偏好定义调试区数量,但是不应该超过调试区预定义的最大区域数量,将两个必须根据照度指数/场景亮度进行调试的参数组合到一个子结构中,该子结构定义为主调试结构中的一个数组。将另外两个无需基于区域进行调试的参数直接插入主调试结构。
    AEC算法依赖于摄像头传感器特定的曝光表,借其以了解如何配置该传感器从而控制感光度,曝光表从指数0开始,该指数对应帧率不变情况下可能的最低感光度。此设置适用于非常明亮的光源条件下。该曝光表以帧率不变情况下可能的最高感光度指数结束。通常将这一最大指数设置为传感器的全画幅曝光时间和允许的最大增益。曝光表指数每增大一级,感光度将随之变化3%。
    400 lux 光源条件的照度指数“lux_idx_under_400”
    Trigger[0].start = lux_idx_under_400-100
    Trigger[0].end = lux_idx_under_400-60
    Trigger[1].start = lux_idx_under_400 + 90
    Trigger[1].end = lux_idx_under_400 + 160
    /* AWB Reference Points /
    {
    /
    D65 AWB Reference Point /
    {
    0.383700f, /
    R/G ratio /
    0.781200f, /
    B/G ratio /
    },
    /
    Shade AWB Reference Point /
    {
    0.341800f, /
    R/G ratio /
    0.832900f, /
    B/G ratio /
    },
    /
    A AWB Reference Point /
    {
    0.696800f, /
    R/G ratio /
    0.436700f, /
    B/G ratio /
    },
    /
    TL84 AWB Reference Point /
    {
    0.524900f, /
    R/G ratio /
    0.508300f, /
    B/G ratio */
    },

    AWB 基础调试代码跟换点。
    image.png

    拖动滑块调整相应的指数,室内指数与室外指数只差必须大于80,避免AWB突然变化。
    /* Indoor Color Correction /
    {
    /
    D65 /
    {
    1, /
    Enable /
    /
    D65 /
    {
    1.645500f, -0.721500f, 0.076100f,
    -0.157900f, 1.317100f, -0.159300f,
    0.086700f, -0.699900f, 1.613100f,
    0, 0, 0,
    0
    },
    },
    /
    D50 /
    {
    1, /
    Enable /
    /
    D50 */
    {
    1.727600f-0.1, -0.764600f+0.05, 0.037000f+0.05,
    -0.186600f+0.05, 1.293300f-0.1, -0.106700f+0.05,
    0.040800f+0.05, -0.813000f+0.05, 1.772200f-0.1,
    0, 0, 0,
    0
    },

    在3A文件的3370行是color correction gamma调试模块参数更改位置。
    ABF调试

    bright light 使用1000Lux tl84MCC色卡。
    normal light 使用200luxtl84MCC色卡。
    lowlight 使用10lux及1000lux*Tl84MCC色卡。
    对于lowlight调试,chromatix会通过1000luxMCC色卡RAW图片计算应用于lowlight图片的gain值。

    image.png

    ABF 可在降噪的同时不钝化边缘。
    小波降噪

    需要TL84条件下拍摄的1000-10lux的raw图。

    对于region 5和6,Chromatix6会通过1000 lux
    MCC色卡Raw图片来计算应用于Lowlight图像的gain值
    在AEC调试开始,应该使用chromatix工具执行以下步骤:
    1.黑电平 2.线性度 3.镜头衰减 4.gamma校正。在isp tuning选项卡上点击edit chromatix data。在header选项卡上选择VFE Blocks > Luma Adaptation > Luma Adaptation Enable,并验证该值是否为 0(禁用)。
    

    亮区

    在AEC Fine Tuning选项卡上,打开 bright region tuning面板。清除enable复选框。
    在3A头文件里搜索 AEC Bright Region */关键词就是亮区的更改点。
    暗区

    在 AEC Fine Tuning选项卡上,打开 dark region tuning。取消选中enable复选框。
    平面场景检测

    在AEC Fine Tuning选项卡上,点击 Edit Header。在3A选项卡上,选择AEC>Flat Region>Flat Scene Detection,并验证该值是否为0。
    极限色检测和亮度调整

    在AEC Fine Tuning 选项卡上,打开 EXtreme Color Tuning 面板。
    取消选中enable 复选框。
    直方图AEC亮度调整在AEC Fine Tuning选项卡上,打开Histogram Metering Tunning 面板。取消选中 enable复选框。调试过程中使用的所有图像必须由待调试的设备进行拍摄。
    基于多区域的通用AEC调试

    基于多区域的通用AEC调试将在chromatix 0x308头文件中引入,该调试策略用于包括以下功能在内的许多AEC功能。
    1.亮区目标、亮区、暗区、直方图目标调整、极限色
    任何根据亮度/照度指数进行调试的AEC调试参数都可使用策略,使用该策略,可以灵活的通过触发点分割亮度区域的数量,每个区域都将分配到参数调试值,在照度指数处于两个区域之前时,所有参数将通过插值计算得出。

    /* WLED Trigger /
    {
    410, / LED Trigger Start Lux Index /
    50, / LED Trigger End Lux Index */
    },
    

    增大该值可以再更暗的场景中触发LED闪光灯。减少该值可以在更亮的场景中触发LED闪光灯。

    /* Fast Convergence /
    {
    0, / Frame Skip /
    0.100000f, / Aggressiveness /
    / Reserved */
    {
    0.200000f, 0.400000f, 1.500000f, 1.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f
    }
    },
    

    在aggressive字段中介于0到1之间的值,数值越小,AE速度越快,建议默认值为0.8。
    在frame skip字段输入相应值,默认值为0,如果跳帧值不为0。禁用local tone mapping 以避免预览模式中出现亮度闪烁。
    跳帧基于传感器曝光作用时序,在之前的图像帧曝光更新尚未统计数据前,如果再次执行曝光更新,则可能出现AEC震荡,将AEC Fast Convergence的值改为1即可以解决该问题。
    将摄像头对准由亮到暗的场景,然后对准由暗到亮的场景,验证预览收敛调试效果。不要调试reserved参数,而是使用默认值。
    调试室内室外指数

    室内和室外指数参数区分室内室外,以及日光直射与阴天/暗光条件
    AWB 参考点指的是不同光源的灰色 R/G 和 B/G 比率。灰色的参考点用来为 AWB 计算确定灰区。由于频谱灵敏度的原因,每个sensor模块的 R/G 和 B/G 比率都不尽相同。需要针对每个sensor模块进行参考点校准。
    如果使用基准图片调试对 ISP 模块进行初始调试,基准图片调试过程会根据载入到图像库中的图像自动计算出 AWB 参考点,但是这种方式自动计算出来的参考点没有抓取log得到参考点准确。

    抓取log的方式如下:

    adb root

    adb remount

    adb wait-for-device

    adb shell setprop persist.vendor.camera.stats.awb.debug 5

    adb logcat | findstr "simple-grey-world"

    在灯箱D75、D65、D50、TL84、A、U30、CWF光源下对准灰卡,使得灰卡占相机整个FOV,抓取参考点

    将这些参考点填写到3A头文件中reference point结构体对应的光源中,noon和custom daylight可以与D50光下咋参考点一致,custom A可以与A光一致,如果需要也可以单独去抓取这些参考点。
    AF理解:
    image.png

    ISP通过IIC控制驱动芯片。10bit数据位,对应0-1023DAC code值,驱动芯片根据IIC数据,识别对应sink VCM回路电流,不同电流值,产生不同推力推动镜头,0-1023code代表0mA电流——max mA电流,线性关系。
    ISP通过控制DAC code值来改变输出电流值的大小,而ISP就是通过清晰度来判断给多少DAC值。

    image.png

    马达驱动芯片输出多大的电流都是由后端来控制。当后端平台给出一点运动指令,马达就会带着镜头向目的奔去。由于音圈马达内固定经镜头的载体采用弹片固定,所以在到达指定的位置后,由于弹片受力的因素,需要震荡一段时间之后才会稳定。马达驱动芯片在设计的时候,就引入一个叫做快速稳定的功能。
    调试触控式AEC

    触控式AEC可根据预览显示屏幕的特定触摸区域来修改亮度测光权重,

    1, /* ROI Enable /1用0不用
    0.700000f, / Weight /均衡选定UI区域的亮度和正常AEC亮度。/
    /* Reserved */
    {
    0.000000f, 1.000000f, 0.500000f, 0.000000f, 0.000000f
    }
    },
    

    光源权重

    光源权重向量的基本假设是:在某些对应的亮度范围内,光源有很大概率被判定为特定样本。例如,在曝光指数较低的明亮环境下,光源被判定为A样本的可能性非常低。而与之相反,在曝光指数较低的日光环境下,光源被判定为D50样本的可能性却很高。
    调试极端蓝色

    极端蓝色调试检测天空颜色,避免出现天空发紫问题。
    0.755861f, /* Ref B BG Tl84 /
    1.000000f, /
    Threshold To Identify Extreme Blue Stats /
    0.200000f, /
    Blue Sky Percent /
    0.150000f, /
    Blue Sky Percent Buffer /
    0.100000f, /
    Threshold Extreme B Percent For Blue Sky Check */
    bule sky percent

    增大该值以提高极端蓝色统计数据百分比,以便调用室外蓝天场景所需的防天空发紫功能。
    减小该值可降低触发防天空发紫功能所需达到的极端蓝色统计数据数量。
    blue sky percent buffer

    减小该值可扩大缓冲区
    增大该值可缩小缓冲区

    作者:清亮2015
    链接:https://www.jianshu.com/p/413782f7c53d

  • 相关阅读:
    浅入ABP(1):搭建基础结构的 ABP 解决方案
    浅入ABP(2):添加基础集成服务
    GDB 调试 .NET 程序实录
    浅入 ABP 系列(6):数据库配置
    浅入 ABP 系列(4):事件总线
    浅入 ABP系列(3):增加日志组件、依赖注入服务
    模拟IIC总线多设备挂载(12864OLED屏幕+GY30光照传感器)
    RabbitMQ与Kafka选型对比
    .Net在Windows上使用Jenkins做CI/CD的那些事
    Tomcat乱码问题
  • 原文地址:https://www.cnblogs.com/michaelcjl/p/13454442.html
Copyright © 2011-2022 走看看