跳转至

lsc_online_cali 快速入门

1. 概述与作用

lsc标定旨在减少由于镜头光学特性导致的图像边缘暗角现象。lsc可通过Mesh网格或Radial同心圆的方式统计图像亮度分布,计算校正增益,并对其进行补偿,进而提升图像质量。

当前提供离线工具与在线sample两种标定方式,本样例将介绍对单一光源的在线sample Mesh LSC标定功能,运行样例程序后即可得到标定参数及校正后数据。离线工具部分可参考《图像质量调试工具使用指南》“MLSC标定”章节。

专业名词与缩写:

  • LSC — Lens Shading Correction,镜头阴影校正
  • MLSC — Mesh LSC,网格状 LSC,按 N×N 网格存储 R/Gr/Gb/B 增益查表
  • RAW — sensor 输出的原始 Bayer 数据,未去马赛克
  • Bayer — 4 通道 R/Gr/Gb/B 马赛克排列
  • BLC — Black Level Correction,黑电平校正,本 sample 读取 BLC offset 用于校准
  • Mesh scale — 网格缩放因子 [0,7],对应不同分辨率/精度的 LSC 表
  • WDR — Wide Dynamic Range,本 sensor 默认 OT_WDR_MODE_NONE

2. 执行准备

在编译本样例之前,请参照Hi3516CV610环境搭建指南和快速上手指南完成编译环境的搭建。

2.1 编译

进入样例目录执行 make 即可完成编译:

cd samples/mpp/lsc_online_cali && make

编译成功之后,在当前目录下会生成一个sample_lsc_online_cali的可执行文件,可以放社区支持的开发板上运行。

2.2 加载 KO

ko加载脚本位于 output/mpp/ko/load_ko,有两个脚本,load3516cv610_20s和load3516cv610_20s_debug。区别为load3516cv610_20s_debug脚本会打开 logmpp_show=1(日志记录)、proc_show=1(proc信息打印),并将 mem_process_isolation 置为 0(不启用进程间mmz隔离)。

由于当前版本不支持进程间mmz隔离,因此需要在load3516cv610_20s脚本中将 mem_process_isolation 置为 0或者使用load3516cv610_20s_debug脚本,此处以load3516cv610_20s_debug脚本为例,20s内存大小为128MB,默认分配为 32MB OS、96MB MMZ,加载命令为:

./load3516cv610_20s_debug -i

可以通过-h命令查看具体用法:

./load3516cv610_20s_debug -h
Usage:  ./load3516cv610_20s_debug [-option] [-sensor0~1]
options:
    -i                       insert modules
    -r                       remove modules
    -a                       remove modules first, then insert modules
    -sensor0~1 sensor_name   config sensor type    [default: hy006_3814_0011]
    -mmz_start               config MMZ start addr [default: 0x42000000]
    -mmz_size                config MMZ mem size [unit: M, default: 96M]
    -ir_auto                 config ir_auto enable [default: 0]
    -profile                 config sys_profile [default: 0]
    -h                       help information
Available sensors:hy006_3814_0011 bt1120/bt656/bt601
for example: ./load3516cv610_20s_debug -i -sensor0 hy006_3814_0011 -sensor1 hy006_3814_0011 -mmz_start 0x42000000 -mmz_size 96M -ir_auto 1

如果需要调整os和mmz的大小,需要参考《内存布局调整指南》对内存大小进行调整。

如果是使用社区默认提供的镜像,这些ko已经打包到文件系统中,烧录到单板上后位于/ko目录下,在系统启动后会自动加载这些ko。

2.3 运行时依赖

在运行样例前,需要提前准备:

  • 指定运行时依赖的so库路径

MPP样例依赖的so库位于soc/libs/musl下,需要将该目录下的so库拷贝到开发板上(或将这些so库所在的目录挂载到开发板上),并指定运行时依赖库的环境变量,假设这些so库位于/mnt/libs/,执行如下命令:

```shell
export LD_LIBRARY_PATH=/mnt/libs/:$LD_LIBRARY_PATH
```

如果是使用社区默认提供的镜像,这些so库已经打包到文件系统中,烧录到单板上后位于/usr/lib目录下,该目录是系统默认搜索目录,不需要执行export LD_LIBRARY_PATH命令去指定。

  • 启动MPP服务

当前MPP媒体模块处于用户态,通过一个独立进程提供相关接口的调用服务,该进程位于samples/mpp/sdk_server下,执行如下命令即可生成sdk_server可执行文件:

```shell
cd samples/mpp/sdk_server && make
```

在单板上执行./sdk_server &即可启动MPP服务。

  1. sdk_server同样依赖soc/libs/musl下的so库,因此也需要参照上述export LD_LIBRARY_PATH指定路径;
  2. 如果是使用社区默认提供的镜像,sdk_server进程已经打包到文件系统中,烧录到单板上后位于/usr/bin目录下,并在系统启动时会自动启动sdk_server。
  • 样例运行时候需要的资源文件

无。

2.4 运行样例

可以执行./sample_lsc_online_cali -h查看帮助。

image-20260810113330364

3. 支持的 Case 列表

调用命令

样例执行完成后即可得到标定参数及校正后数据。

./sample_lsc_online_cali <vi_pipe> <scale>
- 参数 1 vi_pipe:0~3(VI pipe 索引)。 - 参数 2 scale:0~7(mesh scale,LSC 增益表精度,范围 [0, OT_ISP_LSC_MESHSCALE_NUM-1])。

序号 调用示例 简述 备注
1 ./sample_lsc_online_cali 0 6 对 vi_pipe 0、mesh scale 6 做 LSC 标定 推荐常用组合

输出文件

  • lsc.raw — RAW VI frame dump(dump_lsc_raw fopen "wb"),大小 W×H×2 字节(16-bit 转换后位宽)。
  • gain.txt — LSC 增益 LUT(save_lsc_output fopen "wb"),含 isp_shading_table.au32_x_grid_width、au32_y_grid_height,及 R =、gr、gb、B 2D 矩阵(OT_ISP_LSC_GRID_ROW × OT_ISP_LSC_GRID_COL 整数增益)。

控制台日志

  • 运行过程中打印数据

saving......dump data......stride[0]: %u, width: %u

done time_ref: %u!

------done!, ret:%d

input anything to exit....

setting parameter ==> mesh_scale =%u

  • 运行结果 按回车退出,退出时,成功:绿色 program exit normally!;失败:红色 program exit abnormally!。

正确性判断

  • saving......dump data......stride[0]: %u, width: %u中,width应与sensor 输出分辨率宽度一致;done time_ref: %u!中time_ref不为0或-1;------done!, ret:%d中ret为0。
  • ls -l lsc.raw 大小非空,≈ W×H×2 字节(与 sensor 输出分辨率一致)。
  • gain.txt 含合法网格(au32_x_grid_width / au32_y_grid_height 各 OT_ISP_LSC_GRID_COL-1 / ROW-1 项)与 R/Gr/Gb/B 矩阵;增益值应 > 256(1x)且周边大于中心。
  • 控制台 ------done!, ret:0 表示 ss_mpi_isp_mesh_shading_calibration 成功;非 0 表示标定失败,需检查 RAW 抓帧、BLC。
  • 用户回车触发抓帧前,VENC 预览画面应正常显示 sensor 图像,证明 VI/VPSS/VENC 通路无异常。
  • 若 ss_mpi_vi_get_pipe_frame 超时(4000ms),会打印 get pipe frame timeout 并以 program exit abnormally! 退出,需检查 sensor 是否出图、VI pipe 是否在线。

软件配置流程

  1. 见lsc_online_cali.c文件,sample_lsc_usage函数查看sample执行指令格式。
  2. sample_lsc_cali_start_prev函数表示起整个通路,包括会获取sensor的一些配置,初始化vi及vpss等相关的一些配置。
  3. sample_lsc_run函数即做一些vi相关的配置,在线抓取一帧raw数据,准备进行标定。
  4. mesh_calibration_proc函数表示开始执行lsc标定算法,保存校正后的raw数据。
  5. 最终调用mpi接口ss_mpi_isp_mesh_shading_calibration完成标定,涉及算法的描述可参考《ISP开发参考》“Mesh Shading”章节和《ISP图像调优指南》“Mesh Lens Shading”章节。
  6. sample_lsc_cali_stop_prev函数表示退出整个通路。