技术研究之无人机图片定位
1.前言
这里的目的就是,如何确定一个无人机照片中某个物体的地址位置。这就需要进行坐标变换了,将像素坐标,转为无人机镜头坐标,再转为世界坐标,这样就可以推算出一个图片中的某一个物体到底位于哪里了。
【1】.一种基于无人机的目标检测和三维定位方法和系统
2.代码
位置:经度、纬度、高度
姿态:偏航角(yaw)、俯仰角(pitch)、横滚角(roll)
相机标定参数:内参矩阵、畸变系数
(1) 安装依赖
1 | pip install scipy |
(2) 测试代码
1 | import cv2 |
5.多帧融合
借鉴于空三解算中的共线方程的算法。
【1】.三角测量计算点的三维坐标 在双目视觉中,分左右相机,同时可以获得左视图和右视图,根据匹配的同名点和左右相机的投影矩阵,就可以计算出匹配同名点的世界坐标。
【2】.DJI无人机影像地理坐标系校正 代码的主要功能是将无人机拍摄的图像中的每个像素位置转换为地理坐标(经纬度),并计算图像的实际物理尺寸。
【3】.坐标转换:从图像坐标到世界坐标的旅程
【4】.基于无人机正摄JPG图像实现像素GPS定位
【5】.无人机影像的像素坐标转大地坐标
【6】.无人机像素坐标转地理坐标——实操(附数据+代码) 读取照片,获取地物点的像素坐标
【7】.【Python&RS】基于GDAL给无人机图片定义坐标系 有了这个想法后就要行动起来,定义一个坐标系,一般需要两个点。一是需要投影坐标系的参数,二就是仿射地理变换参数。投影坐标系非常容易得到,投影坐标系的参数GDAL有内置的一部分,当然也可以读取已有数据的坐标系。但仿射地理变换参数就比较麻烦了,我印象中定义仿射地理变换参数时只能通过图片左上角的点就是设置,不像ENVI可以任意选点。ENVI方便很多,有兴趣可以查看【RS】基于ENVI给图片/影像定义坐标系。所以我们只要能解决仿射地理变换参数就可以解决图片定义坐标系的问题。
【8】.在给定像素在照片中的像素坐标和相机校准值的情况下,是否可以计算像素的世界坐标?
【9】.大疆智图重建任务导出常见问题 由于策略改变,大疆智图 V3.0.0版本三维重建的无畸变影像 undistort 文件夹存放在 temp 文件夹里,该文件夹存储计算过程文件,导出任务压缩包时 temp 文件不会跟随导出;如果您需要使用无畸变影像,直接拷贝备份 undistort 文件夹即可;
【10】.C++无人机摄影测量——OMEGA、Phi、kappa转换为YAW,Pitch,Roll
6.自由网平差
从约束网平差的结果文件(如你之前的ba_calib_params.json)中提取以下关键参数,这些是 “通用模型” 的核心,无需重复平差:
参数类型 具体内容 来源 作用
相机内参 fx/fy/cx/cy/k1/k2/k3/p1/p2 约束网平差的camera字段 像素畸变校正、投影计算
系统校准参数 姿态偏移(yaw/pitch/roll_offset)、安装角(mount_yaw/pitch/roll) 约束网平差的system_errors字段 修正新照片的姿态角,消除系统误差
测区基准 ENU 参考原点(ref_lat/ref_lon/ref_alt)、缩放因子(scale=cos (ref_lat)*R_earth) 约束网平差的 ENU 转换参数 将计算出的 ENU 坐标转为大地经纬度
全局偏移 global_dx/global_dy/global_dz 约束网平差的global_offset字段 修正新照片的位置坐标,匹配大地基准
(1)相机模型可以在空三报告中得到
(2)系统校准,主要通过 BlocksExchangeUndistortAT.xml 中的 Rotation 以及原始图片中 姿态教得到,相机安装角误差、姿态测量误差
(3)测区基准,通过 sfm_geo_desc.json 文件得到
(4)全家偏移量,主要通过 BlocksExchangeUndistortAT.xml 中的 Center 以及原始图片中保存的 pos 信息进行系统校准得到。
这是豆包给的思路,看起来没有问题,一切都没有问题,但是我用了很多时间,去思考和尝试这个东西,最后我发现,这事不能成功的,因为无法通过一次平差,获取一个统一的公式,如果可以的话,那就不用每次都进行空三解算平差了。
【1】.Omega (X)-Phi (Y)-Kappa (Z)
【2】. 基于BA的改进视觉/惯性融合定位算法 这是一篇基于 光束平差法(bundle adjustment)进行 局部优化的计算目标位置的方法。
【3】.一种基于深度图像的实时三维重建方法及系统
【4】.局部BA优化
