DSO光度标定程序配置和使用
作者:互联网
光度标定原理详见:
一、项目地址
https://github.com/tum-vision/mono_dataset_code
对应论文《A Photometrically Calibrated Benchmark For Monocular Visual Odometry》
二、安装
1.下载源码
git clone https://github.com/tum-vision/mono_dataset_code.git
2.安装Eigen和OpenCV
sudo apt-get install libeigen3-dev libopencv-dev
3.安装zip文件解析库
sudo apt-get install zlib1g-dev
cd mono_dataset_code/thirdparty
tar -zxvf libzip-1.1.1.tar.gz
cd libzip-1.1.1/
./configure
make
sudo make install
sudo cp lib/zipconf.h /usr/local/include/zipconf.h # (no idea why that is needed).
4.安装aruco marker dection ,用来标定渐晕
安装教程转自(科学上网):http://maztories.blogspot.de/2013/07/installing-aruco-augmented-reality.html
cd mono_dataset_code/thirdparty
tar -zxvf aruco-1.3.0.tar.gz
cd aruco-1.3.0/
mkdir build
cd build
cmake ..
make
sudo make install
5.编译主程序
cd mono_dataset_code
cmake . && make
三、准备数据
所需数据格式参考 src/BenchmarkDatasetReader.h
相机参数文件格式参考 src/FOVUndistorter.cpp
1.将图片存储于指定路径 PATH 下
数据为zip文件时,可以将文件直接放入;
数据为图像序列时,需要将建立文件夹images,将图像序列放入 PATH/images 下(注意有s)
2.将相机参数文件放入 PATH 下
(1)文件名称为camera.txt
(2)具体文件格式可以参考LSD-SLAM中的 llsd_slam_core/src/util/Undistorter.cpp
(3)原程序中相机使用PTAM的标定程序进行标定,标定过程可以参考博客《配好lsd_slam后的使用PTAM工具标定相机》
(4)camera.txt的具体格式如下:
fx/width fy/height cx/width cy/height d
in_width in_height
"crop" / "full" / "none" / "e1 e2 e3 e4 0"
out_width out_height
1)第一行 5个数据,赋值给inputCalibration[5]数组,格式为%f,数据内容表示
(fx/width fy/height cx/width cy/height d),其中第五个参数d表示视场角(field of view);
2)第二行 2个数据,分别赋值给in_width和in_height,表示输入图像的大小
3)第三行 1个字符串参数:
“none”表示不进行校正,remapX和remapY都被置为nullptr,valid置为false
“crop”表示对图像进行裁剪,根据原图(cx,cy)处上下左右的最远距离进行图像的保留,使像素均为有效像素
“full”表示保留全部图像,根据原图(cx,cy)的左上、右上、左下、右下进行图像的保留
4)第四行 2个参数表示输出图像的宽度和高度
对应的相机模型可以参考博客《PTAM算法流程介绍》
注意:该方法使用了鱼眼相机的等距投影模型(,视角和点距光心的距离成正比),具体参考文献《Straight lines have to be straight》,其公式(13)(14)如上图前两式所示。其中,参数表示畸变后相机视场角(Field of View),即物理上相机的视场角。而经过鱼眼模型的变换,相机经过畸变校正后的视场角为。
假设对应于视场角(注意视场角包括左右两侧)、像素距光心的最大距离为1,即相机的焦距。
球面等距投影模型如下:
*博主认为该处公式有误,按照等距投影模型,其原始的公式应为:
但687次引用的文章应该没有什么问题啊......,考虑下式
注意到,式中用,代表了OA的距离(原本的表示为),式中认为,但通过观察不难发现,正确的关系应为。
综上,原文中相机模型可能将AC近似等于了AB,但也有可能使用了其它的模型。
3.将曝光时间文件放入 PATH 下
文件名称为times.txt
(注意有s)
文件内容可以使用两种格式,系统会自动加以选择:
(1)原始格式
——格式为(图片id 时间戳 曝光时间)
——数据格式为(%d %lf %lf)
(2)或者可以省略时间戳
——(图片id 曝光时间)
——数据格式为(%d %lf)
四、标定响应函数
1. 运行可执行文件
cd mono_dataset_code/bin
./responseCalib path_to_your_data/
(对于图片序列会自动添加images/在路径后边)
./responseCalib ~/Data_mao/Data_real/Data_for_calib/
2. 标定结果
标定结果存储于 mono_dataset_code/bin/photoCalibResult/ 中
E-0.png存储初始的辐照度,初值值设置为所有图片对应像素的平均值
E-%d.png 每次优化过后场景辐照度的值;E-%d16.png 归一化到255*255上的图片
G-%d.png 每次迭代后的响应曲线
pcalib.txt 响应曲线U
原始数据集,在同一场景下变换相机曝光时间(MYNTEYE S1030IR),采集不同曝光时间下的图片
标定得到的场景辐照度图像
标定得到的响应函数
五、标定渐晕
待续……
六、回放数据
待续……
标签:code,mono,标定,cd,相机,DSO,dataset,光度 来源: https://blog.csdn.net/LaplaceSmoothing/article/details/91411710