楼主: 9607_cdabigdata
61 0

[战略与规划] Chromatix 7快速入门手册 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-5-29
最后登录
2018-5-29

楼主
9607_cdabigdata 发表于 2025-11-16 15:35:50 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

Chromatix 7 快速入门手册

1. 创建项目

1.1 描述

Chromatix 7 是一种用于 Qualcomm 新一代 ISP (例如 Spectra 280, SDM845, SDM670等) 平台和相机软件架构进行 IQ 调优的工具。鉴于整个 ISP 流程和软件框架均为全新设计,Chromatix 7 在用户界面及生成的文件方面与 Chromatix 6 存在显著区别。本指南旨在向 Qualcomm 的客户提供如何使用 Chromatix 7 创建项目的指导。

1.2 创建

2. 使用 Chromatix 7

2.1 编辑区域触发器

2.2 添加场景

2.3 初始调优

2.3.1 BPS: 拜尔处理阶段

2.3.2 IFE: 图像前端调优

2.3.3 IPE: 图像处理引擎调优

3. 相机调优术语

4. Camx-Dump 原始帧

4.1 导出 EEPROM 数据

4.2 导出 3A 信息

4.3 导出 Raw

4.3.1 导出 IFE 原始数据

4.3.2 传感器 Raw 导出 (仅导出快照原始)

4.3.3 导出 TFE 原始数据

5. ISP-Demux_Blklevel

5.1 概述

5.2 调试

6. ISP-ASF

6.1 概述

6.1.1 高频与低频区分:

6.1.2 高通滤波器:

6.1.3 低通滤波器

6.2 ASF 的作用(两种处理方式之间存在矛盾):

6.3 ASF 的优势:

6.4 ASF 块图:

6.5 参数

6.6 调试

7. ISP-Gamma

7.1 什么是 Gamma

7.2 什么是 Gamma 校正

7.3 为什么需要 Gamma 校正

7.4 Gamma 调试

7.5 Imatest

8. ISP-CC

8.1 概述

8.2 3x3 矩阵

8.3 调试项

8.4 调试

9. ISP-LSC

9.1 概述

9.2 原理

9.3 调试

10. Chromatix_AEC—曝光表

10.1 曝光表的配置

10.2 曝光介绍

10.3 曝光相关的其他参数

11. AWB 调优

11.1 白平衡的概念

11.2 白平衡的原理

11.3 白平衡的算法:

11.3.1 灰度世界法(Grey World Algorithm):

11.3.2 白点算法(White Point Algorithm):

11.3.3 色温比例法(Color Temperature Algorithm):

11.3.4 最大似然估计法(Maximum Likelihood Estimation):

11.3.5 光源标定法(Light Source Calibration):

11.3.6 基于图像分割的方法:

11.4 高通实现白平衡算法的基本思路

11.4.1 确定参考点

11.4.2 验证参考点

11.4.3 光源权重

11.4.4 距离权重

11.5 AWB-illuminant_weight_vector

11.6 AWB-Stats_screening

11.7 AWB-Stats_subsample

12. AF 调优

12.1 AF 基础调优

12.2.2 AF 关闭 EEPROM

12.2 AF pdaf 调优

12.2.1 pdaf 日志设置

12.2.2 验证 pdaf.xml 是否已编译到系统中

12.2.3 检查 pd 功能是否正常运行

12.2.4 PDAF 驱动功能验证

12.2.5 PDAF 粗略搜索与精细搜索

12.2.6 PDAF 触发条件

12.3 AF 监控调优

12.3.1 AF 监控概念

12.3.2 值监控库和算法配置

12.3.3 AF 调试步骤

12.3.4 PDAF 调试监控

12.3.5 PDAF 不触发的日志分析

12.4 AF 调试调优

12.4.1 持续触发

12.4.2 同一场景下 AF 表现不一致的调试

12.5 AF Haf 调优

12.6 AF BAF 调优

12.6.1 BAF 概览

12.6.2 调整 BAF ROI

12.6.3 调整 BAF Gamma

12.6.4 调整 BAF 滤波器

附录

ISO12233 分辨率测试卡分类及功能说明

Project Folder: 指定一个空白文件夹用于存储新建项目的所有文件和仿真结果。

ISP: 选择ISP版本。

XSD Folder: 指定 XSD 文件的位置。XSD 文件定义了调参参数的结构。

XML Folder: 指定 XML 文件的位置。XML 文件用于保存实际的调参参数。如果要启动一个全新项目,则可以不指定 XML 文件夹;若希望利用先前项目的调参参数,则应指定先前项目 XML 文件所在目录,此时新项目的默认参数将采用指定的 XML 文件中的参数。

Presets Folder: 指定 ISP 光谱的 XML 文件。

Driver Info: 有两种方法,一是指定传感器相关信息和 Chromatix 6 所需信息,格式相同;也可以手动输入。示例如下图。二是驱动中的 XML 格式文件。两种方法生成的目录不同。

Driver Info: 传感器相关的信息将在项目目录下生成文件目录 test\ov13850。

Scenario.Default: Chromatix 7 新生成的调参参数(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 编辑区域触发器

Utilties->Parameter Editor 可以修改触发器的值和添加区域。

2.2 添加场景

Edit-> Edit project scenarios 主要包括:传感器、用例、功能、场景。

场景结构如下:

sensor0 拍照可以继承预览的场景。

sensor1 场景可以基于 sensor0 的场景创建。

2.3 初始调优

介绍 ISP 模块调优的步骤。

缩写全称
linearization线性化
PDPC相位检测像素校正
HDR高动态范围
LSC镜头阴影校正
ABF自适应 Bayer 滤波器
Demosaic去马赛克
CCM色彩校正矩阵
GTM全局色调映射
BPSBayer 处理阶段
BPC坏点校正
GIC绿色不平衡校正
LTM局部色调映射
GTM全局色调映射
ADRC自动动态范围压缩

2.3.1 BPS: Bayer 处理阶段

Tune linearization 传感器对场景亮度的反应可能不是线性的,并且可能随光照条件变化。线性化调整亮度水平在图像最暗部分。从三个图像的通道值取平均值来计算黑色电平偏移值。然后从像素输出中减去这些偏移值以获得校正值。

Deselect the Bls Enable check box if you wish 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

摄像机成像大致分为RAW域的成像和RGB域的成像。两者之间的转换由Demosaic模块实现。

RAW域的杂音主要分为高斯杂音和散粒杂音两类。其中,高斯杂音不受光照强度影响,而散粒杂音遵循泊松分布,会随光照强度的提升而逐步增加。在Sensor直接输出的RAW图中,这两种类型的杂音都存在,因此RAW图的杂音水平会随着光照强度的增加而上升,但值得注意的是,此阶段的信号噪声比也在增加。

Tune HNR

HNR模块位于Bayer处理段(BPS)的尾端,仅适用于快照。它包括基于DCT的频域降噪、梯度平滑和空间域混合。不同于传统的空间域降噪,基于DCT的频域降噪能够区分微弱纹理和杂音。利用这种方法,HNR能够在保持边缘和纹理的同时减少杂音。

Tune GTM ADRC

ADRC包括调整LTM和gamma以及GTM

Gamma – 根据像素值对每个像素应用伽马曲线。

LTM – 根据局部亮度对每个像素应用色调映射增益以增强局部可见性。

GTM – 对每个像素应用全局色调曲线以增强全局可见性。使用HDR和ADRC来补偿增强的图像动态范围。

TMC – 配置GTM和LTM的ADRC补偿曲线。

2.3.2 IFE: Image Front End 调整

Tune ABF

Tune 线性化

Tune demosaic

Tune PDPC

Tune BPC/BCC

BPC/BCC模块用于校正冷热像素或联体。

Tune LSC

Tune LSC

2.3.3 IPE:图像处理引擎调整

Tune ANR

高级降噪(ANR)是一种针对快照和视频模式的多通道空间噪声滤波。

Tune TF

时间滤波(TF)移除图像中的不必要频率(噪声)。

Tune CAC

当不同带宽的入射光被镜头轻微折射,未能在相机传感器上的同一视觉平面上聚焦时,色差会导致边界处出现颜色条纹。CAC模块用于校正图像中的这些视觉伪影。

Tune CC

使用色彩校正(CC)模块减少色彩复制不准确并提高色彩保真度。

Tune 2D LU

可以在不影响其他颜色的情况下调整特定颜色。

Tune CS

色调抑制(CS)

Tune ASF

ASF是一种自适应滤波器,可根据边缘检测对图像的不同部分应用平滑和锐化。它平滑细节较少的区域以消除噪声,并锐化边缘以提高图像清晰度。

Tune GRA

颗粒添加器(GRA)模块控制添加到图像上的细微颗粒数量。大多数情况下,默认设置已足够,因此GRA模块的调整取决于用户。

Tune MCTF

运动补偿时间滤波器(MCTF)进一步减少图像中的噪声。

3. 摄像头调整术语

术语

全称

中文说明

IFE

Image Front End image

前端

BPS

Bayer Processing Segment

Bayer处理阶段

IPE

Image Processing Engine

图像处理引擎

TFE

Thin Front End

薄前端

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
Local Tone 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 lag
零快门延迟

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 filter array
色彩滤镜阵列

LA
luma adaptation
亮度适应

ABCC
assisted bad cluster correction
辅助坏像素簇校正

TM
Target module
目标模块

IAF
instant auto focus
即时自动对焦

DDM
dense depth map
密集深度图

LCA
logic cell array
逻辑单元阵列

WNR
wavelet noise reduction
小波降噪

LUT
lookup table
查找表

MCC
macbeth 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
Touch auto focus
触摸自动对焦

GM
Golden Module
金模组

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
chromatic 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数据:

推送一个配置文件至
/vendor/etc/camera/camxoverridesettings.txt
adb shell "echo dumpSensorEEPROMData=TRUE >> /vendor/etc/camera/camxoverridesettings.txt
设置Android属性
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 //常规设置
切换以启用调优数据导出。查看大小设置以设置新大小或使用默认值

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 (仅导出快照原始数据)

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 倾倒 TFE 原始数据
adb root
adb remount
adb shell setprop
persist.vendor.camera.autoImageDump 1
adb shell setprop persist.vendor.camera.autoImageDumpMask 0x200 // TFE 节点所有输出端口
adb shell setprop persist.vendor.camera.autoImageDumpTFEoutputPortMask 0x7c // TFE 自动图像倾倒输出端口掩码
adb shell setprop persist.vendor.camera.offlineImageDumpOnly 0 // 倾倒所有启用节点的离线处理输出图像。这将运行极其缓慢
adb shell setprop persist.vendor.camera.reprocessDump 0 // 倾倒重新处理输入图像和元数据 adb reboot
autoImageDump
布尔 类型
1: 启用倾倒
0: 禁用倾倒
autoImageDumpMask
无倾倒 = 0x0
IFE 所有输出端口 = 0x1
IPE 所有输出端口 = 0x2
BPS 所有输出端口 = 0x4
所有 JPEG 节点的所有 JPEG 输出端口 = 0x8
FDHw 所有输出端口 = 0x10
LRME 所有输出端口 = 0x20
RANSAC 所有输出端口 = 0x40
所有 ChiNodes 的所有输出端口 = 0x80
CVP 所有输出端口 = 0x100
TFE 所有输出端口 = 0x200
OPE 所有输出端口 = 0x400
QSAT 所有输出端口 = 0x800
上述未明确列出的所有其他节点 = 0x40000000
注释: 注意 ISP 流程。以上命令对应的是 BPS IFE TFE。如果需要倾倒 OPE,请参考以下修改相应值
offlineImageDumpOnly 布尔 类型。仅倾倒所有启用节点的离线处理输出图像
以下文件都包含相应的判断:
camxopenode.cpp
camxipenode.cpp
camxbpsnode.cpp
autoInputImageDumpMask: ImageDumpType 将倾倒限制为仅指定节点
无倾倒 = 0x0
IFE 所有输入端口 = 0x1
IPE 所有输入端口 = 0x2
BPS 所有输入端口 = 0x4
所有 JPEG 节点的所有 JPEG 输入端口 = 0x8
FDHw 所有输入端口 = 0x10
LRME 所有输入端口 = 0x20
RANSAC 所有输入端口 = 0x40
所有 ChiNodes 的所有输入端口 = 0x80
CVP 所有输入端口 = 0x100
上述未明确列出的所有其他节点 = 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 概述
相机传感器的工作机制:首先感应到光信号,随后将光信号转变为模拟信号,再经由A/D转换成数字信号。以10位数据为例,转换后的数字信号范围在0-1023之间,但A/D转换器的精确度无法转换出电压值中微小的部分,从而造成暗部细节的丢失。
此时,需人为地给输出信号加上一个固定的偏移量,使整个信号值放大,从而保留了电压值中较小的暗部细节,当然这也会损失一些亮度细节。这种操作是基于我们在拍摄时更关注暗部效果,因此保留暗部细节而牺牲部分动态范围的做法得到了认可。
产生黑电平的另一个原因与相机硬件相关,传感器的电路本身会产生暗电流。暗电流主要在CMOS芯片通过光电二极管将光信号转换为模拟信号的过程中生成,光电二极管受温度和电压稳定性等因素的影响,导致全黑状态下输出的电平不一定稳定为0,信号不稳定会导致图像出现偏色。人为将全黑状态的数值固定在一个特定的黑电平值,很大程度上是为了确保信号的稳定性,以保证图像效果的一致性。
什么是黑电平:
传感器本身存在暗电流,即使在没有光线照射的情况下,也有一定的输出电压。黑电平调整的目的是在图像处理过程中减去这部分电压,以免影响后续的白平衡调节。
黑电平获取:
在传感器内部保留一部分未曝光的像素,通过读取这些像素值的大小,即可得出黑电平的值。
黑电平的去除:
黑电平偏移使用4个通道(r、gr、gb、b)进行黑电平校正。然后从像素输出中减去黑电平偏移值,以获得校正后的值。
5.2. 调试
由于传感器的特性,其对场景亮度的响应可能不是线性的,这可能根据光源条件而变化。例如,在强光下,传感器的响应曲线几乎呈平坦状态。而在黑暗环境中,由于暗电流的影响,传感器的输出不会完全为零。
线性化调整可以优化图像中最暗部分的亮度水平。通过对三个图像的通道值进行平均,计算出黑色水平偏移值。这些偏移值将从像素输出中减去,以获得校正后的值。
选择是否启用BLS(黑电平减法模块),可以减少暗环境中图像偏红的现象。偏移值:从“demuxblklevel”留下的剩余黑电平将从所有通道中减去。如果减得过多,图像可能会偏绿。


6. ISP-ASF
6.1 概述
ASF–自适应空间滤波器
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_symmetric_coeff_tab : 调整滤波核. 必须调优
    • hpf - 高通滤波
    • 薄滤波核(Thin Kernel):薄滤波核指具有小尺寸或细特征的滤波核。它通常用于捕捉图像中的细节或边缘的高频信息,以突出细线或细节。
    • 中等滤波核(Mid Kernel):中等滤波核指具有中等大小的滤波核。它在细节和平滑效果之间提供了平衡,适用于多种图像处理任务,如图像平滑、去噪或细节增强。
    • 粗滤波核(Thick Kernel):粗滤波核指具有大尺寸或粗特征的滤波核。它主要用于平滑图像或提取大的结构特征,可以减少图像中的细节并强化粗略的形状或轮廓。
  2. layer_1_lpf_symmetric_coeff_tab 保持不变
    • lpf - 低通滤波
    • 高通滤波器(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
调整:增加此值可以提升锐化效果
调整:值越高,锐化效果越明显

(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 for negative halos 基于级别的负边缘(负高光)增强增益查找表
Layer 1 Gain Negative Lut Table 影响暗区黑色或较深的边缘,值越大,锐化效果越强

Positive halos(正边缘)指的是在边缘增强或滤波过程中,边缘或高频信息被增强并产生的明亮区域或光晕效果。它们通常表示增强的边缘、纹理或图像细节,使其更加醒目和突出。

Negative halos(负边缘)指的是在边缘增强或滤波过程中,边缘周围产生的暗区域或光晕效果。它们通常是由于边缘增强算法中的过渡效应或非线性处理引起的,可能会导致边缘附近的图像区域变暗或产生不自然的效果。

(7)layer_1_gain_weight_lut
描述:Normalized activity-based sharpening gain LUT/归一化活动基础的增强增益查找表
调整:增加这个可以增强锐化效果
Layer 1 Gain weight Lut 影响输出图像的锐度,表示归一化活动的条目。值越大,图像信息密集区域的锐度越高。曲线斜率越大,这种曲线形状会增加细节,同时会增大噪声。相反,斜率小,减少图像细节并会降低噪声。

(8)layer_1_gamma_corrected_luma_target
描述:Luma target after gamma to control level-based sharpening/经过伽马校正后的亮度目标,用于控制基于水平的锐化。通过根据经过伽马校正后的亮度目标选择性地应用锐化技术,可以对锐化效果进行微调和控制,以增强所需的图像细节和边缘。
调整:更高的值,更少的增益上限。较高的值,对正增益的增益上限进行降低。

在图像处理的背景下,当提到对正增益设置“增益上限”(gain_cap)时,它表示对正增益数值设定的最大限制或阈值。通过调整这个限制,可以控制对图像中正增益区域的增强程度。

它暗示当对正增益的增益上限设置较高的值时,会导致对正增益区域的增强程度减少。换句话说,增加增益上限限制了增强的程度,使得对正增益区域的增强更加保守或受限。

这种调整可以细调保留图像细节和防止在较亮或高增益区域过度增强之间的平衡。通过降低对正增益的增益上限,可以限制这些区域的增强。

(8)layer_1_gain_cap
描述:“Upper cap of sharpening gain”指的是锐化增益的最大上限值。在图像处理中,锐化增益用于增强图像中的边缘和细节。通过调整锐化增益的上限,可以控制增强效果的强度。
当设置一个较高的锐化增益的上限时,表示对增强效果施加了更高的限制。这意味着锐化增益的增强效果将受到限制,以避免过度增强导致图像出现不自然或伪影的问题。
调整锐化增益的上限可以平衡保留图像细节和防止锐化过度增强之间的关系。通过设置适当的锐化增益上限,可以确保增强效果适度,并获得更好的图像质量和视觉效果。

需要注意的是,锐化增益的最大值需依据具体的影像和应用场景进行调节,以达到预期的强化效果和视觉感受的要求。

tuning: 数值越大,锐化强度越高。

过度的锐化可能导致图像产生伪影、噪声增多或过分强调的现象。因此,在调整锐化参数时,需要平衡增强效果和图像质量,以获取最理想的视觉成果。根据具体的图像和使用需求,可能需要适当调整参数,以避免过度锐化带来的负面影响。

(9)layer_1_clamp_ul

描述: 手动设定正向增益裁剪级别的锐化

锐化是增强图像边界和细节的技术,而正向增益则是作用于图像边界和细节强化的增益值。裁剪级别用于限定正向增益的范围,以防过度强化和失真。

在手动设定正向增益裁剪级别的锐化中,用户手动设置正向增益的上限或临界值,超出该临界值的增益将被裁剪或限制。这样做可以调控锐化效果的力度,防止过度强化导致图像伪影、噪声或不真实的效果。

tuning: 将值设为更高以获得更显著的边缘增强效果。

(10)layer_1_clamp_ll

描述: 手动设定负向增益裁剪级别的锐化技术。

锐化是增强图像边界和细节的技术,而负向增益则是作用于图像边界和细节强化的负增益值。裁剪级别用于限定正向增益的范围,以防过度强化和失真。

在手动设定负向增益裁剪级别的锐化中,用户手动设置负向增益的下限或临界值,低于该临界值的增益将被裁剪或限制。这样做可以调控锐化效果的力度,防止过度强化导致图像伪影、噪声或不真实的效果。

tuning: 将值设为更高以获得更显著的边缘增强效果。

(11)layer_1_activity_clamp_threshold

描述: 对5x5带通滤波器输出(活动)进行静态裁剪

“静态裁剪”是一种技术,用于限定某变量或参数的取值区间。而“5x5带通滤波器”是一种滤波器,用于提取图像中特定频率范围的信息。

这指出了对5x5带通滤波器输出(活动)进行静态裁剪。这意味着对滤波器输出的活动值进行限制,使其取值在固定的区间内。

静态裁剪可用于调控图像中的活跃程度,以达成预期的效果。通过设定裁剪阈值,可以限定活动值的区间,以去除噪声、减少过度强化或限制图像中某些区域的强化程度。

需要根据具体的应用需求和图像特性来确定裁剪的阈值。通过静态裁剪5x5带通滤波器的输出活动,可以控制强化效果,并获得更佳的图像质量和视觉效果。

tuning: 值越高,锐化越强。

(12)layer_1_median_blend_upper_offset

描述: 中值混合的上偏移量

在图像处理中,“中值混合”是一种将多张图像或图像通道进行融合的技术。它通过计算像素值的中位数来生成最终的混合结果。

而“上偏移量”是指对中值混合结果进行调整或修正的参数。上偏移量可用于提升或减少混合结果中的像素值,从而改变混合效果。

这指的是对中值混合结果进行上偏移量的调整。通过增加上偏移量,可以使混合结果中的像素值整体提升,从而增强图像的亮度或对比度。反之,通过减少上偏移量,可以使混合结果中的像素值整体下降,从而降低图像的亮度或对比度。

tuning: 值越高,锐化越强。

(13)layer_1_median_blend_lower_offset

描述: 中值混合的下偏移量。必须小于上偏移量。

通过减少下偏移量,可以使混合结果中的像素值整体下降,从而降低图像的亮度或对比度。通过适当调整下偏移量,可以控制混合结果的亮度范围,以达到所需的图像处理效果。

tuning: 值越高,锐化越弱。

(14)layer_1_sp

描述: 3x3中值滤波平滑百分比

在图像处理中,“3x3中值滤波器”是一种常用的滤波器,用于平滑图像并消除噪声。它通过计算像素周围邻域的中位数来代替当前像素的值,从而实现平滑效果。

而"smoothing percentage"(平滑百分比)是指控制平滑程度的参数,用于调节中值滤波器的效果。它表示将多大比例的邻域像素值纳入计算中,以决定最终平滑结果。

在给定的上下文中,“3 x 3 median filter smoothing percentage"指的是在进行3x3中值滤波时,用于确定参与计算的邻域像素值所占的比例。

较高的平滑百分比将更多的邻域像素纳入计算,从而生成更平滑的结果。而较低的平滑百分比则会减少邻域像素的贡献,可能保留更多细节和边缘信息,但平滑效果较弱。

(15)radial_activity_adj

描述:基于径向距离的活动修正系数

“activity based on radial distance”(基于径向距离的活动)指的是根据图像中像素点与中心点之间的径向距离计算的活动值。

通过基于径向距离进行修正,可以根据像素点到图像中心的距离对活动值进行加权或缩放。这样可以实现根据距离远近对活动值进行不同程度的调整,从而在图像处理过程中更加精确地反映像素的活动情况。

通常,较远离中心的像素可能会获得较小的修正系数,而较接近中心的像素可能会获得较大的修正系数。

tuning:增加修正系数以使角落更加锐利

(16)radial_gain_adj

描述:基于径向距离的增益修正系数

通过增加修正系数,可以强调靠近图像中心的区域,增强其细节和对比度。这种基于径向距离的增益修正系数的使用可以帮助实现更加自然和均衡的图像增强效果。

tuning:增加修正系数以使角落更加锐利

(17)gain_contrast_positive

描述:基于对比度的增益,用于增强正边缘光晕的效果。

在图像处理中,“sharpening gain”(增强增益)用于增强图像的边缘和细节。而"positive halo”(正边缘光晕)指的是在增强过程中出现的光晕效果,通常表现为边缘周围的亮区。

通过基于对比度的增益,可以根据像素的对比度水平调整边缘光晕的增强程度。较高的增益将产生更显著的正边缘光晕效果,而较低的增益则会减少或抑制光晕的出现。

这种基于对比度的正边缘增强增益可以用于改善图像的锐利度和细节,并突出边缘区域。它可以增强图像的视觉效果,使边缘更加清晰和饱满。

tuning:值越高,锐化越强

(18)gain_contrast_negative

描述:基于对比度的增益,用于增强负边缘光晕的效果。

在图像处理中,“sharpening gain”(增强增益)用于增强图像的边缘和细节。而"negative halo"(负边缘光晕)指的是在增强过程中出现的光晕效果,通常表现为边缘周围的暗区。

通过基于对比度的增益,可以根据像素的对比度水平调整负边缘光晕的增强程度。较高的增益将产生更显著的负边缘光晕效果,而较低的增益则会减少或抑制光晕的出现。

tuning:值越高,锐化越强

(19)min_max_filter_coefficients

描述:5 x 5 最小值和最大值滤波器的滤波系数

在图像处理中,最小值和最大值滤波器是常用的滤波器类型,用于平滑图像、去除噪声或检测边缘。

5 x 5 最小值滤波器使用一个 5 x 5 的滑动窗口,在每个窗口内选择像素的最小值作为输出像素的值。这样可以实现图像的平滑效果,并抑制小尺度的噪声。

5 x 5 最大值滤波器使用一个 5 x 5 的滑动窗口,在每个窗口内选择像素的最大值作为输出像素的值。这样可以突出边缘和亮区,实现图像的增强效果。

滤波器的滤波系数是指在滤波过程中窗口内每个像素的权重值。对于最小值和最大值滤波器,滤波系数通常是固定的,无需进行调整。

tuning:值越高,锐化越强

(20)radial_anchor

描述:基于半径的降噪的锚定表(距离百分比)

在基于半径的降噪算法中,锚定点表用于确定不同距离比例下的降噪级别。此表定义了每个距离比例对应的降噪强度或参数。

锚定点表的目标是依据像素点到图像中心的距离比例来调节降噪的程度。远离中心的像素点通常会经历更强的降噪处理,而靠近中心的像素点则通常接受较弱的降噪处理。

tuning: Define the radial points 定义径向点. 在图像处理与计算机视觉领域,径向点指的是相对于图像中心的距离和方位确定的点。它们常被用来描绘和解析图像中的特性、边界或物体。

6.6 调试
设置区域
fine tuning 拍摄实物,直接调试
区域数据 展开 asf 30 区域数据
设置第一层对称内核参数
调试第一层增益 强度依据层级和活动性 加强边缘和纹理
设置第二层内核参数 默认
调试第二层增益强度 依据层级和活动性 增强粗边缘和局部边缘
如有光晕现象,调试增益对比度 减少边缘周围的增益强度
如皮肤显得脏,调整皮肤增益 减少皮肤上的锐化
调整平滑强度 使边缘更加柔和
调整增益对比度 若出现光晕 调整钳位

点击模拟
内核 . 在内核表中选择 HPF 对称系数, LPF 对称系数 或 activity band pass 系数,按需调整值.
查找表 .
增益查找表
总体增益 -- 整体增益
阴影增强 – 暗部增强
高光增强 – 亮区增强
负增益
负增益 – 负增益
负阴影 – 负暗部
负高光 – 负亮部

细节选项卡
细节 – 细节
噪声 – 噪音
光晕 – 光环

当对比度较低时, chroma 边缘 出现光晕, 调整 chroma 增益 . 如果边缘对齐显得不自然, 调整边缘对齐的阈值.

如果图像存在角噪声或细节较少, 请调整径向增益 和径向活动性 .
Sigma 查找表 RNR 调整 RNR 控制点
四个膝点, 每个点都有不同的降噪值.

7.ISP-Gamma
7.1 什么是 Gamma
Gamma 是一种指数曲线,显示器使用这种指数曲线来调整实际输出到显示屏上的色彩值,以更好地适应人的视觉体验。
Gamma 是显示器用来调整我们输入的色彩值的方法,而 Gamma 校正则是逆向调整显示器的修改过程,使图形开发人员能够在真实的线性 RGB 空间中进行光照和着色。
灰阶是指将白色与黑色之间按照对数关系分为多个等级,其范围通常是 0-255,其中白色为 255,黑色为 0 .
一个完整的图像系统需要两个 Gamma 值:
(1)编码 Gamma:它描述了编码传输函数,即图像设备捕捉到的场景亮度值(scene radiance values)与编码的像素值(encoded pixel values)之间的关系。
(2)显示 Gamma:它描述了显示传输函数,即编码的像素值与显示亮度(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) 图像文件的GAMMA - 大部分图像文件采用1/2.2的编码伽马值(例如使用sRGB和Adobe RGB 1998色彩的文件),但RAW文件例外,它们使用线性伽马值.

(4) 显示器GAMMA - 行业已普遍采纳2.2作为标准显示伽马值.

7.3. Gamma 校准

测试环境: TL84(有些文档提到D65光源下不可调节,因此我选择了TL84),灰阶卡

测试步骤:

  • 在室内、室外、暗处环境中拍摄灰阶卡
  • 将手机设置为原始分辨率,拍照菜单保留默认设置
  • 将灰阶卡固定在灯箱光源中央. 如图所示
  • 待图像稳定,完成对焦后拍摄照片
  • 打开imatest -> stepchart,导入灰阶图。
  • imatest具体操作如下
  • 生成了Excel表格,位于图片下方。
  • 通常客观标准要求,相邻两阶亮度差需大于8,并且这样的阶数需大于等于13阶。(这根据每个公司的具体标准而有所不同)

7.4. Imatest

点击Stepchart 选项, 导入测试图片.colorcheck 下方的那个

调整ROI

参数设定

基本保持默认. 在Scaling下的results中选择image density range = 1.5(文档建议不使用此选项,所以选择了3)

点击OK后显示测试结果. 红色圆圈标注的是: 曝光测试和gamma的结果

实际测试中,我们的标准通常是亮度差值大于8才视为可区分,因此我们可以先保存测试结果,

然后在stepchart_summary.csv中编写一个公式来计算相邻两阶亮度的差值,以确定可以区分多少级灰阶.

因此,上述测试结果显示可区分12阶。计算方法基于Pixel那一列,上一行减去下一行

8.ISP-CC

8.1 概述

由于摄像头系统中使用的光学组件(镜头、色彩滤镜等)和传感器的特性,当图像显示在特定输出媒介上时,原始RGB数据可能无法准确地呈现给人眼。因此,需要进行色彩校正。

在现代数字相机设计中,色彩校正有助于系统实现更高的色彩质量和保真度,因此成为色彩信号处理过程中的必要部分。通常使用3x3矩阵(在使用三色相机的情况下)进行色彩校正。色彩校正矩阵 (CCM) 的调试可以最大限度地减少色彩还原误差,并提高色彩保真度。

8.2 3x3 矩阵

色彩校正矩阵:

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 概述
镜头阴影分为两部分,亮度均匀性(luma shading correction),色彩均匀性(colour shading correction)。
镜头各个位置和中心的透射率差异:luma shading
镜头对不同光谱的位移差异:color shading
Luma shading即所谓的晕影(vignetting),镜头的通光量从中点向角落递减,导致传感器的亮度响应从中点向角落递减,图像表现为中间亮,四周逐渐变暗。
luma shading的原因:
1.机械结构造成,工艺误差,安装倾斜,影响物体光线在摄像机内的传播
2.由镜头(Lens)的光学特性引发。由于凸透镜中心的聚焦能力远超边缘,从而导致传感器中心的光线强度高于四周。此现象亦称为边缘光照度衰减
color shading的原因:
1.由于镜头对不同光谱光线的折射程度各异
2.由红外滤波器(IR-Cut filter)引入
3.由传感器上微透镜的CRA与镜头的CRA不匹配造成
4.校准参数不当

9.2. 原理
镜头阴影校正(LSC)是处理镜头阴影这种亮度不均现象的一种校正方法。当然,原理非常简单,只需对成像的四周进行相应的增益计算,就能使四周亮度看起来接近中央亮度。

9.3 调试
确定定义的区域数量
无色差校正默认开启。若需禁用无色差校正,请前往参数编辑器,导航至SW_CONTROL > Tintless 23 Sw V2 > Enable Section > Tintless En,这可以调整色彩阴影.
导入Golden Module 的数据
加载rolloff 的原始图片
调整“Radius percentage”半径百分比滑动条以调整要校正的区域(从图像中心开始)。使用“Correction percentage”校正百分比滑动条调整要应用的校正量。
优化
查看Show data,检查四通道的值,正常范围(1-5)
如有需要即可调整Advanced 。每个通道都可以调整。
色彩阴影
/// tintless_threshold_tab
///
/// 调整级别: 必须调整
/// 描述: 根据强度确定有多少色彩阴影会被视为色差进行处理。
/// 类型: uint
/// 默认值: 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
/// 范围: [0, 10]
/// 位深度: 4u
/// 长度: 16
/// 备注: 较高的阈值会校正更多的色彩阴影,但也会过度校正场景中的实际颜色。
亮度阴影
调整 R,GR,GB, B 的值.
镜头阴影
校正是将其分为17*13个区域分别进行校正.
大致 左上角0 ,右上角12,左下角204,右下角220 .

10. Chromatix_AEC—曝光表

10.1 曝光表的设定

首行exp time 必须依据sensor info 来计算。

1秒 = 1000 毫秒 = 1000_1000 微秒 = 1000_000_000 纳秒
1GHz = 1000 MHz = 1000_000 KHz = 1000_000_000 Hz
转换为纳秒,需乘以1,000,000,000。

通过sensor 驱动获取到的帧行长:
<frameLengthLines>3260</frameLengthLines>
<!--最小水平消隐间隔(像素)-->
<minHorizontalBlanking>125</minHorizontalBlanking>
<!--最小垂直消隐间隔(行)-->
<minVerticalBlanking>30</minVerticalBlanking>

在spec 中同样可以查到帧长。

10.2 曝光简介

sensor 的曝光方式分为逐行曝光和全局曝光。

sensor 逐行曝光:从第一行开始,逐行进行曝光。优点:成本较低。

sensor 全局曝光:所有行同时开始并结束曝光。优点:每行的曝光时间较为统一,拍摄动态物体时图像不会产生偏移或不一致的情况。

关于sensor 曝光的相关计算:

line_time 计算:
line_time = line_length / pclk
line_time = 4896 / 480000000 = 10200ns

  • a). line_length: 单行长度(含h_blank)
  • b). pclk: 控制像素输出的时钟信号,即像素采样时钟,单位Hz。表示单位时间内采样的像素数量。
  • c). line_time: 曝光单行所需时间

<!--帧线长的像素时钟
通常这个值是活动宽度加上消隐宽度 -->
<lineLengthPixelClock>4896</lineLengthPixelClock>
<!--帧行长
通常这个值是活动高度加上消隐高度 -->
<frameLengthLines>3260</frameLengthLines>
<!--最小水平消隐间隔(像素)-->
<minHorizontalBlanking>125</minHorizontalBlanking>
<!--最小垂直消隐间隔(行)-->
<minVerticalBlanking>30</minVerticalBlanking>
<!--输出像素时钟-->
<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: 用于填充空白行

frame_length = exposure_line + dummy_line

维持行数和帧长间的最小偏差,一帧曝光结束至下次准备重新开始曝光的时间

<verticalOffset>8</verticalOffset>

每行的像素时钟 (line_length_pclk),像素时钟 = 最大 FPS * 每帧的行数,预览分辨率的垂直偏移 (vert_offset)

预览的最短消隐时间(单位为纳秒)计算公式为:minPreviewBlankingtime = (每行像素时钟 / 像素时钟) * vertOffset * (10^9)。注:10^9 为从秒转换成纳秒。

11. AWB-调校

11.1 白平衡概念

AWB – 自动白平衡

白平衡指的是:无论在何种光源条件下,都能将拍摄的白色物体图像还原为白色。

人眼能在早晨、中午、晚上的不同色温下准确地看到白色。为了使CMOS具备同样的能力,必须针对每种光源进行相应的色彩校准,从而实现类似人眼的功能。此功能称为白平衡。

11.2 白平衡原理

如何让camera sensor拍摄的图像与人眼所见一致?

我们将sensor的R、G、B 分量各自乘以一个系数,使RGB 三个能量保持一致即可。

白平衡的算法就是计算R、G、B的增益值。通常在实验室中使用18%灰卡或者选取第22个灰色色块,通过软件计算出R、G、B 的平均值,鉴于G 最高,因此以G 为目标进行补偿。

例如:原始R =15,G=40,B=30,采用以下方法计算白平衡的增益值。

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;

第三步是根据Von Kries 对角模型,对图像中的每个像素R、G、B,计算其结果值:

Rnew = R * Kr;

Gnew = G * Kg;

Bnew = B * Kb;

在上述计算过程中,可能会遇到溢出(>255,不会出现小于0的情况),处理方式有两种。

  1. 直接将像素值设为255,这可能导致图像整体偏白。
  2. 计算所有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-illumination_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

统计数据筛选的概念。

过暗和过亮(饱和)的统计数据可能对 Bayer 网格统计数据信息(如 R/G 和 B/G 统计数据平均值)产生负面影响。过暗的统计数据会受到多种噪声源的影响,而高度饱和的非灰色统计数据可能会被视为灰色统计数据。这会导致误导性的颜色统计数据。

对应文件: Scenario.Default\XML\STATS\SFStatScrV1.xml

暗像素阈值 :

触发: 触发范围lux 指数起始值和结束值。lux 指数在此范围内,统计数据会将R/G/B 核心数据作为暗像素阈值。

数据: 定义三个暗像素的阈值,分别用于R、G 和B。表示可接受的最低亮度。亮度低于此阈值,将忽略统计数据。

饱和像素阈值

触发: 触发范围lux 指数起始值和结束值。lux 指数在此范围内,统计数据会将R/G/B 核心数据作为饱和阈值。

数据: 可接受的最高亮度值。高于阈值,将忽略统计数据。

11.7 AWB-Stats_subsample

Stats subsample : 统计数据二次采样

计算并加载全部统计数据集合通常需耗时。尽管 AWB 可借助 SKIP 程序(每隔2至4列选取一次统计数据)来估计统计数据子集,但此方法对均匀采样无益。

对应文件: Scenario.Default\XML\STATS\SFSubSmpV1.xml

Enable Flag: 开启或关闭

Mode: SKIP 和 BINNING. SKIP 模式用于选定或舍弃统计数据,BINning 模式则用于选定需计算均值的统计数据.

Pattern: 在4*3 掩模中指定使用的统计数据. 1表示使用, 0表示舍弃

左侧图案: 1000 1000 1000,右侧图案: 1111 1111 1111,左侧图案: 总统计数据量:3072,右侧图案: 总统计数据量:768

12.AF 调校

12.1 AF 基础调校

CAF 审核测试

  • Actuator Hysteresis/Damping 双向完整扫描磁滞
  • Actuator range test 开环电机范围
  • Actuator settle time 电机稳定时间
  • Focus value contrast and tail 对焦值曲线的对比度与拖尾
  • Distance to lens mapping 镜头距离映射

完成 RFI 工作表

将 xxx_actuator.xml 的 initialCode 更改为由 RFI 计算得出的结果。

initial finescan setepsize 设定为 Num Steps Between Stat Points(每次镜头移动的步长),精确搜索步长。

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 数据导出

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 镜头

Calibration Data: numberOfDistances: 0

镜头移动是通过编程数字 (Digital) → 模拟 (Analog) 控制执行器内的转换器 (DAC).

未关闭 eeprom 时, dac 与镜头位置的关系。

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 文件。

日志配置(开启AF(8),State(2),Sensor(2) 的记录)

cat /vendor/etc/camera/camxoverridesettings.txt
overrideLogLevels=0x3F
logWarningMask=0x08000202
logInfoMask=0x08000202
logVerboseMask=0x08000202
enable3ADebugData=TRUE
dumpSensorEEPROMData=TRUE
enableTuningMetadata=TRUE
afFullsweep=3
enablePDLibLog=3

日志搜索关键词

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

执行器滞后/阻尼测试

目标:评估电机的磁滞效应,确保从远距离移动到近距离再返回的过程呈现线性。

原理:先从远端向近端扫描镜头,再反向扫描。两个方向的对焦峰值应几乎相同。若峰值差异显著,表明镜头组件存在显著滞后。

测试条件:在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 的图形:

执行器范围测试

目标:检验微距和无限远时的极限范围,确保镜头有足够的移动空间以对焦微距/无限远的物体。

测试条件:在500lux 或更亮的环境下,将 ISO 12233 分辨率测试卡置于距设备10cm 处,进行微距测试。然后在200cm 处重复测试,执行无限远测试。fullsweep

数据分析:

关键词:af_fullsweep_srch_far_to_near|af_fullsweep_srch_near_to_far|af_fullsweep_start_srch

使用 excel 制作 fv 值与 lensposition 的关系图。

如果生成的关系图与微距和无限远(合格)图类似,则表明电机设置和 OTP 数据均无误。

如果生成的关系图与微距和无限远(不合格)图类似,则表明电机设置和 OTP 数据存在问题。

执行器稳定时间测试

目标:此测试旨在验证同一镜头位置多帧对焦值的一致性,以确保镜头在收到移动指令后能够稳定。

测试条件:在500lux 或更亮的环境中,将 ISO 12233 分辨率测试卡置于距设备30cm 处。

如果生成的关系图与图 A 类似,则表明阻尼和振铃设置正确。如果生成的关系图与图 B 类似,则可能遇到以下问题:

  • 阻尼/振铃设置不当
  • ISP 统计数据解析与发送到 AF 核心之间的时序问题

重复测试两次以上以确认问题确实存在。如果确认存在问题,则调整阻尼设置并重新测试。如果问题仍然存在,则需在实验室中使用激光检查阻尼设置。

对焦值对比度和尾部测试

目标:通过检测对焦值图的对比度(FV 最大值/FV 最小值)来评估其质量。比率越高,自动对焦算法的对比度越佳。

测试条件:在500lux 或更亮的环境中,将 ISO 12233 分辨率测试卡置于距设备30cm 处。

数据分析:

关键词: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 分辨率测试卡置于距三脚架上设备 14cm 远的位置。分别在 20cm、60cm 和 200cm 的距离重复上述测试。

马达的最大位移范围为 1~1024(dac),其中 infinity、mac 等均为电流的逻辑表示形式,即 dac 值,与内核中的 current 形成一对一对应。高通在 Chromatix 中采用的是镜头位置的逻辑表示,即 lens_pos,而非直接使用电流的逻辑表示,这可能是为了实现解耦。

AF Algo 计算出 lens_pos;

经过公式转换,将转换后的 dac 传递给 actuator;

actuator 将 dac 传递给内核,在内核中转换为 current,从而驱动镜头。

(1) 根据 eeprom 计算 dac 的范围

infinityDAC = 262

macrroDAC = 525

DACRange = 263

infinityDAC = 262 + (-0.4263) = 156.8

macroDAC = 525 + (0.25263) = 590.75 .

因此,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 + initial_code

initial_code = 588 - 399 = 189

Table[3] - 3 代表 lens pos,585 代表 dac 值

12.2 AF pdaf 调校

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

检查 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

通过日志可以查看 pd、离焦量和置信度信息。凭借这些信息,可以判断传感器获取的 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

部分日志中的每个镜头位置都包含三帧 pd 信息,这是由于全扫描过程中的帧延迟造成的,只需关注每个镜头位置的最后一帧信息。

当离焦量接近 0 时,pd 应小于 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

从关键字中搜索离焦量和镜头位置并绘制图表。从 pd 日志中未见 focusvalue,不清楚如何将 pd 的离焦量和 af 的 focusvalue 合并在同一张图上展示。如果有知晓方法的人士,请告知。

pd 图展示了 far_to_near 离焦量 = 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 根据原始离焦距离将一个大的镜头移动分解为小的镜头移动。

如果报告的离焦值为 200,下一个驱动镜头移动是 2000.3 = 60。

如果报告的离焦值为 40,下一个驱动镜头移动是 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. 搜索关键字:“af_haf_pdaf.cpp:4810: af_pdaf_proc_pd_single roi” 以检查

是否信心水平连续稳定

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

调整稳定表格

它对优化的影响不大,主要由相关预留参数决定。

首先使用Chromatix工具生成的默认值

FPS/最小稳定计数

最小稳定计数是用于判断PD是否达到稳定状态的阈值。

调试焦点扫描

为了获得更加平滑的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成功。

调试指南

阈值越大,PDAF结束搜索的速度越快,越容易转入精准搜索模式。

调试场景监控

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)

失焦阈值用于判断AF是否失焦。

深度稳定阈值会触发稳定状态计数的增加。

失焦阈值越大,意味着PDAF越难触发。

此参数可用作场景切换的触发标准。若报告的失焦值大于失焦阈值,PDAF将进入搜索状态。

最小稳定计数和深度稳定阈值越大,意味着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成功。

细搜

由于在某些情况下相位差计算不够准确,PDAF算法会切换到对比度AF进行精细搜索,以确定最终的峰值位置。影响相位差精度的因素包括场景条件(例如,低光照、图像纹理、色彩和距离)和镜头/传感器制造问题。

12.2.6 PDAF触发条件

当前帧的失焦值大于失焦阈值。

算法的可靠性

场景稳定。

如果这些条件满足,PDAF将触发搜索。如果不满足,则PDAF将继续监控场景,或在某些情况下,切换到对比度对焦。

失焦:计算相位差并将其转换为失焦值,以指示实现对焦所需镜头移动的距离和方向。正的失焦意味着移动是从近到远。负的失焦意味着移动是从远到近。当失焦接近0时,表示目标处于对焦状态。

12.3 AF监控调整

12.3.1 AF监控概念

AF监控状态的主要功能是检测场景切换。简单来说,场景切换意味着当前场景未能正确对焦,导致算法触发搜索以找到最佳的对焦位置。

每种算法都有其特定的场景切换检测标准。例如,CAF基于陀螺仪参数、绝对误差和(SAD)参数以及SAD相关参考帧(SADR)参数来检测场景切换。相反,PDAF则依据当前帧的失焦值、算法的可靠性以及场景的稳定性来检测场景切换。

AF监控还负责检测场景平移。为了避免不必要的搜索,算法能够区分场景切换和平移。只有当场景稳定(即不发生平移)时,搜索算法才会启动。总的来说,场景切换和平移检测是AF监控状态下的两个基本功能。

CAF基于陀螺仪参数、SAD(绝对差异之和)、SADR参数来检测场景切换。PDAF则依赖于当前帧的失焦值、算法的可靠性以及场景的稳定性。

SADR 是计算当前图像的平均亮度值与最近一次聚焦完成后亮度的差别得出的。

SAD 是计算当前图像的平均亮度值与前一帧亮度的差别得出的。

亮度的绝对差值

SAD 逐帧对比,对缓慢的场景变化不太敏感;SADR 在场景变化后,当场景稳定下来(即聚焦完成后),与一个参考点进行比较(此时 SAD 和 SADR 都不稳定)。

SAD 关键词:

  • af_cont_detect_scene_change_sad // 获取当前的 SAD 值
  • af_cont_detect_scene_change // 判断当前场景是否变化

12.3.2 数值监控库和算法配置

数值监控实现了每个监控算法的配置和决策逻辑。虽然监控逻辑与早期的 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

触发阈值: 确定信号是否稳定的阈值。它被定义为元滤波器输出与基准之间的绝对差值。

连续计数阈值: 用于检测器检测信号稳定/不稳定的连续计数的阈值。如果达到此阈值,数值监控将以 VM_DETECTOR_UNSTABLE 模式输出 1,以 VM_DETECTOR_STABLE 模式输出 0。

帧至准备: 强制数值监控开始检测过程的数字。例如,如果 frame2armed=2,则数值监控将在场景聚焦后 2 帧开始检测过程(调用变基)。

中值滤波器配置启用: 用于启用中值滤波器的标志。

样本数量: 中值滤波器的长度。

Mvavg Fltr Cf 启用: 用于在元滤波器模块中启用移动平均滤波器的标志。

样本数量: 元滤波器模块中移动平均滤波器的待过滤样本数。

IIR 滤波器配置启用: 用于在元滤波器模块中启用 IIR 滤波器的标志。

样本数量 IIR: 滤波器的缓冲区大小(在当前版本中,值限制为 2)。

系数分子: 分子中的系数(需要调试工程师来验证滤波器稳定性)

系数分母: 分母中的系数(需要调试工程师来验证滤波器稳定性)。

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)亮度变化引起的监控
(2)场景变化引起的监控
调试monitor algo config Topo CAF
只开启CAF算法
调试SADR(场景变化) 设置GYRO/GYRO_PANNING/SAD_PANNING 灵敏度为0
调整SADR 灵敏度范围1-100. 值越大越容易触发场景变化
SADR灵敏度调整好,开始调试SAD_Panning灵敏度值。
调整SAD_Panning 灵敏度1-100. 数值越大,越容易获得场景稳定
SADR SAD_Panning 场景变化和场景稳定,调试GYRO
调试GYRO(场景变化) 设置SADR/GYRO_Panning/SAD_Panning 灵敏度为0
调整GYRO灵敏度范围1-100. 值越大越容易触发场景变化
GYRO灵敏度调整好,开始调试GYRO_Panning灵敏度值。
调整GYRO_Panning灵敏度1-100. 数值越大,越容易获得场景稳定
更新所有调试好的灵敏度,查看性能。
依据测试案例,精细调整每个灵敏度至可接受水平。

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调试监控
PDAF只需查看这个函数af_pdaf_monitor
pdaf 监控:离焦,自信,稳定
通常,PDAF监控场景的变化,并在满足以下条件时触发搜索:
当前帧离焦值大于离焦阈值
算法可信度良好
场景稳定。
defcous
正离焦值意味着运动是从近到远。负离焦值意味着运动是从远到近。当离焦值接近零时,表示目标聚焦。
confident
置信度是用于相位差估计的场景中线索数量(例如,垂直边缘,场景亮度)的函数。高置信度意味着ROI中的PD具有较小的方差和较高的边缘强度。置信表用于定义相对于传感器增益的最小置信阈值。
high confidence
:亮环境和多个垂直边缘。
lower confidence
低亮度环境和较少的垂直边缘。
Stable
稳定性是通过评估离焦值历史来计算的。如果值在可调阈值内,则认为场景是稳定的。
置信表如何工作
高置信度意味着该ROI中PD的偏差较小并且可能具有更高的边缘密度。置信表用于定义相对于传感器增益的最小置信度阈值.
噪声增益小于或等于某个参数噪声增益时,对应最小置信度。

12.3.5 PDAF不触发的日志分析
(1)PDAF 触发

触发重新对焦条件 : 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 对焦失败。

应当触发重新对焦但未再次触发?

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

调整场景监控

调整稳定表

*

(3)场景未使用pdaf,启用CAF 对焦原因

focus_converge_done=true的条件

a. 场景稳定

b.PD 预处理 -> PD 最大限制 不使用失焦样本 > 失焦

场景不稳定 
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)收敛完成后进入精细搜索

af_pdaf_focus_converge 条件 : 需满足 is_caf_stable 然后 af_pdaf_is_focus_converge_done 返回 1.

af_pdaf_is_focus_converge_done 条件 : abs(defocus)-abs(next_move) 小于 focus_done_thresh

next_move 由 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 等于 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 设置无效无对应日志

HAF_MSG_LOW(“设置 %s 敏感度至 %d 从 %d”, p_VM->name, sens, prev_sens);

12.4 AF 调试调整

12.4.1 持续触发

CAF 依赖于陀螺仪参数、SAD(绝对差值总和)、SADR 参数来检测场景切换。

PDAF 依赖于当前帧的失焦值、算法的信心水平以及场景的稳定性。

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. 获取日志
  2. 搜索“af_caf_util_get_value i:”,结果中包含显示搜索行为的镜头位置变化。
  3. 注意在多次搜索(预扫描)时,镜头位置是按升序还是降序变化。如果这两种顺序交替出现且AF结果也以类似方式交替显示,则需调试AF。
  4. 单次AF需要依靠焦距值向算法传达正确的搜索方向。在低对比度场景中,可能因对比度不足,导致无法自信地进行切换。此外,由于算法根据调试头文件中指定的mid_zone确定搜索方向,如果方向错误,则不会对低对比度曲线进行反向。
  5. 使用完整扫描搜索,并记录最终位置。
  6. 注意镜头位置对应的mid_zone指数值。
  7. 与完整扫描结果对比并调整接近物体最终位置的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和平坦阈值。

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均高于平坦阈值且在0.05以内,则调整AF头文件中的平坦阈值。

12.5 AF Haf调优

在实际应用中,某些条件下相位差计算无法足够精确,因此切换到对比度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 镜头移动略大于最大移动步长情况下,额外允许的镜头移动步长 设为最大移动步长的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 确定向近端扩展的精确搜索步数 默认值
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 调校

12.6.1 BAF 概览

通常情况下,系统默认的BAF值已足够使用,无需额外调校。但在特定情境下,可能需要以下可选调校:

  • BAF ROI尺寸
  • 伽马校正
  • 滤波核心
  • Y转换
  • 滤波器(系数,移位器)

图像预处理(Y转换和伽马校正)- 对焦值生成

Y转换提供了一种方法,将RGB Bayer四像素组合成一个信号,该信号由各通道的指定权重决定。Gamma LUT用于增强弱光条件下较暗像素的对比度。

一个用于水平方向,另一个用于垂直方向。图表中显示的子模块(AF_H_1、AF_V_1等)。滤波器模块由FIR滤波器与IIR滤波器之间的位移组成,以保证IIR输入的标准化。IIR之后,信号通过核化模块进行降噪,随后累加器对FV进行累积。

12.6.2 调校 BAF ROI

对于多数应用场景而言,BAF ROI参数的初始值已经足够。若您计划调整BAF ROI参数或实现自定义ROI,请联系CE。介绍BAF ROI参数。

Preset Id参数定义了ROI形状的首选项。下图展示了支持的预定义ROI形状

宽度比例 根据形状设定宽度

高度比例 根据形状设定高度

网格大小H 关于ROI边界每个区域的百分比。这个数字决定了区域的数量。

网格大小V 关于ROI边界每个区域的百分比。这个数字决定了区域的数量。

网格间隔H (目前不支持)关于ROI边界每个区域间距离的百分比。

网格间隔V (目前不支持)关于ROI边界每个区域间距离的百分比。

ROI数量 客户ROI区域的数量。当未选择custom_roi预置时将被忽略。

12.6.3 调校 BAF 伽马

Preset Id:待配置预设项(含定制配置)的选择列表

Gamma Custom :定制统计预处理,仅在Preset_ID设为Custom时生效。类型:baf_tuning_gamma_t

通道选择:G通道选择为0,Y通道选择为1。

Gbrg通道选择:如果通道选择=0,此选项有效。0选择GR,1选择GB。

Y转换启用:Y转换开启,暂不使用

RGB转Y系数:当通道选择=1时需配置。通道选择=0时不生效

伽马启用:启用gamma lut

可选伽马调校的目标是在不同像素亮度水平上提升像素对比度。

调试步骤:

  1. 在30厘米的距离设置一个低对比度图的测试场景。
  2. set Gamma Enable 0 关闭gamma table
  3. 运行fullsweep搜索并记录fv值。
  4. 生成并更新LUT以提升FV的亮度水平。建议从使用1/2.2作为幂的默认表开始。
  5. 观察FV曲线的变化,并根据需要调整表项。
  6. 针对不同的亮度级别重复上述步骤。

12.6.4 调校 BAF 滤波器

高级BAF的滤波参数,Fileter下的四组参数对应上述配置。包括水平和垂直方向的滤波。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=711万 //对应像素相对较低;

(2)ISO12233:4000

ISO12233:4000 是4000线加强型

测试精确度:4000x4000x16/9=2844万;

这里不得不提及一个概念,即线对数——lp/mm,表示每1毫米长度内的线对数量。简单来说,评估摄像头的清晰度就是看它能够分辨出的最小尺度,这可以与人类视力测试中的视力表相比较,我们通过观察非常小的E字母来判断其开口方向,实际上是在分辨三条横线之间的最小可见距离。

(3)ISO12233:2014(eSFR)

ISO12233:2014 包含标准版、加强版和扩展版。

下图展示的是加强版。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:CHROM matix 入门手册 快速入门 OMA

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-5 17:02