镜头畸变校正LDC使用开发参考
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. 执行步骤说明¶
-
直接使用 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画出来的曲线图和内插后得到的曲线图,正常来说得到的曲线图应该要很平滑且连续,类似下图所示。
-
进入sdk 的目录:
sdk\verify\mi_demo\source\ldc\Pattern\new_AMTK_FHD\in
,把上步骤生成的五个文件cp 到此目录。in目录还应该包含sin 与atan2的LUT table, 请确认是否有sin_Q15.bin
和atan2_Q15.bin
。 -
复制
sdk\verify\mi_demo\source\ldc\Pattern\new_AMTK_FHD
到可以被板子挂载的路径xxx下,mount -t nfs -o nolock xxx /mnt
。 -
修改
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调试¶
-
cd /customer/mi_demo; ./prog_ldc /mnt/new_AMTK_FHD/cfg/new_AMTK_1R_wm_fhd.cfg
-
VLC 连接上:可以看到矫正之后的视频。
-
通过调整
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指定。 -
调到满意的效果后,在telnetd执行:
echo dumptablebin 0 0 ./ > /proc/mi_modules/mi_vpe/mi_vpe0
在./路径下生成ldc_chn0_view0_table.bin
。
2.3.2. prog_vpe调试¶
-
cp sdk/verify/mi_demo/source/vpe/param_ldc.ini
至设备/mnt下 -
修改.ini中的LdcBinPath参数为
/mnt/new_AMTK_FHD/cfg/new_AMTK_1R_wm_fhd.cfg
-
注意需保持.ini中Rotation,ChnMirror,ChnFlip,ChnCropX,ChnCropY,ChnCropW,ChnCropH为0,否则可能导致画面变形
-
cd /customer/mi_demo; ./prog_vpe /mnt/param_ldc.ini
-
VLC 连接上:可以看到矫正之后的视频。
-
调整
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指定。 -
调到满意的效果后,在telnetd执行:
echo dumptablebin 0 0 ./ > /proc/mi_modules/mi_vpe/mi_vpe0
在./路径下生成ldc_chn0_view0_table.bin
。
附录:prog_ldc/prog_vpe编译过程¶
-
将
sdk-*.tar.gz
与product-*.tar.gz
解压到同一目录下,产生sdk与product两个文件夹; -
cd product; ./setup_config.sh /config/ipc/[相应配置]; make
-
cd sdk/verify/mi_demo; make
就会编译所有demo.
注意一定要先完成product中的操作,否则sdk的demo将编译失败;编译出来的demo在sdk/verify/mi_demo/out/demo/app
下。