Chromatix 7快速入门手册
- 1.创建项目
- 2. 使用chromatix 7
- 3. Camera Tuning 术语
- 4. Camx-Dump Raw Frames
- 5. ISP-Demux_Blklevel
- 6. ISP-ASF
- 7.ISP-Gamma
- 8.ISP-CC
- 9.ISP-LSC
- 10.Chromatix_AEC—exposure table
- 11. AWB-Tuning
- 12.AF tuning
- 附录
1.创建项目
1.1 描述
Chromatix 7 是用来给 Qualcomm 下一代 ISP (Spectra 280, SDM845, SDM670…) 平台和camera 软件架构做 IQ tuning 的工具. 由于整个 ISP pipeline, 软件架构都是全新的, Chromatix 7 的UI 和产生的文件上都和 Chromatix 6 有很大的差异. 本文档是用来给Qualcomm 的客户介绍如何使用 Chromatix 7 创建一个项目
1.2 创建


- Project Folder: 指定一个空的文件夹用来保存新建项目的所有文件和 simulation结果
- ISP: 选择isp版本
- XSD Folder: 指定 XSD 文件所在的目录. XSD 文件是对 tuning 参数结构的定义
- XML Folder: 指定 XML 文件所在的目录. XML 文件是用来保存真正的 tuning 参数的. 如果需要开始一个全新的项目, 则可以不指定 XML 文件的 folder, 如果想leverage 之前项目的 tuning 参数, 则可以指定之前项目 XML 所在的目录, 此时新
- 开始的项目的 default 参数就会使用指定的 XML 包含的参数
Presets Folder: 指定isp spectra的xml。 - Driver Info: 二种方式,一 指定 sensor 相关的信息和 Chromatix 6 需要的信息和格式都是一样的. 也可以选择手动输入。 例子如下图。二 驱动中的xml格式的文件 。两种方式产生的目录不一样
- Driver Info: sensor 相关的信息项目目录下生成的文件目录test\ov13850
- Scenario.Default: Chromatix 7 产生的新 tuning 参数(XML)所在的文件夹.
- XML: 包含在创建新项目之前指定的 XML 文件夹里面的参数, 如果没有指定,
则不会产生 - XSD: 包含创建新项目之前指定的 XSD 文件里面的内容
XSD Folder指定平台下的目录
vendor/qcom/proprietary/chi-cdk/api/chromatix$ ls
presets XML XSD

1.3 创建场景


项目目录下生成的文件目录 ov13850\Scenario.Default\Sensor.0

2. 使用chromatix 7
2.1 Edit region triggers
Utilties->Parameter Editor
可以修改triggers 的值 和添加regions
2.2 Add scenarios
Edit-> Edit project scenarios
主要包含:sensor 、usecase、feature、scene
场景结构如下:

- sensor0 拍照可以继承preview的场景
- sensor1场景依赖可以继承sensor0 的场景创建

2.3 Initial tuning
介绍ISP模块调优的步骤。


| 缩写 | 全称 |
|---|---|
| linearization | 线性 |
| PDPC | phase detection pixel correction 相位检测 像素校正 |
| HDR | high dynamic range,高动态范围 |
| LSC | lens shading correction镜头阴影矫正 |
| ABF | adaptive bayer filter,自适应bayer滤波器 |
| Demosaic | 去马赛克 |
| CCM | color correction matrix 色彩校正矩阵 |
| GTM | 全局色调映射 |
| BPS | Bayer Processing Segment 拜尔处理阶段 |
| BPC | 坏点矫正 |
| GIC | green imbalance correction |
| LTM | local tone mapping,局部色调映射 |
| GTM | 全局色调映射 |
| ADRC | automatic dynamic range compression,自动动态范围压缩 |
2.3.1 BPS:Bayer Processing Segment 拜尔处理阶段
-
Tune linearization
传感器对场景亮度的响应可能不是线性的,并且可能根据照明条件而有所不同。
线性化调整的亮度水平在图像最黑暗的部分。从三幅图像的通道值被平均来计算黑色水平偏移值。然后从像素输出中减去这些偏移值以获得校正值 -
Deselect the Bls Enable check box you would like to use default black level values for
black level subtraction (BLS).取消选择Bls启用复选框,您想使用默认的黑色电平值进行黑色电平减法(Bls) -
Tune pixel correction
在调整像素校正模块之前,确定要为该模块定义多少照明区域,并在参数编辑器中创建它们。 -
Tune LSC
根据相机镜头的大小和质量,图像的中心可能比角落区域看起来更亮。 -
Tune GIC
一些拜耳传感器可能在Gb通道和Gr通道之间存在严重的不平衡。由这种不平衡引起的伪影可能不能被Bayer域的ABF降噪块完全纠正。
绿色不平衡校正(GIC)消除了由于Gr和Gb通道之间的不同灵敏度而引起的带效应。 -
Tune ABF
为了在不模糊尖锐边缘的情况下降低噪声,采用了一种基于相邻像素值的自适应Bayer滤波器(ABF)。 -
Tune demosaic
camera成像在大的阶段上分为RAW域的成像和RGB域的成像。中间的过渡是由Demosaic模块完成的。
RAW域的噪声主要分为高斯噪声和散粒噪声两种。其中高斯噪声是不随着光强变化的噪声,散粒噪声符合泊松分布,会随着光强的增加而逐渐的增大。在Sensor直出的RAW图中这两种类型的噪声都是包含在内的,所以直出RAW是随着光强的增大而增大的,但是值得注意的是,在这个阶段的信噪比也是增大的。 -
Tune HNR
HNR区块位于拜耳处理段(BPS)的末端,仅对快照可用。它包括基于dct的频域降噪、梯度平滑和空间域混合。与传统的空域降噪不同,基于dct的频域降噪可以区分弱纹理和噪声。通过这种方法,HNR可以在保留边缘和纹理的同时降低噪声. -
Tune GTM ADRC
ADRC includes tuning LTM and gamma and GTM -
Gamma – Apply a gamma curve to each pixel based on the pixel value.根据像素值对每个像素应用伽马曲线。
-
LTM – Apply a tone mapping gain to each pixel depending on the local brightness to enhance localvisibility根据局部亮度对每个像素应用色调映射增益以增强局部可见性
-
GTM – Apply a global tone curve to each pixel to enhance global visibility. Use HDR and ADRC to compensate the enhanced image dynamic range.对每个像素应用全局色调曲线以增强全局可见性。使用HDR和ADRC补偿增强的图像动态范围。
-
TMC – Configure ADRC compensation curves for GTM and LTM.配置GTM和LTM的ADRC补偿曲线。
2.3.2 IFE:Image Front End tuning
- Tune ABF
- Tune linearization
- Tune demosaic
- Tune PDPC
- Tune BPC/BCC
- BPC/BCC模块用于纠正冷热像素或联体
- Tune LSC
- Tune LSC
2.3.3 IPE:Image Processing Engine tuning
-
Tune ANR
Advanced noise reduction (ANR) is a multipass spatial noise filtering for snapshot and video modes.(高级降噪(ANR)是一种针对快照和视频模式的多通道空间噪声滤波。) -
Tune TF
Temporal Filtering (TF) removes unwanted frequencies (noise) within an image.(时间滤波(TF)去除不必要的频率(噪声)在一个图像) -
Tune CAC
当不同带宽的入射光被透镜轻微折射,而不在相机传感器上的同一视觉平面上时,色差导致颜色条纹沿边界出现。CAC模块用于纠正图像中的这些视觉伪影。 -
Tune CC
使用色彩校正(CC)模块,以减少色彩复制不准确和提高色彩保真度。 -
Tune 2D LU
可以在不影响其他颜色的情况下调整特定颜色。 -
Tune CS
chroma suppression (CS) 色调抑制 -
Tune ASF
ASF是一种自适应滤波器,可以根据边缘的检测对图像的不同部分应用平滑和锐化。它平滑较少细节的区域,以消除噪声和锐化边缘,以增加图像的清晰度。 -
Tune GRA
颗粒加器(GRA)模块控制添加到图像上的细颗粒的数量。在大多数情况下,默认设置就足够了,所以GRA模块的调优是由用户决定的 -
Tune MCTF
Motion compensated temporal filter (MCTF) futher reduces noise in images。运动补偿时间滤波器(MCTF)进一步降低了图像中的噪声
3. Camera Tuning 术语
| 术语 | 全称 | 中文说明 |
|---|---|---|
| IFE | Image Front End image | 前端 |
| BPS | Bayer Processing Segment | Bayer处理阶段 |
| IPE | Image Processing Engine | 图像处理引擎 |
| TFE | Thin Front End | thin前端 |
| OPE | Offline Processing Engine | 离线处理引擎 |
| ABF | Adaptive Bayer Filtering | 自适应bayer滤波 |
| ASF | adaptive spatial filter | 自适应空间滤波器 |
| CC | Color Conversion | 色彩转换 |
| CC | Color Correction | 色彩矫正 |
| CS | chroma suppression | 色彩抑制 |
| CCM | color correction matrix | 颜色校正矩阵 |
| GTM | Global Tone Mapping | 全局色调映射 |
| LTM | LocalTone Mapping | 局部色调映射 |
| LCE | Local Contrast Enhancement | 局部对比度增强 |
| GRA | Grain adder | 颗粒加速器 |
| GIC | Green imbalance correction | 绿平衡转换 |
| HNR | Hybrid Noise Reduction | 混合降噪 |
| ANR | Advanced Noise Reduction | 高级降噪 |
| PNR | Peak Noise reduction | 降低峰值噪声 |
| TF | Temporal Filtering | 径向降噪 |
| MTF | Modulation Transfer Function | 调制传递函数 |
| CE | chroma enhancement | 色度增强 |
| SNR | signal-to-noise ratio | 信噪比 |
| SNR | skin noise reduce | 肤色降噪 |
| STD | standard deviation | 标准差 |
| OIS | optical image stabilization | 光学稳像 |
| PDAF | phase detection auto focus | 相位对焦 |
| VFE | VIDEO front-end | 视频前端 |
| VPE | Video preprocessing | 视频预处理 |
| CPP | camera post processor | 摄像头后处理 |
| ZSL | zero shutter log | 零延时拍照 |
| ACE | advanced chroma enhancement | 高级色度增强 |
| AEC | auto exposure control | 自动曝光控制 |
| AFD | automatic flicker detection | 频闪自动检测 |
| PLD | Physical Layer Driver | 物理层驱动 |
| BPC | Bad pixel correction | 坏点矫正 |
| BCC | Bad cluster correction | 坏点簇矫正 |
| DBPC | Dynamic Bad pixel correction | 动态坏点校正 |
| DBCC | Dynamic Bad cluster correction | 动态坏点簇校正 |
| CFA | color fillter array | 色彩滤镜阵列 |
| LA | luma adaptation | 亮度调整 |
| ABCC | assisted bad cluster correction | 辅助坏点族校正 |
| TM | Target module | 目标模块 |
| IAF | instant auto focus | 即时AF |
| DDM | dense depth map | 稠密深度图 |
| LCA | logic cell array | 逻辑单元阵列 |
| WNR | wavelet noise reduction | 小波降噪 |
| LUT | lookup table | 查找表 |
| MCC | macbenth color checker | 麦克白色卡 |
| CCT | correlated color temperature | 关联色温 |
| SWG | simple gray world | 简单灰世界 |
| ROI | Region of interest | 感兴趣区域 |
| AFR | auto FPS rate | 自动帧率 |
| MCE | memory color enhancement | 记忆色增强 |
| SCE | skin color enhancement | 肤色增强 |
| CT | Color Temperature | 色温 |
| IQ | image quality | 图像品质 |
| IS | image stabilization | 图像稳定 |
| HAF | hybrid auto focus | 混合对焦 |
| CAF | continuous auto focus | 自动对焦 |
| TAF | Toch auto focus | 触控对焦 |
| GM | Golden Module | golden 模组 |
| RDI | raw dump interface | 原始数据转存端口 |
| QTI | Qualcomm Technologies Inc | 高通 |
| DCC | defocus conversion coefficient | 离焦转换系数 |
| SLR | single-lens-reflex | 单反 |
| PD | phase detection | 相位检测 |
| PD | phase difference | 相位差 |
| BPP | bits per pixel | 像素色彩位数 |
| DAC | digital to analog converter | 数模转换器 |
| AFR | auto frame rate | 自动帧率 |
| AWB | automatic white balance | 自动白平衡 |
| CAC | color aliasing correction | 颜色混叠校正 |
| CAC | color artifact correction | 彩色伪影校正 |
| CAC | chromatrix aberration correction | 色差校正 |
| DPC | defective pixel correction | 缺陷的像素校正 |
| APL | average picture level | 平均图象电平 |
| MLC | misleading color | 误导性颜色。 |
| DCIAF | dual camera instant auto focus | 双摄像头即时自动对焦 |
| SAD | Sum of Absolute Difference | 统计当前画面的平均亮度值和上一帧的亮度之间的差异得到 |
| SADR | SAD with respect | 当前画面的平均亮度值和上次对焦完成的亮度之间的差异得到的。 |
| HPF | High Pass Filter | 高通滤波器 |
| FOV | field of view | 视场角 |
| RMS | root mean squared | 均方根 |
| TOF | time-of-flight | 激光对焦 |
| MVAVG | moving average | 移动平均数 |
| HVX | hexagon vector eXtension | 六边形矢量扩展 |
| lc | line counter | 行计数器 |
| FIR | finite impulse response | 有限脉冲响应 |
| IIR | infinite impulse response | 无限脉冲响应 |
| FIR | finite impulse response digital filter | 有限长度脉冲响应数字滤波器 |
| MCTF | Motion compensation temporal filtering | 运动补偿时域滤波 |
| MFNR | Multiframe noise reduction | 多帧降噪 |
| NR | Noise reduction | 降噪 |
| DE | Detailed enhancement | 细节增强 |
| RNR | Radial noise reduction | 径向降噪 |
| BLS | black level subtraction | 黑电平减法 |
| DRC | gain dynamic range control | 动态范围控制 |
| ICA | Image Correction Adjustment | 图像畸变矫正 |
4. Camx-Dump Raw Frames
4.1 dump eeprom data
vendor/qcom/proprietary/camx/src/settings/common/camxsettings.xml
两种方式dump数据:
- Push a configuration fileto
/vendor/etc/camera/camxoverridesettings.txt
adb shell "echo dumpSensorEEPROMData=TRUE >> /vendor/etc/camera/camxoverridesettings.txt
- Set Android properties
adb shell setprop vendor.debug.camera.dumpSensorEEPROMData 1
拍张照片后,数据存储在 /data/vendor/camera
4.2 dump 3A信息
camera/camxoverridesettings.txt
enable3ADebugData=TRUE //打开 3A EXIF
信息 dumpSensorEEPROMData=TRUE enableTuningMetadata=TRUE //General
switch to enable tuning data dump. See size settings to set a new size or use default
4.3 dump Raw
4.3.1 dump IFE raw data
autoImageDump=TRUE
autoImageDumpMask=1 offlineImageDumpOnly=FALSE
autoInputImageDumpMask=0x1
reprocessDump=0
autoImageDumpIFEoutputPortMask=0xFB8
autoImageDump=TRUE
autoImageDumpMask=0x1 offlineImageDumpOnly=FALSE
reprocessDump=FALSE autoImageDumpIFEoutputPortMask=0xFB8
4.3.2 Sensor Raw dump (dump snapshot raw only)
autoImageDump=TRUE
autoImageDumpMask=0x4 offlineImageDumpOnly=FALSE
reprocessDump=TRUE autoInputImageDumpMask=0x4
autoImageDumpBPSoutputPortMask=0
dump 图像存在的路径
/data/vendor/camera # ls
PrecisionFlashData00.bin
camera_config_dump.bin
coredump
p[ZSLSnapshotYUVHAL]_req[1]_batch[0]BPS[0][in]_port[0]_w[4208]_h[3120]_20230423_154333_218623.RAWMIPI10
p[ZSLSnapshotYUVHAL]_req[2]_batch[0]BPS[0][in]_port[0]_w[4208]_h[3120]_20230423_154348_221985.RAWMIPI10
4.3.3 dump TFE raw data
adb root
adb remount
adb shell setprop
persist.vendor.camera.autoImageDump 1
adb shell setprop persist.vendor.camera.autoImageDumpMask 0x200 // TFE Node all output ports for TFE
adb shell setprop persist.vendor.camera.autoImageDumpTFEoutputPortMask 0x7c // TFE Auto Image Dump Output Port Mask for TFE </
adb shell setprop persist.vendor.camera.offlineImageDumpOnly 0 //Dumps offline processing output images for all enabled nodes. This will run extremely slow
adb shell setprop persist.vendor.camera.reprocessDump 0 //Dumps reprocess input image and metadata adb reboot
autoImageDump
BOOl 类型
1: enable dump
0: disable dump
autoImageDumpMask
No dumps = 0x0
All output ports for IFE = 0x1
All output ports for IPE = 0x2
All output ports for BPS = 0x4
All JPEG output ports for all JPEG nodes = 0x8
All output ports for FDHw = 0x10
All output ports for LRME = 0x20
All output ports for RANSAC = 0x40
All output ports for all ChiNodes = 0x80
All output ports for CVP = 0x100
All output ports for TFE = 0x200
All output ports for OPE = 0x400
All output ports for QSAT = 0x800
All other nodes not explicitly listed above = 0x40000000
备注: 注意isp pipeline 的流程. 上面指令对应的是 BPS IFE TFE. 如需dump OPE 参考下面修改对应数值
offlineImageDumpOnly Bool 类型. Dumps offline processing output images
only for all enabled nodes
以下文件都有对应判断:
camxopenode.cpp
camxipenode.cpp
camxbpsnode.cpp
autoInputImageDumpMask: ImageDumpType Will limit dumps to only the
specified nodes No dumps = 0x0 All input ports for IFE = 0x1
All input ports for IPE = 0x2
All input ports for BPS = 0x4
All JPEG input ports for all JPEG nodes = 0x8
All input ports for FDHw = 0x10
All input ports for LRME = 0x20
All input ports for RANSAC = 0x40
All input ports for all ChiNodes = 0x80 All input ports for CVP = 0x100
All other nodes not explicitly listed above = 0x40000000
autoImageDumpIFEoutputPortMask:
IFE:
IFEOutputPortFull = 0x1;
IFEOutputPortDS4 = 0x2;
IFEOutputPortDS16 = 0x4;
IFEOutputPortCAMIFRaw = 0x8;
IFEOutputPortLSCRaw = 0x10;
IFEOutputPortGTMRaw = 0x20;
IFEOutputPortFD = 0x40;
IFEOutputPortPDAF = 0x80;
IFEOutputPortRDI0 = 0x100;
IFEOutputPortRDI1 = 0x200;
IFEOutputPortRDI2 = 0x400;
IFEOutputPortRDI3 = 0x800;
IFEOutputPortStatsRS = 0x1000;
IFEOutputPortStatsCS = 0x2000;
IFEOutputPortStatsIHIST = 0x8000;
IFEOutputPortStatsBHIST = 0x10000;
IFEOutputPortStatsHDRBE = 0x20000;
IFEOutputPortStatsHDRBHIST = 0x40000;
IFEOutputPortStatsTLBG = 0x80000;
IFEOutputPortStatsBF = 0x100000;
IFEOutputPortStatsAWBBG = 0x200000;
IFEOutputPortDisplayFull = 0x400000;
IFEOutputPortDisplayDS4 = 0x800000;
IFEOutputPortDisplayDS16 = 0x1000000;
IFEOutputPortStatsDualPD = 0x2000000;
ALLports = 0x3FFBFFF
AllPixelOutput = 0x1C00047
AllRawOutput = 0xFB8
AllRDIOutput = 0xF00
AllStatsOutput = 0x3FB000
reprocessDump: Dumps reprocess input image and metadata
将重新处理的输入图像和元数据进行转储。
5. ISP-Demux_Blklevel
5.1 概述
camera sensor 工作原理:先感应到光信号,接着将光信号转换成模拟信号,在通过A/D转换成数字信号。 我们以10bit 数据为例,转换成的数字信号则在0-1023 的范围内,然而A/D转换器的精度无法将电压值很小的一部分转换出来,从而导致暗态细节损失
这时需要认为地输出信号加一个固定的偏移量,使整体信号值放大,有小保留了电压值很小的暗部细节,当然也会损失部分亮度细节。此操作是因为我们拍照时较关注暗态拍照,保留暗部细节牺牲部分动态范围的操作而被认可。
产生black level他原因也与camera 硬件有关,sensor 的电路本身会存在暗电流。 暗电流主要产生在CMOS 芯片通过电二极管将光信号转换成模拟信号的过程中,光电二极管受温度,电压稳定性因素的干扰,导致全黑状态下输出的电平并不一定稳定为0,信号不稳定导致部分图像偏色。人为将全黑状态的数值固定钳制在黑电平这个值,很大程度上为保证信号的稳定性,以保证图像效果表现一致。
- 什么是黑电平:
sensor本身存在暗电流,导致在没有光线照射的时候,也有一定的输出电压。黑电平调整目的是在图像处理过程中减去这部分电压,不影响后续的白平衡调整。 - 黑电平获取:
在sensor内部预留一部分完全没有曝光的像素,通过读取这些像素值的大小,就可以得到黑电平的值 - 黑电平的去除:
黑电平偏移使用 4 通道(r、gr、gb、b)黑电平校正。然后会从像素输出中减去黑电平偏移值,以获取校正后的值。
5.2. 调试
由于传感器所具有的特性,传感器对场景亮度的响应可能不一定是线性的,可能更具光源条件不同。例如传感器杆子响应曲线在强光饱和度条件下几乎是平的。在黑暗环境下,由于暗电流的原因,传感器输出将不会完全为零.
线性化调优调整图像最暗部分的亮度水平。通道值对三幅图像进行平均,计算出黑色水平偏移值。这些偏移值是从像素输出中减去得到校正值
由选项是否勾选BLS, 黑电平减法块(black leval subtraction BLS).减少了,暗环境偏红.offset: 从"demuxblklevel" 留下的残余黑电平将从所有通道中减去。 减多了 ,图片偏绿.


6. ISP-ASF
6.1 概述
ASF–adaptive spatial filter,自适应空间滤波器
ASF是一种自适应滤波器,可以根据边缘的检测对图像的不同部分进行平滑和锐化。它平滑细节较少的区域,以消除噪声和锐化边缘,以增加图像的清晰度。
6.1.1 高频与低频区分:
如何区分图像的高频信息和低频信息,所谓高频就是该像素点与周围像素差异较大,常见于一副图像的边缘细节和噪声等;而低频就是该像素点与周围像素差异变化不大,一般体现为图像的平坦区;
6.1.2. 高通滤波器:
高通滤波器指的是允许高于某一阈值的频率信息通过,过滤掉低于这一阈值的频率信息,从而大大衰减低频率的一种滤波器。在图像处理中,过滤频率信息采用的是傅里叶变换,把图像从空域转为频域进行处理。

从这个结果图像可以知道,高通滤波器将低频信息过滤后就只有高频信息,高频一般是图像的边缘和噪点等。高通滤波器就是调整滤波模板,不同的滤波模板过滤的频率是不一样的,高通一般是过滤中心低频信息。知道高通滤波的过程后,低通滤波器就会很简单了。
6.1.3 低通滤波器
低通滤波器是和高通滤波器正好相反,低通滤波器是允许低频信息通过,滤掉高频信息,造成的结果就是图像变模糊了,一般用于去噪,因为噪点是高频信息。简单的说,就是靠近频谱图中心的低频部分给保留,远离频谱图中心的高频部分给去除掉。但是这会影响图像的清晰度。
同理低通滤波器给一个滤波模板,将频谱中心保留,四周去掉,得到的低通滤波器后图像为如下

可以看出图像变模糊了,根据给出的频率滤波模板的不同模糊程度也会不一样。
以上都是基于频率滤波,根据傅里叶变换后的频谱进行滤波,再逆变换达到滤除不同频率得到目标图像。关于高通滤波和低通滤波,除了频率滤波,也可以采取空间滤波等,如常见的均值滤波和高斯滤波也可以去除高频信息达到平滑边缘的目的;拉普拉斯算子和梯度、Sobel等可以从空间上滤除低频信息得到边缘信息,可以利用其锐化边缘等。
6.2 ASF的作用(两种处理方式之间相互冲突):
- 降噪 :降噪(低通滤波)使图像模糊
- 边缘锐化:锐化(高通滤波)会增加噪点
6.3 ASF的优点:
- 精锐化边缘
- 为平坦区降噪
- 可以使用提供的参数(例如平滑度和锐化度) 进行各种调整
- 可以分别对水平边缘和竖直边缘进行不同程度的锐化
6.4 ASF block diagram:



6.5 参数
(1)layer_1_hpf_symmetr ic_coeff_tab : 调整kernels filter 调整滤波核. must tune
hpf–high pass filter 高通滤波

薄滤波核(Thin Kernel):薄滤波核是指具有较小尺寸或细的特征的滤波核。它通常用于捕捉细节或边缘的高频信息,以强调图像中的细线条或细节。
中等滤波核(Mid Kernel):中等滤波核指的是具有中等尺寸的滤波核。它在平衡细节和平滑效果之间提供了一种中等程度的滤波效果。中等滤波核可以用于多种图像处理任务,如平滑图像、去噪或细节增强。
粗滤波核(Thick Kernel):粗滤波核是指具有较大尺寸或粗的特征的滤波核。它主要用于平滑图像或提取较大的结构特征,可以减少图像中的细节并增强粗略的形状或轮廓。
(2) layer_1_lpf_symmetr ic_coeff_tab 保持不变
lpf – low pass filter
高通滤波器(High Pass Filter)在图像处理和信号处理中具有以下作用:
1.去除低频信息:高通滤波器可以滤除图像或信号中的低频成分。低频信息通常对应于图像中的平坦区域或慢变化的信号部分。通过去除低频成分,高通滤波器可以突出图像或信号中的细节、边缘和快速变化的特征。
2.强调边缘和细节:高通滤波器对于边缘检测和图像增强非常有用。边缘通常对应于图像中颜色或灰度值快速变化的区域。通过滤除低频信息,高通滤波器可以增强图像中的边缘,使其更加清晰和突出。
3.噪声抑制:高通滤波器可以抑制图像或信号中的一些低频噪声。噪声通常具有较低的频率成分,而信号通常具有较高的频率成分。通过选择合适的高通滤波器参数,可以滤除噪声的低频成分,从而减少图像或信号中的噪声干扰。
4.频域分析:高通滤波器在频域分析中也有重要的作用。通过将信号或图像转换到频域,可以应用高通滤波器来分析信号的频率分布,检测周期性或高频成分
低通滤波器(Low Pass Filter)在图像处理和信号处理中具有以下作用:
1.平滑图像或信号:低通滤波器可以平滑图像或信号中的高频成分。高频成分通常对应于图像中的细节、噪声或快速变化的信号部分。通过滤除高频成分,低通滤波器可以减少图像或信号的变化,使其变得更加平滑和连续。
2.去除噪声:低通滤波器可以滤除图像或信号中的高频噪声。高频噪声通常具有较快的变化率,通过选择适当的低通滤波器参数,可以去除这些噪声成分,从而减少图像或信号中的噪声干扰。
3.降低带宽:低通滤波器可以限制信号的频率范围,从而降低信号的带宽。这对于一些通信系统或数据传输中很有用,可以减少信号的传输带宽需求,提高传输效率。
4.信号重建:低通滤波器可以用于信号重建或还原。当信号经过采样或压缩导致频率丢失时,低通滤波器可以恢复信号的低频成分,以近似原始信号。
(3)layer_1_activity_normalization_lut
level-based lut 基准级别 标准查找表 校准归一化活动
调整以使活动值归一化:活动值归一化到0到0.99609375之间。识别活动数据中的最小值和最大值。这些值将用于归一化。
数值范围:[0.0,0.99609375] (64 entries)
该查找表(LUT)被调整用于减少图像中暗区域的噪声。使用较小的归一化值会降低归一化活动因子,从而提供暗噪声抑制,但也会在暗边缘区域创建较少的对比度。避免在此查找表(LUT)中使用接近零的值。
(4)layer_1_weight_modulation_lut
描述:activity-based Lut
当锐化值幅度小于软阈值时,用于控制斜率(输出/输入)的标准化基于活动的LUT
tuning:增加此值可以增加sharpening
tuning: 值越高锐化更高
(5)layer_1_gain_positive_lut
描述:Level-based sharpening gain LUT for positive halos 基于级别的正边缘(正高光)增强增益查找表
Layer 1 Gain Positive Lut Table 影响亮区白色或较浅的边缘,值越大 ,锐化越强
(6)layer_1_gain_negative_lut
描述:Level-based sharpening gain LUT fornegative halos 基于级别的正边缘(负高光)增强增益查找表
Layer 1 Gain Negative Lut Table影响暗区黑色或较深的边缘,值越大,锐化越强
Positive halos(正边缘)指的是在边缘增强或滤波过程中,边缘或高频信息被增强并产生的明亮区域或光晕效果。它们通常表示增强的边缘、纹理或图像细节,使它们更加醒目和突出。
Negative halos(负边缘)指的是在边缘增强或滤波过程中,边缘周围产生的暗区域或光晕效果。它们通常是由于边缘增强算法中的过渡效应或非线性处理引起的,可能会导致边缘附近的图像区域变暗或产生不自然的效果。
(7)layer_1_gain_weight_lut
描述:Normalized activity-based sharpening gain LUT/归一化活动基础的增强增益查找表
tuning: 增加这个可以增强sharpening .
Layer 1 Gain weight Lut 影响输出图像的锐度,表示归一化活动的条目。 值越大,图像信息密集区域锐度越高。 曲线斜率越大,这种曲线形状会增加细节,同时会增大噪声。 相反,斜率小,减少图像细节并会降低噪声.
(8)layer_1_gamma_corrected_luma_target
描述: Luma target after gamma to control level-based sharpening/经过伽马校正后的亮度目标,用于控制基于水平的锐化。通过根据经过伽马校正后的亮度目标选择性地应用锐化技术,可以对锐化效果进行微调和控制,以增强所需的图像细节和边缘。
tuning:更高的值,更少的gain_cap正增益较高的值,对正增益的增益上限进行降低。
在图像处理的背景下,当提到对正增益设置"增益上限"(gain_cap)时,它表示对正增益数值设定的最大限制或阈值。通过调整这个限制,可以控制对图像中正增益区域的增强程度。
它暗示当对正增益的增益上限设置较高的值时,会导致对正增益区域的增强程度减少。换句话说,增加增益上限限制了增强的程度,使得对正增益区域的增强更加保守或受限。
这种调整可以细调保留图像细节和防止在较亮或高增益区域过度增强之间的平衡。通过降低对正增益的增益上限,可以限制这些区域的增
(8)layer_1_gain_cap
描述:“Upper cap of sharpening gain"指的是锐化增益的最大上限值。在图像处理中,锐化增益用于增强图像中的边缘和细节。通过调整锐化增益的上限,可以控制增强效果的强度。
当设置一个较高的锐化增益的上限时,表示对增强效果施加了更高的限制。这意味着锐化增益的增强效果将受到限制,以避免过度增强导致图像出现不自然或伪影的问题。
调整锐化增益的上限可以平衡保留图像细节和防止锐化过度增强之间的关系。通过设置适当的锐化增益上限,可以确保增强效果适度,并获得更好的图像质量和视觉效果。
需要注意的是,锐化增益的上限值需要根据具体的图像和应用场景进行调整,以满足所需的增强效果和视觉感知的要求
tuning: 值越大锐化强度越大
过度的锐化可能会导致图像出现伪影、噪点增加或过度强调的效果。因此,在调整锐化参数时,需要权衡增强效果和图像质量之间的平衡,以获得最佳的视觉结果。根据具体的图像和应用需求,可能需要进行适当的参数调整,以避免过度锐化带来的不良影响。
(9)layer_1_clamp_ul
描述: Manual fixed positive clamping level sharpening/手动固定正增益裁剪水平的锐化
锐化是一种增强图像边缘和细节的技术,而正增益是应用于图像中边缘和细节增强的增益值。裁剪水平则用于限制正增益的范围,以避免过度增强和失真。
在手动固定正增益裁剪水平的锐化中,用户手动设定正增益的上限或阈值,超过这个阈值的增益将被裁剪或限制。这样可以控制锐化效果的强度,防止过度增强造成图像伪影、噪点或不自然的效果。
tuning:Clamp to higher values for more edge enhancement 将值限制在较高范围以获得更强的边缘增强效果。
(10)layer_1_clamp_ll
描述: Manual fixed negative clamping level sharpening/手动固定负增益裁剪水平的锐化技术。
锐化是一种增强图像边缘和细节的技术,而负增益是应用于图像中边缘和细节增强的负增益值。裁剪水平则用于限制正增益的范围,以避免过度增强和失真。
在手动固定负增益裁剪水平的锐化中,用户手动设定负增益的下限或阈值,低于这个阈值的增益将被裁剪或限制。这样可以控制锐化效果的强度,防止过度增强造成图像伪影、噪点或不自然的效果
tuning:Clamp to higher values for more edge enhancement 将值限制在较高范围以获得更强的边缘增强效果
(11)layer_1_activity_clamp_threshold
描述:Static clamp of 5 x 5 band-passfilter output(activity) 对5x5带通滤波器输出(活动)进行静态裁剪
“static clamp”(静态裁剪)是一种技术,用于限制某个变量或参数的取值范围。而"5 x 5 band-pass filter”(5x5带通滤波器)是一种滤波器,用于提取图像中特定频率范围内的信息。
它指出对5x5带通滤波器输出(活动)进行静态裁剪。这意味着对滤波器输出的活动值进行限制,使其取值在某个固定的范围内。
静态裁剪可以用于控制图像中的活动程度,以获得所需的效果。通过设置裁剪阈值,可以限制活动值的范围,以去除噪点、减少过度增强或限制图像中某些区域的增强程度。
需要根据具体的应用需求和图像特性来确定裁剪的阈值。通过静态裁剪5x5带通滤波器的输出活动,可以控制增强效果,并获得更好的图像质量和视觉效果。
tuning: 值越高,锐化越强
(12)layer_1_median_blend_upper_offset
描述:Upper offset ofmedian blend 中值混合的上偏移量
在图像处理中,“median blend”(中值混合)是一种将多个图像或图像通道进行混合的技术。它通过计算像素值的中值来生成最终的混合结果。
而"upper offset"(上偏移量)是指对中值混合结果进行调整或修正的参数。上偏移量可以用来增加或减少混合结果中的像素值,从而改变混合效果。
它指的是对中值混合结果进行上偏移量的调整。通过增加上偏移量,可以使混合结果中的像素值整体上升,从而增强图像的亮度或对比度。相反,通过减少上偏移量,可以使混合结果中的像素值整体下降,从而降低图像的亮度或对比度。
tuning: 值越高,锐化越强
(13)layer_1_median_blend_lower_offset
描述:Lower offset of median blend. Must be smaller than upper offset 中值混合的下偏移量。必须小于上偏移量。
通过减少下偏移量,可以使混合结果中的像素值整体下降,从而降低图像的亮度或对比度。通过适当调整下偏移量,可以控制混合结果的亮度范围,以获得所需的图像处理效果。
tuning: 值越高,锐化越弱
(14)layer_1_sp
描述:3 x 3 median filter smoothing percentage 3 x 3中值滤波平滑百分比
在图像处理中,“3 x 3 median filter”(3x3中值滤波器)是一种常见的滤波器,用于平滑图像并去除噪点。它通过计算像素周围邻域的中值来替代当前像素的值,从而实现平滑效果。
而"smoothing percentage"(平滑百分比)是指控制平滑程度的参数,用于调整中值滤波器的效果。它表示将多大比例的邻域像素值纳入计算中,以确定最终平滑结果。
在给定的上下文中,“3 x 3 median filter smoothing percentage"指的是在进行3x3中值滤波时,用于确定参与计算的邻域像素值所占的比例。
较高的平滑百分比将更多的邻域像素纳入计算,从而产生更平滑的结果。而较低的平滑百分比则会减少邻域像素的贡献,可能会保留更多细节和边缘信息,但平滑效果较弱。
(15)radial_activity_adj
描述:Correction factor for activity based on radial distance 基于径向距离的活动修正系数
“activity based on radial distance”(基于径向距离的活动)指的是根据图像中像素点与中心点之间的径向距离计算的活动值。
通过基于径向距离进行修正,可以根据像素点到图像中心的距离对活动值进行加权或缩放。这样可以实现根据距离远近对活动值进行不同程度的调整,从而在图像处理过程中更加准确地反映像素的活动情况。
通常,较远离中心的像素可能会获得较小的修正系数,而较接近中心的像素可能会获得较大的修正系数。
tuning:Increase to have more sharpness towards corner 增加修正系数以使角落更加锐利
(16)radial_gain_adj
描述:Correction factor for gain based on radial distance 基于径向距离的增益修正系数
通过增加修正系数,可以强调靠近图像中心的区域,增强其细节和对比度。这种基于径向距离的增益修正系数的使用可以帮助实现更加自然和平衡的图像增强效果。
tuning:Increase to have more sharpness towards corner 增加修正系数以使角落更加锐利
(17)gain_contrast_positive
描述:Contrast-based positive halo sharpening gain 基于对比度的增益,用于增强正边缘光晕的效果。
在图像处理中,“sharpening gain”(增强增益)用于增强图像的边缘和细节。而"positive halo”(正边缘光晕)指的是在增强过程中出现的光晕效果,通常表现为边缘周围的亮区域.
通过基于对比度的增益,可以根据像素的对比度水平调整边缘光晕的增强程度。较高的增益将产生更明显的正边缘光晕效果,而较低的增益则会减少或抑制光晕的出现。
这种基于对比度的正边缘增强增益可以用于改善图像的锐利度和细节,并突出边缘区域。它可以增强图像的视觉效果,使边缘更加清晰和饱满。
tuning:值越高,锐化越强
(18)gain_contrast_negative
描述:Contrast-based negative halo sharpening gain 基于对比度的增益,用于增强正边缘光晕的效果。
在图像处理中,“sharpening gain”(增强增益)用于增强图像的边缘和细节。而"negative halo"(负边缘光晕)指的是在增强过程中出现的光晕效果,通常表现为边缘周围的暗区域
通过基于对比度的增益,可以根据像素的对比度水平调整负边缘光晕的增强程度。较高的增益将产生更明显的负边缘光晕效果,而较低的增益则会减少或抑制光晕的出现。
tuning:值越高,锐化越强
(19)min_max_filter_coefficients
描述:Filter coefficientsfor 5 x 5 min and max filter 5 x 5 最小值和最大值滤波器的滤波系数
在图像处理中,最小值和最大值滤波器是常用的滤波器类型,用于平滑图像、去除噪声或检测边缘。
5 x 5 最小值滤波器使用一个 5 x 5 的滑动窗口,在每个窗口内选择像素的最小值作为输出像素的值。这样可以实现图像的平滑效果,并抑制小尺度的噪声。
5 x 5 最大值滤波器使用一个 5 x 5 的滑动窗口,在每个窗口内选择像素的最大值作为输出像素的值。这样可以突出边缘和亮区域,实现图像的增强效果
滤波器的滤波系数是指在滤波过程中窗口内每个像素的权重值。对于最小值和最大值滤波器,滤波系数通常是固定的,不需要进行调整。
tuning:值越高,锐化越强
(20)radial_anchor
描述:Anchor table(distance percentage) for radius based noise reduction 基于半径的降噪的锚定表(距离百分比)
在基于半径的降噪算法中,锚定表用于确定不同距离百分比下的降噪程度。该表指定了每个距离百分比对应的降噪强度或参数。
锚定表的目的是根据像素点到图像中心的距离百分比来调整降噪的程度。较远离中心的像素点通常受到较大的降噪影响,而接近中心的像素点通常受到较小的降噪影响。
tuning:Define the radial points 定义径向点.在图像处理和计算机视觉中,径向点指的是相对于图像中心的距离和方向确定的点。它们通常用于描述和分析图像中的特征、边缘或对象。
6.6 调试
- 设置region
- fine tuning 拍实物, 直接调试
- region data 展开asf 30 rgn data
设置layer 1 symmetric kernel parameters
调试layer 1 gain 强度基于level 和activity 增强边缘和纹理
设置layer 2 kernel parameter 默认
调试layer 2 gain strength based on level and activity 增强厚边缘和local edge
如果出现光晕,调试gain contrast 减少边缘周围gain 强度
如果skin dirty ,调整皮肤gain 减少sharpening on skin
调整smoothing strength 使边缘更平滑
调整gain contrast 出现光晕 调试clamp 钳位 - Click Simulate
- Kernel . 在kernel table 选择HPF symmetric coeff , LPF symmetric coeff 或者 activity band pass coeff ,按需要调整vale.
- LUT .
Gain Lut
Overall Gain-- 整体增益
Shadow Boost – 暗影增强
Highlight Boost – 亮区增强
Negative Gain
Negative Gain – 负增益
Negative shadow – 负阴影
Negative highlight – 高光阴影
Detail Tab
Detail – 细节
Noise – 噪声
Halo – 光圈
对比度不高时, chroma edge 出现光晕,tune gain chroma . 如果边缘对齐是不自然的纹理, tune the thresholds for edge alighnment.
如果图像有角噪声或细节较少, 请调整radial gain 和radial activity . - Sigma LUT RNR 调整RNR 控制点
四个knee points, 其中每个点都有不同的降噪值.
7.ISP-Gamma
7.1 什么是Gamma
Gamma是一种指数曲线,显示器用这个指数曲线来调整真实输出到显示屏幕上的颜色值,以此更好的适应人类的视觉体验。
Gamma是显示器用来修改我们输入的颜色值的操作,那么gamma correction就是逆转显示器修改的过程,从而能够让我们这些图形开发者在一个真实的线性RGB空间中进行光照和着色
灰度是指把白色与黑色之间按对数关系分成若干级,其范围一般为0-255,白色为255,黑色为0 .
一个完整的图像系统需要2个伽马值:
(1)encoding gamma:它描述了encoding transfer function,即图像设备捕捉到的场景亮度值(scene radiance values)和编码的像素值(encoded pixel values)之间的关系。
(2)display gamma:它描述了display transfer function,即编码的像素值和显示的亮度(displayed radiance)之间的关系。
Gamma校正是指对图像传感器所拍摄图像的亮度进行预调,是更暗的信号在显示器上获得更佳的显示效果技术。
7.2 什么是Gamma 校正
输入电压和显示出来的亮度关系不是线性的.
Gamma 校正是对输入图像灰度值进行的非线性操作,是输出图像灰度值与输入图像灰度值呈指数关系
经过Gamma校正后的输入和输出图像灰度值关系如图1所示:横坐标是输入灰度值,纵坐标是输出灰度值,蓝色曲线是gamma值小于1时的输入输出关系,红色曲线是gamma值大于1时的输入输出关系。可以观察到,当gamma值小于1时(蓝色曲线),图像的整体亮度值得到提升,同时低灰度处的对比度得到增加,更利于分辩低灰度值时的图像细节。


7.3 为什么Gamma 校正
(1). 人眼对外界光源的感光值与输入光强不是呈线性关系的,而是呈指数型关系的。在低照度下,人眼更容易分辨出亮度的变化,随着照度的增加,人眼不易分辨出亮度的变化。而摄像机感光与输入光强呈线性关系。如图2所示

为方便人眼辨识图像,需要将摄像机采集的图像进行gamma校正。
(2). 为能更有效的保存图像亮度信息,需进行Gamma校正。未经gamma校正和经过gamma校正保存图像信息如图3所示:

可以观察到,未经gamma校正的情况下,低灰度时,有较大范围的灰度值被保存成同一个值,造成信息丢失;同时高灰度值时,很多比较接近的灰度值却被保存成不同的值,造成空间浪费。经过gamma校正后,图像的信息更加逼近原图的信息从而改善了存储的有效性和效率.
(3) IMAGE FILE GAMMA - 大多数图像文件使用1/2.2的编码伽马值(例如那些使用sRGB和Adobe RGB 1998颜色的文件),但RAW文件除外,它们使用线性伽马值.

(4)DISPLAY GAMMA - 业界已经一致采用了2.2的标准显示伽马值.

7.3. Gamma 调试
测试环境:TL84(看到有的文档写D65光源下,D65 light 不可以调整,我选TL84),灰阶卡
测试步骤:
- 在室内,室外,暗处环境下,拍摄灰阶卡
- 将手机调至原始分辨率,拍照菜单保持默认
- 将灰阶卡国定在灯箱光源正中心.如图
- 待图像稳定,完成对焦即可拍摄照片
- open imatest ->stepchart,导入灰阶图。
- imatest下面详解
- 生成了Excel表,在图片的位置下。
- 一般客观有要求,相邻两阶要大于8,并且这样的阶数要大于等于13阶。(这个每个公司的要求不同,依据每个公司客观标准而定)
7.4. Imatest
点击Stepchart 选项, 导入测试图片.colorcheck 下面那个

调整roi

参数设置
基本上是默认的. Scaling 下的results 有文档中选image densilty range =1.5 . 工具提示不建议使用. so 选的 3

点击 OK 后出现测试结果.红色圈的是: 曝光测试和gamma的结果

实际测试中我们的标准一般是亮度差值大于 8 才认为可区分, 故我们可以先保存测试结果,
然后到 stepchart_summary.csv 自己写个公式计算相邻两阶亮度的差值,得出可以区分多少级灰阶.

故以上测试结果是可区分 12 阶。计算方式就Pixel 那一列,上面减去下面
8.ISP-CC
8.1 概述
由于摄像头系统中使用的光学元件(镜头、色彩滤镜等)和传感器所具有的特性,当图像显示在特定输出介质上时,原始 RGB 数据可能不能真实地呈现给人眼。因此需要进行色彩校正。
在现代数码相机设计中,由于色彩校正可帮助系统实现更高的色彩质量和更高的保真度,因此已成为色彩信号处理过程中不可或缺的部分。通常使用 3x3 矩阵(使用三色相机的情况下)进行色彩校正。色彩校正矩阵 (CCM) 调试可最大限度地降低色彩还原误差并能提高色彩保真度。
8.2 3x3 矩阵
Color Correction Matrix:
3*3色彩校正矩阵(CCM)调整最大限度地减少色彩再现的不精确性和提高色彩保真度。
色彩校正优化微调CC矩阵,以提高色彩饱和度。从左上到右下的对角线是光照条件下的颜色饱和度参数:

- rr,gg, bb 对应CCM 矩阵RGB饱和度,数值越大饱和度越大。
- 先调整rg/gg/bg 保证红色和黄色正常,在调整rb/gb/bb 保证绿色和黄色,rr/gr/br 保证蓝色和红色。
- CCM矩阵校正,就是调整RGB中红绿蓝三色分量的比例关系。调整rr/gg/bb 只会增加艳丽度,不会导致偏色。
- 值越大表示色彩饱和度越高
- 值越小表示色彩饱和度越低
8.3 调试项

- (1)对调试而言,只有三个值中的最大值才有意义。本例中,最大值是右下角的值。噪声权重值越大,色彩校正矩阵中的对角参数越小。对于对角参数,值越大表示色彩饱和度越高并且噪声越大。最大对角值的理想范围是 1.8 到 3。
- (2) 拖动 Noise weight 滑块,改变色彩还原与降噪之间的平衡。噪声权重设置决定噪声的重要程度。如果滑块设为 0,将优先进行色彩还原,不考虑噪声。向右移动滑块可最大限度地降低噪声,但会牺牲色彩还原效果。
- (3) 拖动Target Saturation 如果需要改变饱和度,标记目标饱和度复选框,并拖动滑块来改变饱和度级别。饱和水平通常不调整,但使用此方法增加饱和导致噪声权重的增加
8.4 调试
调整CCM参数,改变单色饱和度&色相
C1 C2 C3
C4 C5 C6
C7 C8 C9
调试红色:C4 C7
1、同时减小:提升红色饱和度
2、同时增加:降低红色饱和度
3、调整C4和C7可以控制红色色相
调整绿色:C2 C8
1、同时减小:提升绿色饱和度
2、同时增加:降低绿色饱和度
3、调整C2和C8可以控制绿色色相
调整蓝色:C3和C6
1、同时减小:提升蓝色饱和度
2、同时增加:降低蓝色饱和度
3、调整C3和C6可以控制蓝色色相
调整黄色:C4 C7 C8
1、增加C7降低黄色饱和度,同时红中偏蓝
2、增加C8降低黄色饱和度,同时绿中偏蓝
3、增加C4降低红色饱和度,同时红中偏黄
调试紫色:
1、C2控制紫色中的红分量
2、C4和C6控制紫色中的绿分量
3、C8控制紫色中的蓝分量
红变深:减rg&rb 红色比例增多,相应的就要增加gg/bb,则绿色和蓝色饱和度会提高
绿更嫩:减gb或减gr gb越小,绿色往黄色偏,gr越小,绿色往青色偏
肤色偏黄:増gb 蓝色和黄色相对,蓝色会变淡
肤色偏红:减br或増bg br变小,蓝色往青色偏
红偏桔: 减rg或増rb rg越小,红色偏粉
红偏粉:増rg或减rb rg越大,红色偏桔,红色饱和度回收
黄偏红: 増br 或bg br越大,黄色偏绿
黄偏绿: 减br或増bg br越小,黄色偏红
绿偏青:増gr
绿偏黄:増gb 蓝和黄相对
蓝变淡:减gb gb越小,绿色往黄色偏,且绿色饱和度会下降,反之增加
蓝偏青:増br 或 减bg br越大,蓝色往紫色偏
蓝偏紫:减br或増bg br越小,蓝色往青色偏;增大bg,蓝色和绿色饱和度都会下降
9.ISP-LSC
9.1 概述
Lens shading分为两个部分,亮度均匀性(luma shading correction),色彩均匀性(colour shading correction)。
lens 的各位置和中心的透射率不同:luma shading
lens 对不同光谱的shift 不同:color shading
Luma shading就是所谓的vignetting(光圈),镜头的通光量从中心到边角减小,造成sensor的亮度响应从中心到边角的变小,图像看起来就是这样,中心亮,四周逐渐变暗。
- luma shading的原因:
1.机械结构导致,工艺误差,安装倾斜,影响到物体光线在摄像头内的传播
2.由镜头(Lens)的光学特性引起。由于凸透镜中心的聚光能力远大于其边缘,从而导致Sensor中心的光线强度大于四周。此种现象也称之为边缘光照度衰减 - color shading的原因:
1.由于镜头对不同光谱光线的折射程度不同
2.由IR-Cut filter引入
3.由Sensor上微透镜的CRA与镜头的CRA不匹配导致。
4.矫正参数不对
9.2. 原理
Lens Shading Correction(LSC)就是处理 lens shading 这种亮度不均的一种矫正方法。当然了,原理是非常简单的,我们只需将成像的四周进行相应的增益计算,就可以使四周亮度看起来和中央亮度近似了。

9.3 调试
- 确认多少定义 region
- Tintless correction默认启用。要禁Tintless correction,请转到参数编辑器,导航到SW_CONTROL > Tintless 23 Sw V2 > Enable Section > Tintless En,这个可以调整color shading .
- 导入Golden Module 的数据
- load rolloff 的raw pic
- 调整“Radius percentage”半径百分比滑块调整要校正的区域(从图像中心开始)。使用“Correction percentage”校正百分比滑块调整要应用的校正量。
- Optimize(优化)
查看Show data,查看四通道的值,正常范围(1-5)
需要即可调整Advanced 。每个通道都可以调整。
- color shading
/// tintless_threshold_tab
///
/// Tuning Level: MustTune
/// Description: Determine how much color shading will be treated
as tint based on intensity./// Type: uint
/// Default Value: 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
/// Range: [0, 10]
/// Bit Depth: 4u
/// Length: 16
/// Notes: Higher threshold will correct more color shading, but
will also over correct actual color in scene.
- luma shading
调整 R,GR,GB, B 的值. - lens shading
校正是将其分为17*13各区域分别进行对其校正.
大概 左上角0 ,右上角12,左下角204,右下角220 .
10.Chromatix_AEC—exposure table
10.1 曝光表的设置

第一行exp time 需要根据sensor info 进行计算 。

1S秒 = 1000 ms毫秒 = 1000_1000 us微妙 = 1000_000_000 ns纳秒
1GHz = 1000 MHz = 1000_000 KHz = 1000_000_000 Hz
转换为ns ,乘以1,000,000,000
sensor 驱动获得到帧行长
<frameLengthLines>3260</frameLengthLines>
<!--Minimum horizontal blanking interval in pixels -->
<minHorizontalBlanking>125</minHorizontalBlanking>
<!--Minimum horizontal blanking interval in lines -->
<minVerticalBlanking>30</minVerticalBlanking>
spec 中也可找到frame length

10.2 曝光介绍
sensor 曝光分为逐行曝光和全局曝光。
sensor 逐行曝光:从第一行开始曝光,一行一行的曝光。 好处:便宜
sensor 全局曝光:所有行同时i开始曝光,并同时结束曝光。好处:每一行的曝光时间比较一致,拍摄运动物体时图像不会出现偏移和不一致的问题。
sensor 曝光相关计算:
- line_time
line_time = line_length/pclk
line_time = 4896 /480000000 = 10200ns
a). line_length: 一行的长度(包含h_blank)
b). pclk: 是控制像素输出的时钟,即pixel采样时钟,单位Hz。表示是每个单位时间内采样的pixel数量
c). line_time: 曝光一行的时间
<!--Line length pixel clock of frame
Typically this value is the active width + blanking width -->
<lineLengthPixelClock>4896</lineLengthPixelClock>
<!--Frame length lines of frame
Typically this value is the active height + blanking height -->
<frameLengthLines>3260</frameLengthLines>
<!--Minimum horizontal blanking interval in pixels -->
<minHorizontalBlanking>125</minHorizontalBlanking>
<!--Minimum horizontal blanking interval in lines -->
<minVerticalBlanking>30</minVerticalBlanking>
<!--Output pixel clock -->
<outputPixelClock>480000000</outputPixelClock>
- exposure_time 的计算:
exposure = exposure_line * line_time
a). exposure_time: 曝光时间。指这一帧曝光了多长时间。
b). exposure_line: 字面意思是曝光行。值得注意的是,曝光行不是指一次性曝光多少行,对于逐行曝光的sensor来说,永远都是一次曝光一行。所以,曝光行是指这一帧曝光了多少行。
c): line_time: 曝光一行的时间
- fps 帧率计算:
frame_length = Vsync = Dummy Line = VTotal = VTS = V_Size + V_Blank 帧长; 不占用曝光时间
line_length = Hsync = Dummy Pixel = HTotal = HTS = H_Size
H_Blank // 行长; 会增加曝光时间
fps的计算公式:fps = pclk / (VTS * HTS )
fps= pclk / (frame_length * line_length)
fps = 1 / (frame_length * line_time)
10.3 曝光相关其他参数
<dummyInfo>
<left>8</left>
<right>8</right>
<top>8</top>
<bottom>8</bottom>
</dummyInfo>
dummy_line :用来填充blanking 的行
frame_length = exposure_line + dummy_line
保持行数和帧长之间的最小偏移量 ,一帧曝光结束到下次准备好重新开始曝光的时间
<verticalOffset>8</verticalOffset>
每行的像素时钟(line_length_pclk),像素时钟 = 最大 FPS * 每帧行数,预览分辨率的垂直偏移 (vert_offset)
预览的最短消隐时间(单位为纳秒)计算公式为: minPreviewBlankingtime = (每行像素时钟 / 像
素时钟) * vertOffset * (10^9)。注: 10^9 是从秒转换为纳秒。

11. AWB-Tuning
11.1 白平衡的概念
AWB – Auto White Balance
白平衡就是:不管在任何光源下,都能将拍摄的白色物体的图像还原为白色
人眼在早晨、中午、晚上 不同色温下都能准确看到白色。 CMOS 要获得这种能力,必须对每种光源做相应的色彩校准,才能完成人眼一样的功能。这个功能叫做白平衡。

11.2 白平衡的原理
若何让camera sensor拍摄的图片和人眼看到的一致呢?
我们把sensor的R、G、B 分量各自乘上一个系数,使RGB 三个能量保持相同即可。
白平衡的算法就是计算R、G、B的gain 值。一般在实验室中用18%灰卡或者取第22 个灰色色块,用软件计算出R、G、B 的均值,由于G 最大,所以以G 作为目标进行补偿。
比如: 原始R =15,G=40,B=30,采用如下的方法计算白平衡的gain 值。
R_gain = 40/15
B_gain = 40/30
G_gain = 1

可以查看eeprom
Light Type: D65
rOverG = 0.465298
bOverG = 0.716520
grOverGB = 0.994135
11.3 白平衡的算法:
11.3.1. 灰度世界法(Grey World Algorithm):
这是一种基于统计的方法,假设整个图像的平均颜色是灰色。用于校正图像中的颜色偏差,使白色区域呈现中性色调。该算法基于一个假设:在自然场景中,各种颜色的像素的平均值应该接近于灰色。
灰度世界算法(Gray World)是以灰度世界假设为基础的,该假设认为对于一幅有着大量色彩变化的图像, R、 G、 B 三个分量的平均值趋于同一个灰度K。一般有两种方法来确定该灰度。
(1)直接给定为固定值, 取其各通道最大值的一半,即取为127或128;
(2)令 K = (Raver+Gaver+Baver)/3,其中Raver,Gaver,Baver分别表示红、 绿、 蓝三个通道的平均值。
算法的第二步是分别计算各通道的增益:
Kr=K/Raver;
Kg=K/Gaver;
Kb=K/Baver;
3.算法第三步为根据Von Kries 对角模型,对于图像中的每个像素R、G、B,计算其结果值:
Rnew = R * Kr;
Gnew = G * Kg;
Bnew = B * Kb;
对于上式,计算中可能会存在溢出(>255,不会出现小于0的)现象,处理方式有两种。
a、 直接将像素设置为255,这可能会造成图像整体偏白。
b、 计算所有Rnew、Gnew、Bnew的最大值,然后利用该最大值将将计算后数据重新线性映射到[0,255]内。实践证明这种方式将会使图像整体偏暗,建议采用第一种方案。
需要注意的是,灰度世界法在某些情况下可能会产生不准确的结果,特别是在图像中存在大片单色区域或特殊光源下。在这些情况下,其他白平衡算法可能更为适用。然而,由于其简单性和有效性,灰度世界法仍然是许多图像处理应用中常用的一种自动白平衡方法。
11.3.2. 白点算法(White Point Algorithm):
根据图像中的最亮像素(白点)来调整颜色,使白色区域呈现中性色调。该算法基于一个假设:图像中的最亮像素应该是白色,其互补色应该被用来平衡图像中的颜色。
1.白点检测:首先,算法会识别图像中最亮的像素,通常是具有最高亮度值的像素。这被假设为图像中的白点。
2.白点的互补色:根据色轮上的互补颜色关系,找到白点的互补色。例如,如果白点是最亮的红色,那么它的互补色将是青色。
3.调整颜色通道:使用白点的互补色来调整图像中的各个颜色通道,以达到白平衡。具体来说,将图像中每个像素的颜色通道值减去相应通道的互补色值,从而降低颜色的色调偏移。
4.限制范围:为了避免颜色通道的值超出合理范围(通常为 0 到 255),可以对调整后的像素值进行截断。
5.重建图像:根据调整后的颜色通道值,重建图像,使其呈现更准确的白平衡效果。
11.3.3. 色温比例法(Color Temperature Algorithm):
根据光源的色温,调整图像中的颜色。这种方法通常使用预设的颜色温度和校正矩阵来实现。
色温比例法(Color Temperature Algorithm)是一种用于图像白平衡校正的方法,它基于光源的色温来调整图像中的颜色,以使图像呈现中性白色。色温是以开尔文(Kelvin,K)为单位来衡量光源的颜色的相对热度或冷度。色温比例法通过调整图像中的红色、绿色和蓝色通道,以便校正图像的颜色偏移。
1.确定光源的色温:首先,需要确定拍摄时的光源的色温。不同光源,如日光、白炽灯、荧光灯等,具有不同的色温。色温一般以开尔文为单位,例如,蓝天的色温约为 5500K,白炽灯的色温约为 2700K。
2.色温校正矩阵:根据已知的色温,使用预先计算的色温校正矩阵来调整图像中的颜色通道。这个矩阵会根据不同的光源和色温来进行调整,以使图像中的白色区域呈现中性。
3.颜色通道调整:将图像中的红色、绿色和蓝色通道按照色温校正矩阵进行比例调整。具体来说,增加或减少各个通道的亮度,以使图像的颜色偏移得到校正。
4.限制范围:同样地,为了避免颜色通道的值超出合理范围,可以对调整后的像素值进行截断。
5.重建图像:根据调整后的颜色通道值,重建图像,使其呈现更准确的白平衡效果。
11.3.4.最大似然估计法(Maximum Likelihood Estimation):
使用统计学方法来估计正确的白平衡值,以最大程度地减少色温偏差。
1.建立数据模型:首先,需要建立图像中像素的颜色分布模型,通常使用概率分布函数来表示。对于白平衡,可以使用多元正态分布或其他适当的分布模型。
2.定义似然函数:根据建立的数据模型,定义一个表示观测数据在不同参数下出现的概率的似然函数。这个似然函数描述了给定参数下观测数据的可能性有多大。
3.最大化似然函数:通过调整参数的值,找到使似然函数达到最大的参数值。这意味着选择使观测数据在给定参数下出现的概率最大的参数值,从而最可能地解释数据。
4.参数估计:找到最大化似然函数的参数值,这些参数即为最大似然估计的结果。这些参数将用于调整图像中的颜色通道,以实现白平衡校正。
11.3.5.光源标定法(Light Source Calibration):
它通过测量图像中已知白色物体的颜色来确定光源的色温,并进行相应的校准。这种方法适用于具有已知白色参考的场景,例如摄影棚中的标准白色板。
1.获取白色参考:在拍摄场景中放置一个已知的白色参考物体,通常是一个标准的白色板或卡片。这个白色参考应该有已知的色温,例如5000K。
2.拍摄图像:使用相机拍摄包含白色参考物体的图像,确保光照条件与实际拍摄环境一致。
3.提取参考颜色:从拍摄的图像中提取白色参考物体的颜色值,通常是在图像中选择一个代表性的白色区域,然后获取该区域的颜色通道值。
4.计算光源参数:使用已知的白色参考色温和提取的参考颜色,计算光源的颜色校正参数,如增益或偏移。
5.图像校正:将计算得到的光源参数应用于整个图像,对颜色通道进行校正,以实现白平衡效果。
6.重建图像:根据校正后的颜色通道值,重建图像,使其呈现更准确的白平衡效果。
11.3.6.基于图像分割的方法:
它将图像分割为不同的区域,然后对每个区域进行单独的白平衡调整。这种方法旨在应对图像中存在多种光源或复杂光照条件的情况,以实现更准确的白平衡效果。
1.图像分割:首先,使用图像分割算法将图像分割为不同的区域,每个区域代表了不同的颜色或光照条件。图像分割可以基于颜色、纹理、边缘等特征进行,以将图像分成相对均匀的区域。
2.区域白平衡:对每个分割后的区域进行单独的白平衡调整。对于每个区域,可以使用先前提到的其他白平衡算法(如灰度世界法、白点算法、色温比例法等)来调整颜色通道,以使每个区域的颜色达到中性。
3.区域合并:在完成单独的区域白平衡调整后,将调整过的区域重新合并成整个图像。这可以通过简单地将每个区域的调整颜色通道值组合起来,或者应用某种过渡策略来平滑区域之间的过渡。
4.重建图像:根据合并后的颜色通道值,重建图像,使其呈现更准确的白平衡效果。
11.4高通实现白平衡算法的基本思路
11.4.1 定参考点
首先在灯箱里面不同光源环境下拍摄18%灰卡的图片,七种光源。然后计算每张图片的颜色的比值R/G 和 B/G,然后把这些点放在坐标轴上,作为参考点。
AWB参考点: 指的是不同传感器在不同光源下测得的灰色R/G 和B/G 比率。
AWB参考点的作用:计算给定场景中不同Bayer 网格统计数据和估计光源相关色温(CCT)的锚点。


11.4.2 验证参考点
logWarningMask=0x4000002
logInfoMask=0x4000002
logVerboseMask=0x4000002
enable3ADebugData=TRUE
enableTuningMetadata=TRUE
在100% 视野(FOV)灰卡情况下捕捉一个日志,并读取灰度世界值(RG 和 BG), 检验chromatix 工具生成的值是否与此一致.
在不同光源下(D75,D65,D50,CW,TL84,A,H)下拍摄包含MCC图的正常场景图像
检查第21 色块的R/G 和B/G 比率. R/G 和 B/G 应介于0.9 和 1.1 之间.
11.4.3 光源权重
在不同光源条件下,部分统计数据极有可能是灰色统计数据,而其他统计数据不太可能是灰色统计数据。例如在日光条件下,如果统计数据在日光参考点(D75、 D65 和 D50)附近,则很可能是真正的灰色统计数据。而如果统计数据在室内参考点(A 和 H)附近,则很可能是非灰色统计数据。
比较常见的如黄色皮肤容易被误判为低色温下的白点;淡蓝色的窗帘,容易被误判为高色温下的白点。而且当一张图中既有白色,也有黄色,也有蓝色的时候,是不是感觉情况就有点复杂了。这时我们需要一定的策略来正确的判断出到哪个才是真的白。

可以查看光源权重和距离权重
室外场景,在高CCT 区域的统计数据分配更高的权重.
室内场景,在高CCT 区域的统计数据分配更低的权重,低CCT区域分配更高的权重
11.4.4 距离权重
AWB 基于距离分配权重,并通过距离权重本身定义灰色区,从而建立了一种灵活的灰色区。

权重为零 (0) 的距离代表灰色区的边界。使用距离权重分配可以将灰色区向外延伸,形成具有极低距离权重 ( ≤0.01) 的缓冲区。当统计数据在逐帧模式下越过灰色区边界时,缓冲灰色区会使连续帧的 AWB 决策尽量保持一致。
缓冲区由距离权重统计数据过滤器定义

11.5 AWB-illuminant_weight_vector
光源权重向量
AWB 处理通过求取R/G-B/G 空间中灰色统计数据位置的平均值来估计光源, 此估计基于灰度世界假设. 因此, 输入统计数据中真实的灰色统计数据很重要. 通用环境下,灰色统计数据的平均值会遭到灰色区中的非灰色统计数据污染. 因此,估计结果的精确性依赖与选择灰色统计数据和移除非灰色统计数据的效率.
通过为不同统计数非陪不权重来优化统计数的选择和移除,以便经过加权的统计数据平均值可以更好地估计光源.
光源权重向量模块会计算不同 CCT 和照明条件(即,亮度(Lux 级)不同)下加权统计数据的平均值。如上面的室外场景图片所示,真正的灰色统计数据极可能位于高 CCT 区域(例如≥5000K),而不是低 CCT 区域(例如 ≤4000K)。因此在室外场景中,为高 CCT 区域(而不是低 CCT 区域)的统计数据分配更高的权重。
按照预期,室内场景的权重分配与此相反。高CCT 区域分配更低的权重,高 CCT 区域分配更高的权重。
修改参数后的表现


CCT 5176


CCT 5621


CCT 4809.


11.6 AWB-Stats_screening
Stats SCreening 统计数据筛选概念.
过暗和过亮(饱和)的统计数据可能会对 Bayer 网格统计数据信息(例如 R/G 和 B/G 统计数据平均值)产生不良影响。过暗的统计数据会受多个噪声源影响,而高饱和的非灰色统计数据会被视为灰色统计数据。这会产生误导性颜色的统计数据。
对应的文件:Scenario.Default\XML\STATS\SFStatScrV1.xml

- Dark Pixel Threshold :
Trigger: 触发范围lux 指数起始值和结束值. lux 指数在此范围, 统计数据会将R/G/B 核心数据作暗像素阈值.
Data: 定义三个暗像素的阈值, 分别用于R. G 和B. 表示可接受的最低亮度. 亮度低于此阈值, 将忽略统计数据. - Saturation Pixel Threshold
Trigger: 触发范围lux 指数起始值和结束值. lux 指数在此范围, 统计数据会将R/G/B 核心数据作饱和阈值.
Data:可接受最高亮度值. 高于阈值,将忽略统计数据
11.7 AWB-Stats_subsample
Stats subsample :统计数据二次采样
计算和加载整个统计数据集合通常需要一定时间。虽然 AWB 可通过 SKIP 程序(在每 2 至 4列选择一次统计数据)估算统计数据的子集,但这对均匀采样没有意义。
对应文件:Scenario.Default\XML\STATS\SFSubSmpV1.xml
Enable Flag: 启用或禁用
Mode: SKIP 和 BINNING . SKIP 模式用于选择要使用或丢弃的统计数据, Bining 模式用于选择要求平均值的统计数据.
Pattern: 指定4*3 掩码中使用的统计信息. 1使用, 0丢弃

左图为pattern: 1000 1000 1000,右图为pattern: 1111 1111 1111,左图: total stats count:3072,右图: total stats count:768


12.AF tuning
12.1 AF base tuning
** CAF 审查测试**
■ Actuator Hysteresis/Damping 双向完整扫描磁滞
■ Actuator range test 开环马达范围
■ Actuator settle time 马达稳定时间
■ Focus value contrast and tail 对焦值曲线的反差与拖尾
■ Distance to lens mapping 镜头距离映射
Comlete RFI worksheet

xxx_actuator.xml 的initialCode 修改为RFI计算出来的。
initial finescan setepsize 设置为Num Steps Betweem Stat Points(Step size for each lens move),精确搜索步长。
Frame Delay Nor 镜头移动之间的帧延迟数,可以设置2或3, 3确保记录FV时镜头处于稳定状态。

验证数值: 需要拍摄iso12233 图卡,将测量数据与 20 cm、 30 cm 和 120 cm 距离对应的 Lens Position Tuning Values 组中AF Tuning 选项卡中的理论数据生成的参数进行对比。理论数据从log 中获取, 参考就是rfi 表格生成的数据. 如果某些位置差异很大,则检查灵敏度是否错误,将灵敏度和10cm DAC更新到RFI,生成新的参数。 Near_Limit_index 其实最好为0.
Single Search – Index: 指数是物理距离与镜头位置的映射,其中指数 [0] 代表最近点,并逐步向代表无限远点的指数[n] 移动。指数决定着单次 AF 算法中的决策边界。建议将逻辑镜头位置的总体可移动范围设为[0 - 399],以确保多个马达与传感器的逻辑镜头位置相同。
按照rfi 中的数值,填入 Single Search – Index . Near_Limit_index和7cm_index 建议从0 开始
Near_Limit_index
7cm_index
10cm_index
14cm_index
20cm_index
30cm_index
40cm_index
50cm_index
60cm_index
120cm_index
Hyperfocal
infinity_index

12.2.2 AF 关闭 eeprom
eeprom dump 的数据
Autofocus data dump for EEPROM p24c64q_s5k3l6
Macro dac = 525
Infinity dac = 262
Macro margin = 0.250000
Infinity margin = -0.400000
Hall offset bias = 0
Hall register addr = 0 Lens
Calibration Data: numberOfDistances: 0
镜头移动是通过编程数字(Digital)→模拟(Analog)控制执行器中的转换器(DAC).
未关闭eeprom , dac 和lens position 的关系。
Macro Dac 将镜头推到远郊无限远处的dac值。
Infinity Dac 将镜头推到近郊无限近处的dac值。
OTP中的Macro dac和Infinity dac都是面向前方测量的,我们需要使用Macro margin和Infinity margin 扩展镜头移动范围以覆盖facing_down_inf和facing_up_macro场景
dac 399–157
dac 0–588
关闭eeprom
- 修改actuator.xml
initialCode 改成 0 ,表示初始从0 开始.
codePerStep 改为 2.5,马达行程为0~1024.

关闭eeprom,修改xxx_eeprom.xml

log 设置(打开AF(8),State(2),Sensor(2) 的log)
cat /vendor/etc/camera/camxoverridesettings.txt
overrideLogLevels=0x3F
logWarningMask=0x08000202
logInfoMask=0x08000202
logVerboseMask=0x08000202
enable3ADebugData=TRUE
dumpSensorEEPROMData=TRUE
enableTuningMetadata=TRUE
afFullsweep=3
enablePDLibLog=3
log 搜索
af_pdaf_proc_pd_single grid|af_pdaf_proc_pd_single
roi|af_fullsweep_final|sweep_srch_far_to_near|af_fullsweep_srch_near_to_far|af_fullsweep_start_srch
Actuator Hysteresis/Damping
目的:测试马达磁滞,检查从无线远处移动至微距位置以及反向移动过程是否呈线性。
原理:从远端位置向近端位置扫描镜头,之后相反方向再次扫描镜头。两个方向的对焦峰值应该近乎相同。如果两个对焦峰值不同,则表示镜头模块存在严重迟滞
测试环境:500lux 以上的照明条件下,将ISO 12233分辨率测试卡放在距离三脚架上的设备30cm的远的地方,跑fullsweep 。
评判标准:excel 绘制fv 值于lensposition 的关系。如果两个方向的峰值相差10%,则表明该模块存在较大迟滞
数据处理:
关键字af_fullsweep_srch_far_to_near|af_fullsweep_srch_near_to_far|af_fullsweep_start_srch
利用excel 绘制fv 值于lensposition 的关系。 af_caf_util_get_value i:1 关闭otp 的Focusval 和 LensPosition 图形:

打开otp 的图形:

Actuator range test
目的:测试将检查微距和无限远时的边界范围。测试会检查镜头是否有足够的移动范围,可对焦微距/无限远处的物体
测试环境:在 500 lux 以上的光照条件下,将 ISO 12233 分辨率测试卡放置在距离三脚架上的设备 10 cm远的位置,进行微距测试。在 200 cm 的位置重复执行测试,从而执行无限远测试。fullsweep
数据处理:
关键字af_fullsweep_srch_far_to_near|af_fullsweep_srch_near_to_far|af_fullsweep_start_srch
利用excel 绘制fv 值于lensposition 的关系。



如果绘制的关系图与微距和无限远(通过)图相似,则表明马达设置和 OTP 数据均正确。
如果绘制的关系图与微距和无限远(未通过)图相似,则表明马达设置和 OTP 数据有误。
Actuator settle time
目的:该测试将检查多个帧同一镜头位置对焦值的一致性,从而检查发出镜头移动命令后,镜头是否稳定
测试环境:在 500 lux 以上的照明条件下,将 ISO 12233 分辨率测试卡放置在距离三脚架上的设备 30 cm远的地方。

如果绘制的关系图与图 A 相似,则表示阻尼和振铃设置已正确配置。如果绘制的关系图与图 B相似,则表示可能存在以下问题:
- 阻尼/振铃设置有误
- 在 ISP 统计数据解析与将统计数据发送到 AF 核心之间存在时序问题
重复测试两次以上来确定问题是否真正存在。若确认问题存在,则调整阻尼设置,并重新执行测试。如果仍存在该问题,则在实验室使用激光检查阻尼设置

Focus value contrast and tail
目的:该测试通过检测对焦值图的反差(FV 最大值/FV 最小值)来检查其质量。比值越大,自动对焦算法的反差越好。
测试环境:在 500 lux 以上的照明条件下,将 ISO 12233 分辨率测试卡放置在距离三脚架上的设备 30 cm远的地方。
数据处理:
关键字af_fullsweep_srch_far_to_near|af_fullsweep_srch_near_to_far|af_fullsweep_start_srch,
利用excel 绘制fv 值于lensposition 的关系。

如果图看起来与图 A 相似,则 Bayer AF (BAF) 配置的配置正确。如果图看起来与图 B 或图 C相似,则 BAF 设置有误,或在 BAF 状态的 ISP 解析中出现错误。重复测试两次以上来确定问题是否真正存在。

Distance to lens mapping
目的:这项测试的目的在于验证10cm 处得到的DAC值是否可信。由于RFI worksheet 中的各距离的DAC值都是通过10cm处DAC值所推导出来的,因此只有在保证10cm 处DAC值确认的情况下,才能保证通过RFI worksheet 计算出来的其他距离DAC值可信。
测试环境:在 500 lux 以上的照明条件下,将 ISO 12233 分辨率测试卡放置在距离三脚架上的设备 14 cm远的地方。在 20 cm、 60 cm 和 200 cm 距离处重复上述测试。
马达的最大行程为 1~1024(dac),驱动中的 infinity、mac 等等都是电流的逻辑表示,即 dac 值,其与 kernel 中的 current 是一 一对应的。高通在 Chromatix 中不直接使用电流的逻辑表示,而是改用镜头位置的逻辑表示,即 lens_pos,目的应该是为了解耦。
- AF Algo 计算出 lens_pos;
- 经公式转换,向 actuator 传递转换后的 dac;
- actuator 向 kernel 传递 dac,再在 kernel 中换算成 current,进而推动镜头。
(1)DAC 参考eeprom 算出dac 的范围
infinityDAC = 262
macrroDAC= 525
DACRange = 263
infinityDAC =262+(-0.4263) = 156.8
macroDAC = 525 +(0.25263) = 590.75 .
so DAC的范围157–590 对应lens pos 399–0
(2)lens pos 和Dac 的关系
lens pos = position_far_end -(dac - initial_code )
dac =position_far_end + initial_code - lens_pos
打开eeprom ,根据eeprom 数值:
: [ VERB][SENSOR ] camxactuatordata.cpp:194 InitializeStepTable()
Table[3] 585 3 = 399 - 585 + intial_code
initial_code = 588-399 = 189
Table[3] – 3 为lens pos , 585 为dac 值

12.2 AF pdaf tuning
12.2.1 pdaf log 设置
log 设置,打开AF(8),State(2),Sensor(2) 的log
CT30P:/ # cat /vendor/etc/camera/camxoverridesettings.txt
overrideLogLevels=0x3F
logWarningMask=0x08000202
logInfoMask=0x08000202
logVerboseMask=0x08000202
enable3ADebugData=TRUE
dumpSensorEEPROMData=TRUE
enableTuningMetadata=TRUE
afFullsweep=3
enablePDLibLog=3
12.2.2 验证pdaf.xml 是否编译进系统
02-25 14:52:07.993 887 887 I CamX : [ INFO][SENSOR ] camxsensornode.cpp:3165 IsPDAFEnabled() PDAFType = 3: isPDAFEnabled 1
02-25 14:52:08.037 887 887 I CamX : [ INFO][SENSOR ] camxpdafdata.cpp:1104 GetCurrentPDAFModeIndex() Current Sensor Mode: 0, Corresponding PDAF Mode: 0
02-25 14:52:08.037 887 887 V CamX : [ VERB][SENSOR ] camxpdafdata.cpp:950 PrintDebugPDAFData() PDAF Debug Data for s5k3l6_pdaf
02-25 14:52:08.037 887 887 V CamX : [ VERB][SENSOR ] camxpdafdata.cpp:952 PrintDebugPDAFData() =====PDAF Information:=====
02-25 14:52:08.038 887 887 V CamX : [ VERB][SENSOR ] camxpdafdata.cpp:954 PrintDebugPDAFData() Actuator Sensitivity: 0.928074
02-25 14:52:08.038 887 887 V CamX : [ VERB][SENSOR ] camxpdafdata.cpp:956 PrintDebugPDAFData() Black Level: 64
02-25 14:52:08.038 887 887 V CamX : [ VERB][SENSOR ] camxpdafdata.cpp:958 PrintDebugPDAFData() Pixel Depth: 10
02-25 14:52:08.038 887 887 V CamX : [ VERB][SENSOR ] camxpdafdata.cpp:960 PrintDebugPDAFData() Is Hdr Mode Enabled: 0
02-25 14:52:08.038 887 887 V CamX : [ VERB][SENSOR ] camxpdafdata.cpp:962 PrintDebugPDAFData() PDPixelOverflowThreshold: 0
02-25 14:52:08.038 887 887 V CamX : [ VERB][SENSOR ] camxpdafdata.cpp:964 PrintDebugPDAFData() Macro DAC: 525
02-25 14:52:08.038 887 887 V CamX : [ VERB][SENSOR ] camxpdafdata.cpp:966 PrintDebugPDAFData() Infinity DAC: 262
02-25 14:52:08.038 887 887 V CamX : [ VERB][SENSOR ] camxpdafdata.cpp:968 PrintDebugPDAFData() Pixel order Type: 0
02-25 14:52:08.038 887 887 V CamX : [ VERB][SENSOR ] camxpdafdata.cpp:970 PrintDebugPDAFData() =====Native Pattern Information:=====
02-25 14:52:08.038 887 887 V CamX : [ VERB][SENSOR ] camxpdafdata.cpp:972 PrintDebugPDAFData() originalImageWidth: 4208
02-25 14:52:08.039 887 887 V CamX : [ VERB][SENSOR ] camxpdafdata.cpp:974 PrintDebugPDAFData() originalImageHeight: 3120
02-25 14:52:08.073 887 887 I CamX : [ INFO][SENSOR ] camxpdafdata.cpp:507 PDAFInit() Initializing PDAF s5k3l6_pdaf
dump pd 数据是否同模组厂提供数据一致.

12.2.3 查看pd 功能是否正常
将设备固定在三脚架上, 在灯箱中 触发一个full-sweep ,然后抓取haf/af 的日志。
日志的关键字: af_pdaf_proc_pd_singlegrid|af_pdaf_proc_pd_single
roi|af_fullsweep_final|sweep_srch_far_to_near|af_fullsweep_srch_near_to_far|af_fullsweep_start_srch
从log 中可以查看 pd ,defocus 和 confidence information 。有了所有这些信息,您可以决定从传感器获得的pd 是否正确。
Line 16362: 02-25 14:55:03.995 897 1187 V CamX : [ VERB][STATS_AF ] af_fullsweep.cpp:501: af_fullsweep_start_srch AEC Settled count:1
Line 16758: 02-25 14:55:04.053 897 1188 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4610: af_pdaf_proc_pd_single grid: num rows=1, num cols=1
Line 16763: 02-25 14:55:04.053 897 1188 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4710: af_pdaf_proc_pd_single grid(0) pd=-6.37, defocus(dac)=-133, conf=533, weight=1.00
Line 16766: 02-25 14:55:04.054 897 1188 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4798: af_pdaf_proc_pd_single roi(0) orig_conf = 533 orig_pd=-6.37, orig_defocus(dac)=-133
Line 16767: 02-25 14:55:04.054 897 1188 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4810: af_pdaf_proc_pd_single roi(0) lens_pos=345 index=6, pd=-6.37, defocus(um)=-123, conf=533, is_conf=TRUE, not_conf_cnt=0, is_stable=TRUE
Line 16942: 02-25 14:55:04.102 897 1187 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4610: af_pdaf_proc_pd_single grid: num rows=1, num cols=1
Line 62081: 02-25 14:55:15.560 897 1187 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4798: af_pdaf_proc_pd_single roi(0) orig_conf = 465 orig_pd=-6.88, orig_defocus(dac)=-144
Line 62082: 02-25 14:55:15.560 897 1187 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4810: af_pdaf_proc_pd_single roi(0) lens_pos=384 index=6, pd=-6.88, defocus(um)=-133, conf=465, is_conf=TRUE, not_conf_cnt=0, is_stable=TRUE
Line 62348: 02-25 14:55:15.603 897 1183 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4610: af_pdaf_proc_pd_single grid: num rows=1, num cols=1
Line 62633: 02-25 14:55:15.678 897 1185 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4610: af_pdaf_proc_pd_single grid: num rows=1, num cols=1
Line 62892: 02-25 14:55:15.717 897 1188 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4710: af_pdaf_proc_pd_single grid(0) pd=-6.76, defocus(dac)=-141, conf=476, weight=1.00
Line 63129: 02-25 14:55:15.760 897 1185 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4710: af_pdaf_proc_pd_single grid(0) pd=-6.78, defocus(dac)=-142, conf=493, weight=1.00
Line 63131: 02-25 14:55:15.760 897 1185 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4798: af_pdaf_proc_pd_single roi(0) orig_conf = 493 orig_pd=-6.78, orig_defocus(dac)=-142
Line 63693: 02-25 14:55:15.884 897 1183 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4610: af_pdaf_proc_pd_single grid: num rows=1, num cols=1
Line 63696: 02-25 14:55:15.884 897 1183 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4710: af_pdaf_proc_pd_single grid(0) pd=-0.87, defocus(dac)=-18, conf=698, weight=1.00
Line 64150: 02-25 14:55:15.971 897 1187 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4610: af_pdaf_proc_pd_single grid: num rows=1, num cols=1
Line 64153: 02-25 14:55:15.971 897 1187 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4710: af_pdaf_proc_pd_single grid(0) pd=0.02, defocus(dac)=0, conf=601, weight=1.00
Line 64156: 02-25 14:55:15.971 897 1187 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4798: af_pdaf_proc_pd_single roi(0) orig_conf = 601 orig_pd=0.02, orig_defocus(dac)=0
Line 64158: 02-25 14:55:15.971 897 1187 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4810: af_pdaf_proc_pd_single roi(0) lens_pos=208 index=17, pd=0.02, defocus(um)=0, conf=601, is_conf=TRUE, not_conf_cnt=0, is_stable=FALSE
有的log镜头位置都有三帧pd信息,这是因为全扫描中的帧延迟,只需要知道每一个镜头位置的最后一帧信息。
defocus is near to 0 ,pd is less than 1 。
af_haf_pdaf.cpp:4810 | af_fullsweep_srch_far_to_near max_pos|af_fullsweep_srch_near_to_far CAF_SCAN_Fullsweep_end Final_lens_pos
从关键字中搜素defocus 和lens position 做出图。 从pd 的 log 中没看到focusvalue,不知道怎么将pd 的defocus 和 af 的focusvalue 画到一张图上。 有知道怎么弄的可以告诉我下。
pd 指画了far_to_near defocus =0 为201. af 的far_to_near 的峰值也为201。所以pd 准确。

pd不动的问题,发现当前镜头位置为0时离焦是负的,方向不对。定位是pd效果的一个重要标志。
注意:由远到进,离焦率 为负。由进到远,离焦率为正。
12.2.4 PDAF 驱动功能验证
pdaf 调试前提
不跑fullsweep。
AF 工作期间, 从日志中获取下列信息:
af_haf_pdaf.cpp:4810: af_pdaf_proc_pd_single roi(0) lens_pos=206 index=8, pd=0.00, defocus(um)=0, conf=1023, is_conf=TRUE, not_conf_cnt=0, is_stable=TRUE
对准附近目标,附近的目标移除后, 应能从日志信息中观察到以下情况:
PD 为正值并随着镜头的对焦逐渐降至 0
散焦值为正值并随着镜头的对焦逐渐降至 0
调试 ROI 配置
roi_loc_y
roi_loc_y
roi_num_rows
roi_num_cols
使用 [2, 3, 2, 2] 。适用PDAF Type 1。 位置和网格数。
使用 [0, 0, 1, 1] 。适用2PD。 Qualcomm PD lib 已优化为使用整个帧的 30% 作为沿水平和垂直两个方向的 ROI。
使用默认。
调试Focus Table
当镜头在一帧内从近到远或从远到近移动时,它看起来非常跳跃和不稳定。为了使AF平滑,有必要使用迭代运动来提供良好的AF收敛
为了提供良好的用户体验,参数move_percentage根据原始离焦距离将一个大的镜头移动分解为小的镜头移动.

If the reported defocus is 200, the next driving lens movement is 2000.3 = 60
If the reported defocus is 40, the next driving lens movement is 400.45 = 18.
调试指南
move_percentage 控制着收到报告的 PD 后反复执行最终镜头移动的次数。
百分比值越高, 意味着镜头反复移动次数越少, AF 速度越快。 但这可能会导致过度跳跃, 为用户带来不顺畅的 AF 收敛体验。
如果对较大的散焦值采用较小的百分比值, 可以防止不正确的 AF 跳跃, 从而带来更加顺畅的用户体验。
利用 Inf(1m)-Macro(15cm) 跳跃实验调试对焦值表。 应降低百分比, 直至跳跃行为消失。
调试Noise Table
应用较高的增益时, 来自传感器的 PD 信息可能包含噪点。 噪点增益较高时, PDAF 可能会得到不可靠的散焦值, 因为跳跃可能导致对焦失败。
当噪声增益较高和PD噪声较大时,增大精细搜索范围以保持精度
Fine-step focus scan range =Fine scan step size x Range
multiplier(noise gain [dB])
调试 Focus Scan 和 Noise Table 参数。
调试指南
当噪点增益很高且 PD 噪点增多时, 应增大精确搜索范围, 以保持精确性。
精确对焦扫描范围通过 Fine_scan_step_size 乘以一个乘数计算
例如: 如果范围 = 2, 则意味着可以等于 -2、 -1、 0、 +1、 +2
调试Confidence Table
它主要用于控制在什么样的光照条件下选择PD触发对焦
客户可以根据他们的测试标准和测试用例分布或传感器性能来决定在哪些光照条件下不使用PD触发器
首先请记住噪声增益并不等于AEC算法直接输入的传感器增益。
noise_gain = 20.0f * log10( input->sensor_gain )
For example
/* Entry 4 */
{
10.000000f, /* Noise Gain */
700, /* Minimum Confidence */
}
在上述情况下,客户不希望触发PD超过10倍增益的场景。他们认为PD在这种情况下不太可靠。因此,他们给出了一个更高的阈值(700)来分块算法选择PD。
03-31 18:51:30.741 893 1186 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4798: af_pdaf_proc_pd_single roi(0) orig_conf = 1023 orig_pd=0.00, orig_defocus(dac)=0
ROI 信息有:相位差(pd) 和 置信度
高置信度意味着该 ROI 中 PD 的偏差较小并且可能具有更高的边缘密度。 置信度表用于定义相对于传感器增益的最小置信度阈值。

调试指南
最小置信度阈值越高, PD 越可靠, 但可能导致在定义的 ROI 范围内找到的 PD 越少,
或者根本找不到。
值得注意的是, 需要分别在弱光 (50 Lux)、 正常照明 (300 Lux) 和室外 照明 (1000 Lux)条件下调试置信度表, 以观察使用垂直条纹测试卡时哪个最小置信度能够在 ROI 内产生最精确的 PD。
在室外使用较高的最小置信度值可以为天空场景产生更可靠的 PD 数据。
在弱光条件下使用较高的最小置信度值可以产生更可靠的 PD, 避免 PD 包含噪点。
验证方式:
(1)固定你的设备在三脚架的HAF日志启用
(2)在稳定光线下聚焦一条垂直条纹图(调光灯箱效果更好)
(3)Search key
word: “af_haf_pdaf.cpp:4810: af_pdaf_proc_pd_single roi” to check
whether the confidence level is continuous stable
Line 49633: 03-31 16:07:18.157 892 1186 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4810: af_pdaf_proc_pd_single roi(0) lens_pos=322 index=11, pd=-2.11, defocus(um)=-56, conf=599, is_conf=TRUE, not_conf_cnt=0, is_stable=TRUE
Line 50152: 03-31 16:07:18.212 892 1186 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4810: af_pdaf_proc_pd_single roi(0) lens_pos=322 index=12, pd=-1.99, defocus(um)=-52, conf=586, is_conf=TRUE, not_conf_cnt=0, is_stable=TRUE
Line 50461: 03-31 16:07:18.247 892 1189 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4810: af_pdaf_proc_pd_single roi(0) lens_pos=322 index=13, pd=-1.99, defocus(um)=-52, conf=586, is_conf=TRUE, not_conf_cnt=0, is_stable=TRUE
Line 50815: 03-31 16:07:18.285 892 1188 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4810: af_pdaf_proc_pd_single roi(0) lens_pos=322 index=14, pd=-2.10, defocus(um)=-55, conf=590, is_conf=TRUE, not_conf_cnt=0, is_stable=TRUE
Line 51161: 03-31 16:07:18.340 892 1188 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4810: af_pdaf_proc_pd_single roi(0) lens_pos=322 index=15, pd=-2.20, defocus(um)=-58, conf=588, is_conf=TRUE, not_conf_cnt=0, is_stable=TRUE
Line 51530: 03-31 16:07:18.379 892 1189 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4810: af_pdaf_proc_pd_single roi(0) lens_pos=322 index=16, pd=-2.22, defocus(um)=-59, conf=574, is_conf=TRUE, not_conf_cnt=0, is_stable=TRUE
Line 51964: 03-31 16:07:18.438 892 1189 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4810: af_pdaf_proc_pd_single roi(0) lens_pos=322 index=17, pd=-2.24, defocus(um)=-59, conf=577, is_conf=TRUE, not_conf_cnt=0, is_stable=TRUE
Line 52334: 03-31 16:07:18.472 892 1187 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4810: af_pdaf_proc_pd_single roi(0) lens_pos=322 index=18, pd=-2.23, defocus(um)=-59, conf=580, is_conf=TRUE, not_conf_cnt=0, is_stable=TRUE
调试Stable Table
它对调优没有很大的影响,因为主要是由相关的预留参数决定的。
首先使用Chromatix工具生成的默认值
FPS/Minimum Stable Count
Min Stable Count 是用于确定 PD 是否进入稳定状态的阈值。
调试Focus Scan
要获得更顺畅的 AF 收敛过程, 可使用 Conv Frame Skip 参数提高 AF 收敛速度。 此参数可降低 AF 速度, 但会带来更顺畅的收敛用户体验。
1, /* Conv Frame Skip */ better to use default 1.
1, /* Enable Fine Scan */ better to use default 1.
x, /* Min Fine Scane Range */ finally will compared with noise_multiplier.
x, /* Fine Scan Step Size */ fine search steps.
x, /* Focus Done Treshold */ need combine with dof_multiplier * noise_multiplier to check.
调试指南
建议仅为 AF 收敛设置一个跳帧。
跳帧过多会产生抖动, 并降低 AF 速度。
Focus Done Threshold 参数用于确定 PDAF 是否已收敛
如果报告的散焦值大于 Focus Done Threshold, PDAF 会继续搜索并等待进入收敛状态。
如果报告的散焦值小于 Focus Done Threshold, 则 PDAF 结束搜索并进入精确搜索模式,或者在精确扫描被禁用时, 直接向 AF_success 报告。
调试指南
阈值越大, PDAF 搜索结束得越快, 越容易进入精确搜索模式。
调试Scene Monitor
4, /* Wait After Focus Count */
4, /* Conf Recover Count */
25, /* Defocused Threshold */ need combine with dof_multiplier to check.
20.00000f, /* Depth Stable Threshold */ need combine noise_multiplier to check.
Above all params recommend use default value ggenerated by Chromatix tool at first.
/* Defocused Threshold */ tuning procedure is similar confidence table. Just focus the
key word defocus(um)
Defocus Threshold 用于确定 AF 是否失焦。
Depth Stable Threshold 会触发稳定状态计数的增加。
Defocus Threshold 越大, 意味着 PDAF 越难触发。
此参数可作为场景切换触发标准。 如果报告的散焦值大于 Defocus Threshold, PDAF将进入搜索状态。
MinStableCount 和 Depth Stable Threshold 值越大, 意味着 PDAF 越难稳定, AF 收敛速度也越慢。
突发的深度变化期间, PD 库会临时丢弃两帧或三帧的置信度。
试置信度恢复计数 Conf Recover Count 参数可以帮助 PDFA 区分置信度的丢弃是持续发生(即无垂直边缘)还是临时发生(例如突发的深度变化) 。
这样可以防止在每次突发景深变化期间过早触发对比度 AF。如果 not_conf_cnt 大于 Conf Recover Count, 则没有可信 PD, 将转换为对比度 AF
12.2.5 PDAF 粗搜和细搜
- 粗搜(等同于调试Focus Scan)
Focus Done Threshold 参数用于确定 PDAF 是否已收敛
如果报告的散焦值大于 Focus Done Threshold, PDAF 会继续搜索并等待进入收敛状态。
如果报告的散焦值小于 Focus Done Threshold, 则 PDAF 结束搜索并进入精确搜索模式,或者在精确扫描被禁用时, 直接向 AF_success 报告。 - 细搜
由于在某些情况下相位差的计算不够准确,PDAF算法切换到对比度AF进行精细搜索,确定最终的峰值位置。影响相位差精度的因素包括景条件(例如,弱光、图像纹理、颜色和距离)和镜头/传感器制造问题。
12.2.6 PDAF 触发条件
- 当前帧的defocus 大于defocus threshold。
- 算法的confident
- 场景稳定。
如果满足着些条件,pdaf 触发搜索。如果没有,则pdaf 继续监控场景,或者在某些情况下,切换到对比度对焦。
defocus: 计算相位差并将其转换为离焦值,以指示实现对焦所需的镜头运动的大小和方向。正的defocus 意味着移动是从近到远。负defocus意味着运动从远到近。defocus 接近0 时,表示目标处于对焦状态
12.3 AF monitor tuning
12.3.1 af monitor concept
AF 监控状态的主要功能是场景切换检测。直观地看,场景切换意味着当前场景没有对焦,导致算法触发搜索以找到准焦的最佳位置。
每种算法有其自己的场景切换检测标准。例如, CAF 依赖于陀螺仪参数、绝对误差和 (SAD)参数以及 SAD 相关参考帧 (SADR) 参数以检测场景切换。相比之下, PDAF 依赖于当前帧散焦值的组合、算法的可信度以及场景的稳定性。
AF 监控也负责场景平移检测。为避免不必要的搜索,算法区分了场景切换和场景平移。搜索算法直到场景稳定(即,不平移)时,才开始搜索。总而言之,场景切换和场景平移检测是AF 监控状态中的两种基本功能。
CAF 依赖于陀螺仪参数、SAD(sum of absolute differences)、SADR 参数以检测场景切换。 PDAF依赖于当前帧defocus value、算法的confidence 和 场景的稳定性(stability of the scene)。
SADR 是统计 当前画面的平均亮度值和上次对焦完成的亮度之间的差异得到的。
SAD 是统计当前画面的平均亮度值和上一帧的亮度之间的差异得到。
亮度的绝对误差和
SAD compares frame by frame, which is less sensitive to slow scene
changes SADR compares to a reference that is established when the
scene is stable after a scene change (which is after focus is finished
and both SAD and SADR are not stable).
SAD keywords:
af_cont_detect_scene_change_sad //获取当前的SAD 值
af_cont_detect_scene_change //判断当前场景是否改变
12.3.2 value monitor bank and algo configure
数值监控实例化了每个监控算法的配置和决策逻辑。尽管监控逻辑与之前的 3A 版本类似,但是数值监控的结构、配置和操作是该逻辑的全新实施。数值监控的主要优点在于配置灵活、调试简便。下图显示了数值监控的两种主要结构.

- 监控算法配置 – 包含在 CAF、 PDAF、 TOF 和 DCIAF 监控算法中使用的各状态类型的灵敏度设置。
- 数值监控库 – 包含各状态类型各种参数。
Monitor Algo Config 对应 algo configure

在本示例中,陀螺仪灵敏度值为 50。这是所有灵敏度参数的默认值。所有灵敏度参数的范围在 1 至 100(0 表示关闭)。在 1-100 之间的所有灵敏度值都是有效的,并预计会导致合理的监控行为。
因为灵敏度是 50,所以选择中灵敏度参数。如果灵敏度是 1,则选择低灵敏度参数。如果灵敏度是 100,则选择高灵敏度参数。如果灵敏度在 1 至 50 或 50 至 100 之间,则分别在低和中或中和高之间使用线性插值。每个配置文件(低、中、高)中的参数完全相同。然而,其值经过了预配置,可根据监控算法配置中的灵敏度参数提供不同级别的灵敏度。
根据作为 1 和 2 的结果产生的配置, CAF 和任何其他配置了陀螺仪数值监控设置类型的监控算法都可实例化。
如果调试工程师想要使陀螺仪灵敏度比中灵敏度配置更加敏感,最简单的方法是将陀 螺仪灵敏度修改为 50 以上。如果调试工程师想要使陀螺仪灵敏度与中灵敏度配置相比更为不敏感,则将灵敏度修改为 50 以下。
注: 当在调试过程中使用逻辑灵敏度参数时,数值监控库中的参数不会发生变化。
algo configure
算法的优先级别

注: 将灵敏度参数设置为 0,可禁用相应数值监控库中的参数。例如,将 SADR 设置为 0,可禁用 SADR VM 设置类型中的参数。在这种情况下,输出决策为 0。
Topo CAF 中的逻辑灵敏度参数字面意思的灵敏度。
value monitor bank

- Trigger Threshold :确定信号是否稳定的阈值。它被定义为元滤波器输出和基准之间的绝对误差。
- Consecutive Count Threshold :用于检测器检测信号稳定/不稳定的连续计数的计数阈值。如果达到阈值,则数值监控为VM_DETECTOR_UNSTABLE 模式输出 1,为VM_DETECTOR_STABLE 模式输出 0。
- Frame To Armed: 强制数值监控开始检测流程的数字。例如,如果frame2armed=2,则数值监控在场景对焦后 2 帧开始检测流程(调用变基)。
- Median Filter Config Enable: 用于启用中值滤波器的标记。
- Num of Samples: 中值滤波器的长度。
- Mvavg Fltr Cf Enable 用于在元滤波器模块中启用移动平均滤波器的标记。
- Num of Samples: 元滤波器模块中移动平均滤波器的待滤波样本数。
- IIR Fltr Cfg Enable: 用于在元滤波器模块中启用 IIR 滤波器的标记。
- Num of Samples IIR:滤波器的缓冲区大小(在当前版本中,值限制为 2)。
- Coeff Numerator:分子中的系数(需要调试工程师来检查滤波器稳定性)
- Coeff Denominator:分母中的系数(需要调试工程师来检查滤波器稳定性)。
- Detection Type:数值监控的检测类型的标记。如果选择不稳定,则指定的数值监控会判断信号是否变得不稳定。如果信号不稳定,数值监控输出为 1;如果信号稳定,数值监控输出为 0。如果选择稳定,则指定的数值监控会判断信号是否变得稳定。如果信号不稳定,数值监控输出为 0;如果信号稳定,数值监控输出为 1。在稳定/不稳定检测期间,通常考虑连续计数。因此,这两种配置有不同的检测逻辑。
- Absolute Mode Cfg:用于确定基准的模式选择的标记。如果启用绝对模式 (==1),则指定的数值监控在检测过程中使用 absolute_mode_cfg.baseline 参数作为固定基准。如果禁用绝对模式 (==0),则指定的数值监控会自适应地配置基准。当达到 frame2armed 值时,基准为元滤波器输出。
12.3.3 AF调试步骤
caf的monitor key log根本不是af_cont_state_monitor/ af_cont_detect_scene_change/ af_cont_detect_panning。没有更多的详细数据日志。
CAF只需查看这个函数af_caf_process_monitor,并检查状态结果[0或1]来微调sad/gyro场景变化和平移。
Trigger refocus condition: is_scene_change = sad->is_change |
gyro->is_change;
is_scene_panning =sad->is_panning | gyro->is_panning;
is_trig_refocus = is_scene_change && is_scene_stable
(1)亮度变化引起的monitor
(2)场景变化引起的monitor
调试monitor algo config Topo CAF
只打开CAF algorithm
调试SADR(scene change) 设置GYRO/GYRO_PANNING/SAD_PANNING sensitivities to 0
调整SADR 灵敏度范围1-100. 值越大越容易触发scene change
SADR sensitivity 调整好,开始调试SAD_Panning sensitivity value。
调整SAD_Panning 灵敏度1-100. 数值越大,越容易获得场景稳定
SADR SAD_Panning 场景变化和场景稳定 ,调试GYRO
调试GYRO(scene change) 设置SADR/GYRO_Panning/SAD_Panning sensitivities to 0
调整GYRO灵敏度范围1-100. 值越大越容易触发scene change
GYRO sensitivity 调整好,开始调试GYRO_Panning sensitivity value。
调整GYRO_Panning灵敏度1-100. 数值越大,越容易获得场景稳定
更新所有调试好的sensitivities ,查看性能。
依据testing cases,fine tuned 每个sensitivity 到可以接受。
03-31 16:02:08.051 888 1189 V CamX : [ VERB][STATS_AF ] af_haf_caf.cpp:999: af_caf_process_monitor Caf topology index 1
03-31 16:02:08.051 888 1189 V CamX : [ VERB][STATS_AF ] af_value_monitor.cpp:634: af_value_monitor_get_trigger CAF_SADR VM GET TRIGGER detection mode 2, abs mode 1, baseline 0, input 14.577575, metafilter 13.794128, decision 1
03-31 16:02:08.051 888 1189 V CamX : [ VERB][STATS_AF ] af_value_monitor.cpp:634: af_value_monitor_get_trigger CAF_GYRO VM GET TRIGGER detection mode 1, abs mode 1, baseline 0, input 0.000000, metafilter 0.000000, decision 0
03-31 16:02:08.051 888 1189 V CamX : [ VERB][STATS_AF ] af_value_monitor.cpp:634: af_value_monitor_get_trigger CAF_SAD_PANNING VM GET TRIGGER detection mode 1, abs mode 1, baseline 0, input 1.103057, metafilter 1.103027, decision 0
03-31 16:02:08.051 888 1189 V CamX : [ VERB][STATS_AF ] af_value_monitor.cpp:634: af_value_monitor_get_trigger CAF_GYRO_PANNING VM GET TRIGGER detection mode 1, abs mode 1, baseline 0, input 0.000000, metafilter 0.000000, decision 0
03-31 16:02:08.052 888 1189 V CamX : [ VERB][STATS_AF ] af_value_monitor.cpp:634: af_value_monitor_get_trigger CAF_FACE_SCENE_CHANGE_HOLD VM GET TRIGGER detection mode 1, abs mode 1, baseline 0, input 0.000000, metafilter 0.000000, decision 0
03-31 16:02:08.052 888 1189 V CamX : [ VERB][STATS_AF ] af_haf_caf.cpp:1030: af_caf_process_monitor setting face value monitor to 0
03-31 16:02:08.052 888 1189 V CamX : [ VERB][STATS_AF ] af_haf_caf.cpp:1075: af_caf_process_monitor Scene change sad 1 gyro 0 face 0 scene panning sad 0 gyro 0
03-31 16:02:08.052 888 1189 V CamX : [ VERB][STATS_AF ] af_value_monitor.cpp:634: af_value_monitor_get_trigger CAF_CAF_SCENE_CHANGE_HOLD VM GET TRIGGER detection mode 1, abs mode 1, baseline 0, input 0.000000, metafilter 0.000000, decision 0
03-31 16:02:08.052 888 1189 V CamX : [ VERB][STATS_AF ] af_haf_caf.cpp:1097: af_caf_process_monitor CAF caf_sc_extension 0 is scene changed 1 is_scene_panning 0
03-31 16:02:08.052 888 1189 V CamX : [ VERB][STATS_AF ] af_haf_caf.cpp:1099: af_caf_process_monitor CAF_is_scene_changed:1 panning 0 stable 1!
03-31 16:02:08.052 888 1189 V CamX : [ VERB][STATS_AF ] af_haf_caf.cpp:1138: af_caf_process_monitor is_face_af: 0 is_caf_af 1 cur_pos 311
03-31 16:02:08.052 888 1189 V CamX : [ VERB][STATS_AF ] af_haf_caf.cpp:1139: af_caf_process_monitor CAF_is_scene_changed: sadr 1 gyro 0!
03-31 16:02:08.052 888 1189 V CamX : [ VERB][STATS_AF ] af_haf_caf.cpp:1140: af_caf_process_monitor CAF_is_panning: sad 0 gyro 0!
03-31 16:02:08.052 888 1189 V CamX : [ VERB][STATS_AF ] af_haf_caf.cpp:1145: af_caf_process_monitor CAF monitor output : 100 0 100 1 !
*Caf topology index 1 means used CAF_TOPO_PROFILE_ADVANCED*
is_scene_change = sad->is_change | gyro->is_change;
is_scene_panning =sad->is_panning | gyro->is_panning;
is_trig_refocus = is_scene_change && is_scene_stable
please notice this log af_caf_process_monitor: CAF monitor output : 100 0 100 1 confidence/focus_level/stability/is_trig_refocus
The values respectively is confidence/focus_level/stability/is_trig_refocus. And will affect different monitor status.
Focus level and Stability only have two values [100 or 0].
is_scene_change == 0? focus_level=100: focuc_level=0
is_scene_stable==1? stability=100: stability=0
Confidence generally only have two values [100/0], but when used multi-window will generateone special value 50 and if enabled PDAF_TOPO_PROFILE_ADVANCED will also finally has chance to re-write confidence to value 50
Topo Default Mixer 这里面参数不知道什么意思。后面在看下。
secondary scene change cnt > 0 稳定就会从新触发对焦
03-31 16:02:00.717 888 1190 V CamX : [ VERB][STATS_AF ] af_haf_default_mixer.cpp:791: af_default_mixer_process_monitor secondary scene change cnt: 5
03-31 16:02:00.717 888 1190 V CamX : [ VERB][STATS_AF ] af_haf_default_mixer.cpp:831: af_default_mixer_process_monitor primary monitor has low confidence. is trig_refocus: 1
12.3.4 PDAF调试monitor
PDAF只需查看这个函数af_pdaf_monitor
pdaf monitor:defocus,confident,stable
通常,PDAF监控场景的变化,并在满足以下条件时触发搜索:
当前帧defocus 值大于 defocus threshold
算法可信度ok
场景稳定。
defcous
正离焦值意味着运动是从近到远。负离焦值意味着运动是从远到近。当离焦值接近零时,表示目标有焦。
confident
置信度是用于相位差估计的场景中线索数量(例如,垂直边缘,场景亮度)的函数。高置信度意味着ROI中的PD具有较小的方差和较高的边缘强度。置信表用于定义相对于传感器增益的最小置信阈值。
high confidence:亮环境和多个垂直边缘。
lower confidence 亮度低的环境和少的vertical edges。
Stable
稳定性是通过评估离焦值历史来计算的。如果值在可调阈值内,则认为场景是稳定的。
confidence table 如何工作
高置信度意味着该 ROI 中 PD 的偏差较小并且可能具有更高的边缘密度。 置信度表用于定义相对于传感器增益的最小置信度阈值.
噪点增益小于或等于某个参数noise gain时,对应Minimum Confidence。
12.3.5 PDAF不触发的 log 分析
(1)PDAF 触发
Trigger refocus condition : is_conf && is_defocused && is_stabl
Line 16022: 03-31 16:07:14.492 892 1185 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:2040: af_pdaf_monitor is_conf 1, is_defocused 0, is_stable 1, is_trig_refocus 0
Line 16426: 03-31 16:07:14.533 892 1189 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:1897: af_pdaf_monitor monitors: defocus_low 0, defocus_high 0 sad_panning 0, gyro_panning 0
Line 16817: 03-31 16:07:14.575 892 1188 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:1897: af_pdaf_monitor monitors: defocus_low 1, defocus_high 0 sad_panning 0, gyro_panning 0
Line 16821: 03-31 16:07:14.575 892 1188 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:1925: af_pdaf_monitor decisions of value monitors: defocus_low 1, defocus_high 0 sad_panning 0, gyro_panning 0 caf_face_is_stable 0 caf_track_is_stable 0
Line 16822: 03-31 16:07:14.575 892 1188 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:1947: af_pdaf_monitor Spotlight flag 0,conf 1
Line 16823: 03-31 16:07:14.576 892 1188 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:2040: af_pdaf_monitor is_conf 1, is_defocused 1, is_stable 1, is_trig_refocus 1
Line 17204: 03-31 16:07:14.622 892 1189 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:1897: af_pdaf_monitor monitors: defocus_low 1, defocus_high 0 sad_panning 0, gyro_panning 0
Line 17209: 03-31 16:07:14.622 892 1189 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:1925: af_pdaf_monitor decisions of value monitors: defocus_low 1, defocus_high 0 sad_panning 0, gyro_panning 0 caf_face_is_stable 0 caf_track_is_stable 0
Line 17212: 03-31 16:07:14.622 892 1189 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:1947: af_pdaf_monitor Spotlight flag 0,conf 1
(2)is_defocused=FALSE 启用pd 对焦失败。
should be trigger refocus but it didn’t trigger again?
Line 10866: 03-31 16:07:13.923 892 1186 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:5161: af_pdaf_proc_defocused roi(0) defocus=29, dof_mult=1.0, defocus_thres=26.5, defocus_cnt=6, min_defocus_cnt=1, is_defocused=TRUE
Line 11444: 03-31 16:07:13.985 892 1187 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:5161: af_pdaf_proc_defocused roi(0) defocus=25, dof_mult=1.0, defocus_thres=26.5, defocus_cnt=0, min_defocus_cnt=1, is_defocused=FALSE And please remember defocused condition: defocus_cnt >= min_defocus_cnt
adjust Scene Monitor
adjust Stable Table
*(3)场景没用pdaf,启用CAF 对焦原因
focus_converge_done=true的条件
a. 场景稳定stable
b.PD Preprocessing -> PD Max Limit Do Not Use Defocus Sample > defocus
场景不稳定
03-31 16:07:17.438 892 1189 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:3828: af_pdaf_is_focus_converge_done defocus=22, focus_converge_done_thres=20, focus_converge_done=FALSE
03-31 16:07:17.438 892 1189 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:3445: af_pdaf_focus_converge Scene is panning. No action until stable.
场景稳定. 32 >26
Line 8566: 03-31 16:07:13.591 892 1185 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:3828: af_pdaf_is_focus_converge_done defocus=26, focus_converge_done_thres=19, focus_converge_done=TRUE
Line 44940: 03-31 16:07:17.484 892 1188 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:3828: af_pdaf_is_focus_converge_done defocus=6, focus_converge_done_thres=20, focus_converge_done=TRUE
find the biggers dac and set the pd_max_limit_do_not_use_defocus_sample over this dac.
If no, it means af_pdaf_is_focus_converge_done failed, return -1 and fallback to contrast af
(4)收敛完成进入finesearch
- af_pdaf_focus_converge condition : need meet is_caf_stable and thenaf_pdaf_is_focus_converge_done return 1.
- af_pdaf_is_focus_converge_done condition : abs(defocus)-abs(next_move) less thanfocus_done_thresh
- next_move is returned by af_pdaf_get_focus_move_steps:
03-31 16:07:17.438 892 1189 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:4255: af_pdaf_get_focus_move_steps defocus=22.00, focus_pcnt=1.00, move_steps=22
- focus_done_thresh equal focus_scan.focus_done_threshold * dof_multiplier * noise_multiplier
Line 7461: 03-31 16:07:13.461 892 1189 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:3381: af_pdaf_focus_converge Adjust wait_conf_recover_cnt for focus convergence in first run = 4
Line 7480: 03-31 16:07:13.462 892 1189 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:3445: af_pdaf_focus_converge Scene is panning. No action until stable.
Line 7899: 03-31 16:07:13.503 892 1184 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:3381: af_pdaf_focus_converge Adjust wait_conf_recover_cnt for focus convergence in first run = 4
Line 8197: 03-31 16:07:13.541 892 1187 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:3381: af_pdaf_focus_converge Adjust wait_conf_recover_cnt for focus convergence in first run = 4
Line 8546: 03-31 16:07:13.590 892 1185 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:3381: af_pdaf_focus_converge Adjust wait_conf_recover_cnt for focus convergence in first run = 4
Line 8569: 03-31 16:07:13.592 892 1185 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:3434: af_pdaf_focus_converge Converge done. Go to fine scan
Line 44512: 03-31 16:07:17.438 892 1189 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:3445: af_pdaf_focus_converge Scene is panning. No action until stable.
Line 44941: 03-31 16:07:17.484 892 1188 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:3434: af_pdaf_focus_converge Converge done. Go to fine scan
(5)状态查询
Line 15400: 03-31 16:07:14.402 892 1185 V CamX : [ VERB][STATS_AF ] af_haf.cpp:152: af_haf_util_change_state HAF_STATE_CHANGE to SEARCH
Line 15405: 03-31 16:07:14.403 892 1185 V CamX : [ VERB][STATS_AF ] af_haf.cpp:159: af_haf_util_change_state HAF_STATE_CHANGE to MONITOR
Line 47337: 03-31 16:07:17.731 892 1187 V CamX : [ VERB][STATS_AF ] af_haf.cpp:165: af_haf_util_change_state HAF_STATE_CHANGE to GO_TO_DEST
红框的内容会覆盖黑框的值。
AF算法已经支持使用不同的值监视器对不同光照条件的灵敏度。该算法采用AEC实数增益作为触发输入,在数值监测库中采用不同的灵敏度剖面。该功能默认关闭。

ensitivity Trigger Arr 参数对应的xml 红框。
对于黑框矩形中的参数是每个值监视的默认灵敏度值,红色矩形中的参数默认不存在,它们是每个值监视的灵敏度触发器数组。算法会检查灵敏度触发器数组是否存在。如果触发器数组存在,它将使用它们而不是黑框矩形中的默认值。

算法将检查通过实增益是落在哪个区域。我们将比较传入的增益值和gain_start,所以请将gain_start和gain_end设置为相同的值
set_sensitivity_trigger
Line 2962: 03-31 16:43:02.200 879 1179 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:5573: af_pdaf_set_sensitivity_trigger sensor gain changed :3.960967, check for VM sens update
Line 2963: 03-31 16:43:02.200 879 1179 V CamX : [ VERB][STATS_AF ] af_haf_caf.cpp:1328: af_caf_set_sensitivity_trigger sensor gain changed :3.960967, check for VM sens update
sensitivity_trigger_vm
vm 设置的无效没有对应的log
HAF_MSG_LOW(“setting %s sensitivity to %d from %d”, p_VM->name, sens, prev_sens);
12.4 AF debug tuning
12.4.1 Continue TRIGGERING
CAF 依赖于陀螺仪参数、SAD(sum of absolute differences)、SADR 参数以检测场景切换。
PDAF依赖于当前帧defocus value、算法的confidence 和 场景的稳定性(stability of the scene)。
SAD 指两帧间亮度值的绝对误差和 (SAD)。 将从 AEC 统计引擎中得到的亮度值传递到 AF,AF 会计算 SAD 以推断是否已发生场景切换。AF 按当前图像帧与上一图像帧的亮度值之差计算 SAD。
SADR为当前图像帧与上一对焦图像帧的亮度之差。 SADR 提供了一种有效的方法, 可以在摄像头缓慢移动导致帧与帧之间 SAD 较小的情况下, 确定场景切换。
连续 AF (CAF) 有两种状态: 监视器状态和搜索状态。 AF 搜索在两种模式中相同, 但监视器状态包含多种会触发状态变化和启动搜索的条件。 触发的实质主要分为两部分:
- 场景切换检测/场景中大幅变动检测
- 开始搜索之前应确保场景稳定
场景切换, 这需要重新对焦。 针对场景切换的调试依赖于以下两个指标:
-
SAD 是用于逐帧进行比较的指标, 对缓慢场景切换的灵敏度较低。 通常, 该阈值应低于 SADR。
-
SADR 是用于与基准值进行比较的指标, 其中基准值是在场景切换且已稳定后确定的(此时对焦已完成, SAD 和 SADR 均不稳定) 。
-
只要超出上述任一指标, 就表示发生了场景切换。
场景稳定( 无平移) , 指场景足够稳定并且已准备就绪, 可以启动 AF 搜索。 场景稳定的调试很大程度上只依赖 SAD。 不过, 如果两个指标均超出阈值, SADR 将重置,因此 SADR 也会影响 SAD 是否稳定的判断。 此类重置机制可防止 SAD 在场景仍处于运动状态时判定场景已稳定。
12.4.2 AF 对于同一场景不一致调试
该问题通常发生在没有纹理(对比度较低) 的场景中。
修正此问题的方法有多种。
- 调整中央区域
- 调整算法阈值
调整中央区域:
- 1.抓取log
- 2.搜素“af_caf_util_get_value i:” ,结果中包含显示搜素行为的镜头位置变化。
- 3.留意在多个搜索时(预扫描) 镜头位置是按升序还是降序变化。 如果上述两种顺序交替出现并且 AF 结果也按类似方式交替显示, 则需要调试 AF。
单次 AF 需要依靠焦距值向算法传达正确的搜索方向。 在对比度较低的场景中, 可能因对比度较低, 导致没有足够的信心进行切换。 此外, 由于算法根据调试头文件中指定的 mid_zone 确定搜索方向, 如果搜索方向错误, 则不会对低对比度曲线进行反向。 - 4.使用完整扫描搜索, 并记录最终位置。
- 5.注意镜头位置对应于 mid_zone 的指数值。
- 6.与完整扫描结果进行对比并调整较为接近物体最终位置的 mid_zone( 每次一个指
数) , 然后检查改进效果如何
03-31 15:53:46.693 892 1201 V CamX : [ VERB][STATS_AF ] af_single_hj.cpp:1832: af_single_hj_flat_curve_detection_by_fratio far_zone_pos 399 near_zone_pos 117 mid_zone_pos 299
调整算法阈值:
- 捕捉出现问题的场景连续对焦的相关日志
- 在日志中, 搜索 min_max_ratio 和 flat_thres。
Line 59565: 03-31 15:53:46.693 892 1201 V CamX : [ VERB][STATS_AF ] af_single_hj.cpp:1835: af_single_hj_flat_curve_detection_by_fratio is_spotlight_scene 0 flat_threshold 0.940000
Line 59566: 03-31 15:53:46.693 892 1201 V CamX : [ VERB][STATS_AF ] af_single_hj.cpp:1839: af_single_hj_flat_curve_detection_by_fratio fv_min 118448208.000000 fv_max 178483488.000000 min_max_ratio 0.663637
- 如果 min_max_ratio 略高于平坦阈值, 则表示场景的对比度较低。 当曲线较平时,算法往往会拒绝搜索( 声明 AF 失败) 。 如果每个搜索序列最后一个采样的min_max_ratio 均高于 flat_thres 且在 0.05 以内, 则调整 AF 头文件中的平坦阈值
12.5 AF Haf tuning
在实际情况中, 某些条件下相位差计算无法足够精确, 所以将其切换到对比度 AF 以执行精确搜索。 新的混合 AF 架构控制 PDAF 与对比度 AF 之间的切换。 HAF 成功收敛后, PDAF会切换为对比度 AF。 可通过以下日志对此进行验证:
关键字: af_pdaf_focus_converge
03-31 16:09:05.713 888 1205 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:3828: af_pdaf_is_focus_converge_done defocus=13, focus_converge_done_thres=19, focus_converge_done=TRUE
03-31 16:09:05.713 888 1205 V CamX : [ VERB][STATS_AF ] af_haf_pdaf.cpp:3434: af_pdaf_focus_converge Converge done. Go to fine scan**
03-31 16:09:05.715 888 1205 V CamX : [ VERB][STATS_AF ] af_caf_search.cpp:933: af_caf_search Entering HAF fine search!
03-31 16:09:05.715 888 1205 V CamX : [ VERB][STATS_AF ] af_haf_fine_search.cpp:406: af_caf_fine_srch_start SETUP: cur 279, near 282, far 301 stats_selected 0
03-31 16:09:05.717 888 1205 V CamX : [ VERB][STATS_AF ] af_haf.cpp:2036: af_haf_focus_converge HAF_CONVERGE_STATUS: 1
HAF 参数说明
| 参数名称 | 说明 | 调试 |
|---|---|---|
| Enable Section | 混合AF算法使能标记 | 置1启用深度算法 |
| Stats Select | 不同统计类型(HW1、HW2、SW) | 选择期望启用的统计类型 |
| Fine Search Drop Threshold | 用以确定考虑峰值丢弃所需要对焦值下降的阈值 | 增大:更易终止精确搜索或找到峰值。减小:更难终止,更多失真,但更稳定 |
| Fine Step Size | 精确搜索的镜头移动步长 | 使用与single AF相同的步长开始 |
| Max Move Step | 马达在稳定时间充足的情况下支持的最大镜头移动距离 | 马达在稳定时间标准内移动镜头的最大能力相关。镜头dac移动线性范围的 30% |
| Max Move Step Buffer | 镜头移动略大于max move step情况下,额外允许的镜头移动步长 | 设为Max Move Step 的25%,并保证其大于精确搜索步长。 |
| Base Frame Delay HAF | 处理的总体帧延迟 | 如果深度信息不可靠或者马达的稳定时间大于 15 ms, 则设置为 1 |
精细搜索扩展特性允许在某个基于深度的算法(即PDAF、TOF、DCIAF)提供的搜索范围之外找到峰值。一般来说,算法会进行粗略搜索(也称为焦点收敛),然后为基于对比的精细搜索提供一个范围。很多时候,精细搜索的范围在找到真正的FV峰值之前就结束了。
精细搜索扩展参数扩展了基于深度的精细搜索算法的搜索范围。如果启用了扩展,精细搜索将评估FV曲线趋势,以确定是否找到峰值。
如果FV趋势表明没有找到峰值,则按照精细搜索扩展参数指定的方式继续搜索。
PDAF3对于DCIAF,它是可选的,如果使用PDAF类型1或2,则不建议使用。
| 参数名称 | 说明 | 调试 |
|---|---|---|
| AF Fine Search Extension | 用以启用和配置延申精确搜索范围方法的结构 | - |
| Max_fine_srch_extension_cnt | 确定延伸的次数 | - |
| Num_near_step | 确定向近端延伸的精确搜索步数 | |
| Step_size | 延伸期间使用的步长 | - |
| Decrease_drop_ratio | 延伸期间的丢帧率阈值 | - |
| Max_fine_srch_extension_cnt | 设置可扩展精细搜索的最大次数的限制。搜索只扩展,直到计数或下降drop_ratio达到阈值 | - |
| Num_near_step | 确定向近端延伸的精确搜索步数 | 默认值 |
| Num_far_steps | 确定向远端延伸的精确搜索步数 | 默认值 |
| Step_size | 需要扩展的情况下用于确定搜索范围的步长。 | 数值越大, 搜索范围越大, 因此搜索次数也将增多 |
| Decrease Drop Ratio | 下降丢帧率用于确定搜索停止标准。 如果当前帧fv 与上一帧 fv 之比小于decrease_drop_ratio,则搜索停止。 | 数值越大, 越容易找到峰值, 但也越容易受噪声影响。 |
Max_fine_srch_extension_cnt:
如果由 PDAF/TOF提供的范围是 [200, 230], 而当前镜头位置是 200, 则在200 到 230 的范围内进行搜索; 如果一直增大FV 趋势, 则意味着峰值会超过 230; 因此现在会将范围扩展为 [230, 260] 并执行搜索; 如果未找到峰值, 则会再次将范围扩展为 [260,290]; 现在已进行了两次扩展。 如果max_fine_srch_extension_cnt 设为 3, 则会进行三次扩展。
12.6 AF BAF tuning
12.6.1.BAF overivew
在大多数情况下,系统提供的BAF缺省值就足够了,不需要进行BAF调优。在某些情况下,可能需要以下可选调优:
- BAF ROI size
- Gamma
- Filter coring
- Y-conversion
- Filter (coefficients, shifter)
图像预处理(Y 转换和 Gamma 校正)- 对焦值生成
Y 转换提供了将 RGB bayer 四像素组合为一个信号的方法, 该信号由每个通道的指定权重给定。 Gamma LUT 用于提高弱光环境中偏暗像素的对比度。

一个用于水平方向, 一个用于垂直方向。 图示滤镜中的子模块(AF_H_1、 AF_V_1 等) 。滤波器块由 FIR 滤波器级联与 IIR 滤波器间的位偏移组成, 以确保 IIR 输入标准化。 IIR之后, 信号通过核化模块去噪, 然后累加器对 FV 进行累加。
12.6.2. Tune BAF ROI
对于大多数用例来说,BAF ROI参数的默认值已经足够了。如果您打算调整BAF ROI参数或实现自定义ROI,请联系CE。介绍BAF ROI参数。

Preset Id参数定义ROI形状首选项。下图说明了所支持的预定义ROI形状
Width Ratio 根据形状设置宽
HeightRatio 根据形状设置高
Grid Size H 有关 ROI 边框的每个区域的百分比。 该数字决定区域数量。
Grid Size V有关 ROI 边框的每个区域的百分比。 该数字决定区域数量。
Grid Gap H (目前不支持)有关 ROI边框的每个区域中间隔的百分比。
Grid Gap V (目前不支持)有关 ROI 边框的每个区域中间隔的百分比。
Num ROI客户ROI区域的数量。当未选择custom_roi预置时将被忽略。
12.6.3 Tune BAF Gamma
Preset Id: 待配置预设项(包括定制配置) 的选项枚举
Gamma Custom :定制统计数据预处理, 仅在 Preset_ID设置为 Custom 时生效。类型: baf_tuning_gamma_t
Channel Select: G channel select is 0 , Y channel select is 1.
Gbrg Channel Select:如果Channel Select=0 这个选项是有效的。0 将pick GR,1 将pick GB。
Y Conversion Enable:Y 转换开启,暂时不用
RGB To Y Coefficients:Channel Select=1 需要配置。Channel Select=0 不生效
Gamma enable:启用gamma lut
可选伽马调优的目标是在不同的像素亮度水平上增加像素对比度。
调试步骤:
1.在距离30厘米处设置一个低对比度图的测试场景。
2. set Gamma Ebale 0 关闭gamma table
3. 跑fullsweep search 和记录fv 值。
4. 生成并更新LUT以提高FV的亮度水平。建议从使用1/2.2作为功率的默认表开始。
5. 观察FV曲线的变化,并根据需要调整表项。
6. 重复步骤对应不同的亮度等级。
12.6.4 Tune BAF Filter

高阶 BAF 的滤波参数,Fileter 下4组参数对应上面Configure 的配置。包括水平和垂直方向滤波。BAF参数 使用默认值就好了。
附录
ISO12233分辨率测试卡分类及功能说明
相机图像分辨率的测试,依据的标准是ISO 12233. 目前分为 ISO12233:2000 ,ISO12233:4000, ISO12233:2014.
目前很多厂家已经开始使用新的ISO标准,淘汰了十几年前的“落伍”标准,而更新成了ISO12233:2014。新的分辨率测试标板是由美国图像质量检测公司imatest联合ISO国际标准制定的ISO 12233:2014 Edge SFR(eSFR)测试卡
(1) ISO12233:2000
ISO12233:2000 为2000线标准型
测试精度:2000x2000x16/9=711w //对应像素比较低;

(2)ISO12233:4000
ISO12233:4000 为4000线增强型
测试精度:4000x4000x16/9=2844w;


这不得不提到一个概念,线对数----lp/mm,每1mm长度内有多少线对。理解起来就是,判断摄像头的清晰程度就看其能分辨出最小的尺度,其实可以和人眼的视力表类比,我们看很小的E来分辨开口方向,其实就是分辨三根横线的间距最小能被看清。
(3)ISO12233:2014(eSFR)
ISO12233:2014 分为 标准版 增强版 扩展版.
下图为增强版.

5834

被折叠的 条评论
为什么被折叠?



