当前位置:首页 » 《随便一记》 » 正文

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

27 人参与  2024年02月10日 13:51  分类 : 《随便一记》  评论

点击全文阅读


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

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

一、准备工作

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 longitude_f, latitude_f

2.获取图片与真北方向的偏转角(非必须)

        如果你的图片并不是无人机拍的,或者拍摄时图片与真北方向并无夹角,那么就不需要这一步。这一步主要就是矫正相机拍摄时的偏转,每种无人机的参数名可能不一样,所以需要自行修改。

        下面的代码也可以获取图片中心点的经纬度,但我之前以及用过第一步的代码了,所以就继续使用第一步的了,你们可以自己简化。

def Get_Image_Yaw_angle(file_path):    """    :param file_path: 输入图片路径    :return: 图片的偏航角    """    # 获取图片偏航角    b = b"\x3c\x2f\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3e"    a = b"\x3c\x72\x64\x66\x3a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x20"    img = open(file_path, 'rb')    data = bytearray()    dj_data_dict = {}    flag = False    for line in img.readlines():        if a in line:            flag = True        if flag:            data += line        if b in line:            break    if len(data) > 0:        data = str(data.decode('ascii'))        lines = list(filter(lambda x: 'drone-dji:' in x, data.split("\n")))        for d in lines:            d = d.strip()[10:]            key, value = d.split("=")            dj_data_dict[key] = value    # print("Image_yaw",dj_data_dict["FlightYawDegree"][1:-1])    return float(dj_data_dict["FlightYawDegree"][1:-1])

3.获取图片目标点与中心点的连线和图片正北方向的夹角(必须)

        通俗来说,就是该点与图片正上方的夹角,同样这步也是用来矫正偏转的,获取该角度后,即可得到该点在投影坐标系中与真北方向的夹角。

def Yaw_angle_calculation(x, y, x_Center, y_Center):    """    :param x: 输入图片目标点的栅格坐标x    :param y: 输入图片目标点的栅格坐标y    :param x_Center: 输入图片的中心点x坐标    :param y_Center: 输入图片的中心点y坐标    :return: 目标点相对于中心点的偏转角度    &#

点击全文阅读


本文链接:http://zhangshiyu.com/post/68033.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 京圈佛子破戒后,我改嫁京圈纨绔(沈墨渊,白晶晶)
  • 前世被闺蜜害死,重生后我让她从太子妃变疯女苏婉儿,清歌完本_前世被闺蜜害死,重生后我让她从太子妃变疯女(苏婉儿,清歌)
  • 全书浏览七零军嫂太彪悍,带三宝上军区离婚(沈清落,陈桂花,陆有为)_七零军嫂太彪悍,带三宝上军区离婚(沈清落,陈桂花,陆有为)全书结局
  • 今天也没变成昨天(周扬陈默)全书免费_(周扬陈默)今天也没变成昨天后续(周扬陈默)
  • 重生后,秦总非要父以子贵(许沐晴,秦越泽)全书浏览_重生后,秦总非要父以子贵全书浏览
  • 他嫌弃我喝两块钱豆浆上不了台面,我结婚后他又哭又闹全书万照,白青青在线
  • 昭然若梦前尘烬列表_昭然若梦前尘烬(温昭然方池雲)
  • 导师借我股票账号,我倒欠五十万(孟潇潇,宁薇)_导师借我股票账号,我倒欠五十万孟潇潇,宁薇
  • 拒绝把外卖券给舍友,竹马送我到迪拜捡垃圾(周钰泽,蒋清清,思源)全书浏览_拒绝把外卖券给舍友,竹马送我到迪拜捡垃圾全书浏览
  • 我的人生,你已出局(程森凌古楚文)_我的人生,你已出局程森凌古楚文
  • 穿书成病娇女配,睁眼就签下离婚协议书(朱楼)_穿书成病娇女配,睁眼就签下离婚协议书
  • 老婆逼我给白月光捐肾,我死后她悔疯了(宋逸晨沈墨白)全书浏览_老婆逼我给白月光捐肾,我死后她悔疯了全书浏览

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1