【Python&GIS】无人机影像的像素坐标计算图片某点的地理/投影坐标

本文介绍如何通过Python结合GIS知识,利用图片中心点的地理坐标和像素坐标,计算无人机影像中某点的地理/投影坐标。首先获取图片中心点坐标、偏转角和目标点与中心点的夹角,接着将中心点地理坐标转为投影坐标,最后通过计算和转换得到目标点坐标。文章提供完整代码和思路解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        又是掉头发的一天,今天的任务是通过图片中心点的地理坐标以及图片中某点的像素坐标(即这个点位于图片中的x,y坐标)计算该点的地理/投影坐标。经过一整天的搜索,发现网上并没有这方面的教程。然后就是想啊想,头发一抓一大把,终于在网上零零散散的教程以及不断摸索中解决了这个问题。

        大致思路就是,先获取图片相对真北方向的偏转角以及该点和图片中心的连线与图片的正北方向夹角;然后将图片中心点的地理坐标转换为投影坐标(如果这一步没有中心点的地理坐标,那么你就不用继续往下看了);最后就是通过图片分辨率计算点到中心的实际距离,再通过夹角和中心点的投影坐标加加减减即可。话虽这么说,但实施起来真心不简单啊!!!

原创作者:RS迷途小书童

博客地址:https://blog.csdn.net/m0_56729804?type=blog

一、准备工作

1.获取图片中心点的经纬度坐标/投影坐标(必须)

        如果只有一张图片的话,你完全可以右键图片,查看其属性,里面就有经纬度坐标。同时也可以使用Python实现,之前分享过【Python&GIS】判断图片中心点/经纬度点是否在某个面内,所以这里就不解释了,直接上代码。

def Get_LatLon(path_image):
    """
    :param path_image: 输入图片路径
    :return: 返回中心点经纬度
    """
    # 获取图片的经纬度信息
    f = open(path_image, 'rb')
    contents = exifread.process_file(f)
    longitude = contents["GPS GPSLongitude"].values
    longitude_f = longitude[0].num/longitude[0].den + (longitude[1].num/longitude[1].den/60) + (longitude[2].num/longitude[2].den/3600)
    latitude = contents["GPS GPSLatitude"].values
    latitude_f = latitude[0].num/latitude[0].den + (latitude[1].num/latitude[1].den/60) + (latitude[2].num/latitude[2].den/3600)
    f.close()
    return longi
### 无人机跟踪系统中的坐标系转换 在无人机跟踪系统中,坐标系之间的转换对于准确定位和追踪目标至关重要。通常涉及的坐标系包括但不限于:世界坐标系、相机坐标系、图像像素坐标系以及地理信息系统(GIS)所使用的经纬度高度(LLA)坐标系。 #### 坐标系定义 - **LLA (Latitude Longitude Altitude)**: 地理位置的标准表示方式,即纬度、经度和海拔高度。 - **ECEF (Earth-Centered Earth-Fixed)**: 是一种三维笛卡尔坐标系,原位于地球质心,X轴指向本初子午线与赤道交,Z轴沿地球自转轴正向。 - **Camera Coordinate System**: 对于安装有摄像头设备而言,其自身的局部坐标体系用于描述相对于摄像机光心的位置关系。 - **Pixel Coordinates**: 图像平面上各对应的二维索引值(x,y),由传感器捕捉到的信息映射而成[^1]。 #### 转换过程概述 当涉及到从视频流获取的目标物体定位时,首先需要将检测框中心像素坐标变换至相机坐标系下;接着再进一步投影回真实世界的地理位置上。这一系列操作依赖于内外参矩阵参数校准结果来完成几何透视变化计算: 1. 使用已知的内参矩阵K和平移旋转矢量[rvec|tvec]可以实现从像素坐标(u,v)到相机坐标(Xc,Yc,Zc)间的相互转变; 2. 接着利用四元数或者欧拉角表达的姿态信息把上述得到的空间直角坐标映射成全球统一标准下的大地测量学参照框架内的数值形式——也就是常说的地心地固(ECEF)坐标; 3. 最终借助特定地区的椭球体模型(如WGS84),可求解出最终所需的地理坐标(lat,lon,h)。 ```matlab % 将像素坐标转换为相机坐标 function [xc, yc, zc] = pixel_to_camera_coords(K, rvec, tvec, u, v) % K is the camera intrinsic matrix % rvec and tvec are rotation vector and translation vector from solvePnP or similar function R = rodrigues(rvec); % Convert Rodrigues to Rotation Matrix inv_K = inv(K); uv_ones = [u; v; ones(size(u))]; xyz_c = R' * ((inv_K * uv_ones) - tvec); end ``` 为了提升坐标转换精度,在实践中往往还需要考虑大气折射效应等因素的影响,并采取适当的方法加以修正。此外,采用高阶椭球模型也是改善准确性的有效途径之一。
评论 82
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RS迷途小书童

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值