3D激光雷达与相机自动外参标定方法
ILCC是一个开源项目,提供基于激光反射强度的3D激光雷达和相机自动外参标定方法。项目功能包括点云分割、棋盘格检测、角点提取和外参优化,支持多种激光雷达型号。ILCC适用于全景和单目相机标定,提供3D点云可视化工具。项目附有使用说明和示例数据,便于研究人员使用。
如果您觉得我们的代码和方法对您的工作有用,请考虑引用本文:
@Article{WANG2017Lidar_camera_cali,
AUTHOR = {Wang, Weimin and Sakurada, Ken and Kawaguchi, Nobuo},
TITLE = {Reflectance Intensity Assisted Automatic and Accurate Extrinsic Calibration of 3D LiDAR and Panoramic Camera Using a Printed Chessboard},
JOURNAL = {Remote Sensing},
VOLUME = {9},
YEAR = {2017},
NUMBER = {8},
ARTICLE-NUMBER = {851},
ISSN = {2072-4292},
DOI = {10.3390/rs9080851}
}
这是一个基于激光反射强度的3D-LiDAR和相机全自动精确外参标定的Python实现。<br> 论文可在此处获取。<br> 此实现的主要特点是:<br>
brew install opencv3 echo /usr/local/opt/opencv3/lib/python2.7/site-packages >> /usr/local/lib/python2.7/site-packages/opencv3.pth
git clone https://github.com/opencv/opencv.git cd opencv && mkdir build && cd build && cmake .. && make -j4 && make install
git clone https://github.com/mfxox/opengv cd opengv mkdir build && cd build && cmake .. && make && make install
brew install pcl
或从源码构建sudo apt-get install libpcl-1.7-all
git clone https://github.com/mfxox/python-pcl cd python-pcl python setup.py install
cd "matlabroot/extern/engines/python" python setup.py install
config.yaml
中的__backend__参数设置,但OpenCV可能无法检测到角点。您也可以使用样本数据中的示例文件(output/img_corners)中检测到的角点来尝试标定。brew install vtk
git clone --recurse-submodules https://github.com/mfxox/ILCC cd ILCC python setup.py install
config.py
:参数设置 <br>
img_corners_est.py
:使用OpenCV或MATLAB从图像估计棋盘格角点<br>
pcd_corners_est.py
:从点云估计棋盘格角点<br>
LM_opt.py
:加载对应的2D-3D角点,使用PnP方法计算初始值,用LM方法优化结果<br>
utility.py
:用于各种可视化的实用函数
创建一个文件夹,例如命名为__DATA__,并创建图像和点云文件夹__DATA/img__ 和__DATA/pcd__。
将全景图像放入__DATA/img__,点云文件放入__DATA/pcd__。文件应该命名为00XX.png或00XX.csv。
cd DATA
并将config.yaml复制到__DATA__,然后根据您的情况修改config.yaml。
从图像中检测角点。<br>
from ILCC import img_corners_est img_corners_est.detect_img_corners()
图像中角点的坐标保存在 DATA/output/img_corners 文件夹中,文件名为 00XX_img_corners.txt。如果在 config.yaml
中将 'output_img_with_dectected_corners' 设置为 True,则标记了角点的图像也会保存在同一文件夹中,文件名为 00XX_detected_corners.jpg,如下图所示。
from ILCC import pcd_corners_est pcd_corners_est.detect_pcd_corners()
点云中角点的坐标保存在 output/pcd_seg 文件夹中,文件名为 00XX_pcd_result.pkl。每个点云的分割结果输出到 /DATA/output/pcd_seg/00XX 文件夹中。
from ILCC import LM_opt LM_opt.cal_ext_paras()
外部标定结果在处理结束时输出,并以文件名 YYYYMMDD_HHMMSS_calir_result.txt 保存。如果将 'back_proj_corners' 设置为 True,使用计算得到的参数反投影3D角点的图像会保存到 DATA/output 文件夹中,如下图所示。
<div style="text-align: center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/da3d9f52-a22f-41e0-80cf-22e69b4ce6f8.jpg" width = "50%" /> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/e1d80be6-6767-467a-88f2-fe5b876cb104.jpg" width = "24.35%" /><br> </div>from ILCC import utility utility.vis_back_proj(ind=1, img_style="orig", pcd_style="dis", hide_occlussion_by_marker=False) utility.vis_back_proj(ind=1, img_style="orig", pcd_style="dis", hide_occlussion_by_marker=True) utility.vis_back_proj(ind=1, img_style="edge", pcd_style="intens", hide_occlussion_by_marker=True)
使用计算得到的外部参数反投影点云的图像(见下图)将会显示,按"s"键保存。img_style 可以是 "edge"(边缘提取)或 "orig"(原始图像),pcd_style 可以是 "dis"(按距离着色)或 "intens"(按强度着色)。
<div style="text-align: center"> <p align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/fd022de8-47d2-4fc8-9b54-0e83edbb7471.jpg" width = "80%" /><br> <em>将点投影到原始图像上,按距离着色。棋盘格遮挡的部分未隐藏。</em> <br> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/fc215d7e-f3c5-4606-8dd1-ea5a57d33517.jpg" width = "80%" /><br> <em>棋盘格遮挡的部分已隐藏。通过将参数 hide_occlussion_by_marker 设置为 True 来隐藏棋盘格遮挡的部分。</em> <br> 对比上面两张图像中棋盘格的上部。 </em> <br> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/ea8a74ec-2997-4439-9eb9-619217a19f9d.jpg" width = "80%" /><br> <em>将点投影到边缘图像上,按强度着色。棋盘格遮挡的点已隐藏。</em> </p> </div> <div style="text-align: center"> <p align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/cbc5b968-8cbf-4e82-a79a-a2bfd9086801.png" width = "20%" /> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/84575d60-bcb9-4d6a-90f7-3e26d6539938.png" width = "20%" /> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/f01677cb-bb0d-4187-8f72-c1546e7f4808.png" width = "20%" /> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/7c8de693-4479-4ffd-99dd-b8b71cec6949.png" width = "20%" /> <br> <em>透视图像的结果。从左到右:[颜色:距离,原始图像],[颜色:距离,原始图像,隐藏遮挡],[颜色:强度,边缘图像],[颜色:强度,边缘图像,隐藏遮挡]。</em> </p> </div>全景图像的样本数据和检测到的角点处理结果可以从这里(181M)下载,透视图像的数据可以从这里(29M)下载。<br> 这些数据是使用棋盘格文件采集的,该文件包含6*8个图案,如果按A0尺寸打印,每个格子的长度为7.5厘米。
wget https://www.dropbox.com/s/m0ogerftqav0fyx/ILCC_sample_data_and_result.zip unzip ILCC_sample_data_and_result.zip cd ILCC_sample_data_and_result
将 config.yaml
复制到 ILCC_sample_data_and_result 文件夹。
wget https://www.dropbox.com/s/et0o4k2sp485nz1/ILCC_sample_perspective_data.zip unzip ILCC_sample_perspective_data.zip cd ILCC_sample_perspective_data
将 config.yaml
复制到 ILCC_sample_data_and_result 文件夹。<br/>
通过修改 config.yaml
,将 camera_type 设置为 'perpsective',并将内部参数输入到 instrinsic_para 中。
<div style="text-align: center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/1e82f48e-b39d-43d7-b6f6-49b9ae84ad28.png" width = "50%" /> </div>from ILCC import utility utility.vis_csv_pcd(ind=1)
<div style="text-align: center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/962226ef-e75e-4833-8804-4b9e4df6fe71.png" width = "50%" /> </div>from ILCC import utility utility.vis_segments(ind=1)
<div style="text-align: center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/08ba4556-85a4-45f0-8df8-6060c2614600.png" width = "50%" /> </div>from ILCC import utility utility.vis_segments_only_chessboard_color(ind=1)
<div style="text-align: center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/51cc5a20-bbbb-4756-9f05-62e1d3a34991.png" width = "50%" /> </div>from ILCC import utility utility.vis_ested_pcd_corners(ind=1)
<div style="text-align: center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/7551fcba-20e9-41f3-ae98-ccb77a560008.png" width = "60%" /> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/427fa45b-f24c-408c-8054-88c8d0bc6a08.png" width = "65%" /> </div>import utility import numpy as np utility.vis_all_markers(utility.vis_all_markers(np.arange(1, 21).tolist()))
config.yaml
中的 LiDAR_type 和 laser_beams_num 是否与您的设置相同。config.yaml
中的 jdc_thre_ratio 和 agglomerative_cluster_th_ratio。如果棋盘格分割不足,则减小这些值。config.yaml
中的 pattern_size 和 grid_length 是否设置正确。config.yaml
中的 marker_range_limit。config.yaml
中的 chessboard_detect_planar_PCA_ratio 值。config.yaml
中的 least_marker_points_num 值。config.yaml
中的 intensity_col_in 值是否与 csv 文件中强度列的索引相同。如有进一步问题,请在 Issues 中讨论。
编号 | 激光雷达型号 | 相机型号 | 棋盘格尺寸 | 格子长度[cm] | 距离范围[m] | 数据来源 | 作者 |
---|---|---|---|---|---|---|---|
1 | Velodyne <br> HDL-32e | Ladybug3 (全景) | 8*6 | 7.5 | 1.2 ~ 2.6 | 链接 | mfxox |
2 | Velodyne <br> HDL-32e | Ladybug3 的一个单目相机 | 8*6 | 7.5 | 1.2 ~ 2.6 | 链接 | mfxox |
如果您能分享使用不同尺寸或图案的棋盘格或其他类型激光雷达传感器收集的数据,我们将非常感激。我们会在测试条件列表中致谢您的贡献。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场 景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储 和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号