镜头畸变校正LDC使用开发参考

Version 1.0


1. 准备


1.1. 材料准备

鱼眼镜头、镜头厂提供的 SPEC


1.2. 下载

点击进入下载网址

版本:octave-5.1.0-w64-installer.exe

下载结束后请自主安装。octave的配置文件请使用sigmastar提供的base.rar。

进入 base\Camera\AMTK\in 目录,根据镜头SPEC修改 LenSpec.dat的 real_height/Ref_height/XC/XY/radius/FOV/image_widht/image_height,修改 Lens spec 时请按照原本格式进行修改。

Len Spec中的 xc = 图像中心的x坐标,yc=图像中心的y坐标,根据不同输入图像有不同的求取方式,以下分别用图像说明 :

图 1‑1 广角镜头示意图

图 1‑2 鱼眼镜头示意图

注意:以上图解为理想无偏差的状态,请根据实际量测填写Len spec中相关信息。

完成的dat文件信息如下:


2. 执行


2.1. 执行步骤说明

  1. 直接使用 octave 程序开启base\Code目录下的 calib_cam.m

    如有以下提示,点击“切换目录”。

    执行后可在base\Camera\AMTK\out中生成相对应结果,结果如下:

    文件1 : Cali_LDCpoly.bin

    文件2 : trdu0to180.bin

    文件3 : trdu180to220.bin

    文件4 : lens_spec_curve.jpg

    文件5 : calibration_curve.jpg

    注意:前三个是 eptz library 会用到的文件;后两个则是根据输入的Spec画出来的曲线图和内插后得到的曲线图,正常来说得到的曲线图应该要很平滑且连续,类似下图所示。

  2. 进入sdk 的目录:sdk\verify\mi_demo\source\ldc\Pattern\new_AMTK_FHD\in,把上步骤生成的五个文件cp 到此目录。in目录还应该包含sin 与atan2的LUT table, 请确认是否有sin_Q15.binatan2_Q15.bin

  3. 复制sdk\verify\mi_demo\source\ldc\Pattern\new_AMTK_FHD 到可以被板子挂载的路径xxx下, mount -t nfs -o nolock xxx /mnt

  4. 修改new_AMTK_FHD\cfg\new_AMTK_1R_wm_fhd.cfg为(仅参考以下内容的格式,参数请按实际填写):

    -i /mnt/new_AMTK_FHD/in -o /mnt/new_AMTK_FHD/out -b /mnt/new_AMTK_FHD/out/ldc_bin_new.bin -g AMTK_wall_2560x1920.jpg -m 7 -s 2560 1920 2560 1920 -c 1320 1104 936 -d 32 -p 0 0 -t -0 0 -z 10 500 -r 0 360
    

2.2. 配置文件参数说明

  • -i <folder name>

    Path to the input folder

  • -o <folder name>

    Path to the output folder.
    - -b <file name>

    Path to the ouput bin file
    - -g <image name>

    file name for source image。并非必须的,只有使用LDC_TOOL模拟效果的时候才会用到。

  • -m <mode name>

    LDC mode select by (0)4R_CM, (1)4R_WM, (2)1R, (3)2p, (4)1P_CM, (5)1P_WM, (6)1O, (7)1R_WM, (8)2P_DM, (9)RSC,(10)1P_DM。广角镜头校正和鱼眼镜头校正使用1R_WM。

  • -s <input width> <input height> <output width> <output height>

    Image dimensions。广角镜头校正和鱼眼镜头校正来说,input resolution和output resolution一样,为sensor resolution即可。

  • -c <fisheye input x center> <fisheye input y center> <fisheye input radius>

    Source image center(xc, yc), which depends on lens spec.

  • input radius : input fisheye radius.

  • -c参数不能带小数,否则prog_ldc无法运行

    请填写与spec.dat里一样的参数。

  • -d <grid_res> 数值越小,精度越细,广角镜头下建议使用16 Sets the grid resolution of the map

    32: 32x32 grid resolution

  • -h <hw_limitation>

    Sets hw limitation mode, which between 0 ~ 4

    Suggestion : 2 = Wide-angle lens and 3 = fisheye [optional, only available for 4R_CM、4R_WM and 1R mode]

  • -p <pan min> <pan max> 广角镜头下固定为 0 0
    pan angle limitation, which between -90 ~ 90 degree.

  • -t <tilt min> <tilt max> 广角镜头下固定为 0 0
    tilt angle limitation, which between -90 ~ 90 degree.

  • -z <zoom min> <zoom max> 需要在板上调试的zoom值范围,广角镜头建议设定为 10500 ,调试方法见下文
    zoom scale ratio limitation, the real ratio should multiply by 100.

  • -r <rotate min> <rotate max> 广角镜头固定为 0 360 rotate angle limitation, which between 0 ~ 360 degree. [optional, only available for 2p and 1P_CM mode]

  • -a <radius min> <radius max>

    Sets the limitation of the radius.


2.3. 在板子上执行

可以通过prog_ldc或prog_vpe来调试ldc的效果,任选一种即可

2.3.1. porg_ldc调试

  1. cd /customer/mi_demo; ./prog_ldc /mnt/new_AMTK_FHD/cfg/new_AMTK_1R_wm_fhd.cfg

  2. VLC 连接上:可以看到矫正之后的视频。

  3. 通过调整sdk/verify/mi_demo/source/ldc/st_main_ldc.cpp里的ST_Libaray_CreatBin()->LDC_MODE_1R_WM-> teptz_para.zoom来调整畸变校正强度,可调范围由new_AMTK_1R_wm_fhd.cfg里-z指定。

  4. 调到满意的效果后,在telnetd执行:echo dumptablebin 0 0 ./ > /proc/mi_modules/mi_vpe/mi_vpe0

在./路径下生成ldc_chn0_view0_table.bin

2.3.2. prog_vpe调试

  1. cp sdk/verify/mi_demo/source/vpe/param_ldc.ini至设备/mnt下

  2. 修改.ini中的LdcBinPath参数为/mnt/new_AMTK_FHD/cfg/new_AMTK_1R_wm_fhd.cfg

  3. 注意需保持.ini中Rotation,ChnMirror,ChnFlip,ChnCropX,ChnCropY,ChnCropW,ChnCropH为0,否则可能导致画面变形

  4. cd /customer/mi_demo; ./prog_vpe /mnt/param_ldc.ini

  5. VLC 连接上:可以看到矫正之后的视频。

  6. 调整sdk/verify/mi_demo/source/vpe/st_main_vpe.cpp里的ST_Libaray_CreatBin()->LDC_MODE_1R_WM-> teptz_para.zoom来调整畸变校正强度,可调范围由new_AMTK_1R_wm_fhd.cfg里-z指定。

  7. 调到满意的效果后,在telnetd执行:echo dumptablebin 0 0 ./ > /proc/mi_modules/mi_vpe/mi_vpe0

在./路径下生成ldc_chn0_view0_table.bin


附录:prog_ldc/prog_vpe编译过程

  1. sdk-*.tar.gzproduct-*.tar.gz解压到同一目录下,产生sdk与product两个文件夹;

  2. cd product; ./setup_config.sh /config/ipc/[相应配置]; make

  3. cd sdk/verify/mi_demo; make 就会编译所有demo.

注意一定要先完成product中的操作,否则sdk的demo将编译失败;编译出来的demo在sdk/verify/mi_demo/out/demo/app下。