在上周的空余时间,实现了单景大疆无人机航片的粗几何校正。现在把程序改造为批量处理模式,并打包为exe二进制可执行文件。
以下是下载链接,仅供参考学习:
AerialCorrection.exe https://www.alipan.com/s/WfQ5nEVUPpx
30天后过期。
输入参数有三个输入参数:
1.航片文件所在的文件夹路径
2.输出文件保存的文件夹路径
3.无人机镜头的像元尺寸,单位是μm。 (根据你的镜头信息填写)如果是4.4μm,就填4.4
存在的bug输入参数中的文件夹路径不能存在中文、特殊符号,尽量使用纯英文路径。
这个bug是因为编码方式造成的。
可以改进的地方1.解决中文、特殊符号乱码的问题。
2.解决自动选择像元尺寸参数的问题。
进阶学习方向不限于以下研究方法:
1.航片配准
2.航片拼接
3.点云生成
4.数字高程模型生成
5.3维模型生成
还有很多研究方向,等待去挖掘。
经过这几天的测试,完成无人机航拍图像几何校正,也叫做航片的正射影像处理。
主要步骤如下:
现在对每一个步骤分析,谈论为什么要这样做。
获取航片信息
获取航片信息是为了计算影像的分辨率,相关操作可以查看这里。
根据偏航角旋转图片这步骤是必要的。详细讲解如何实现这一步骤。
扩充图像的意思是,用0值在图像的边缘填充,这一步骤的目的是,为了 旋转后的图像 还在指定尺寸范围内。
扩充图像效果如下:
下一步是对图像进行旋转,假设偏航角为-45°,则此时要对图像进行逆时针旋转45°。
这涉及到另一个问题,偏航角的定义。示意图如下:
简单来说,航迹线偏在航线右边,偏航角为正,航迹线偏在航线左边,偏航角为负。请看下面的灵魂画图。
这里假设偏航角是-45度,旋转中心为图像的中心,旋转后的图像如下:
为什么要先扩充图像,再旋转?因为这里调用opencv的函数,如果直接对原始图像进行旋转,会丢失部分信息。
直接对原始图像进行旋转,效果如下:
如上图所示,部分信息被省略了,所以要先用0值扩充图像边缘,使图像的尺寸增加一倍,然后再对扩充后的图像进行旋转。
裁剪图像这一步骤的目的是,为了减少旋转图像的 ...
遥感图像的空间分辨率遥感图像的空间分辨率是衡量图像上可检测到的最小地面单元尺寸的关键指标,它通常用地面采样间距(GSD)或像元大小来表示。
像元大小直接关联着图像中每个像素所代表的地面面积。例如,在1米空间分辨率的图像中,每个像素对应着实际地面上1米×1米的区域。
GSD是无人机或遥感卫星拍摄的影像中每个像素所代表的实际空间距离。它可以通过以下公式计算:
d = (s * H) / (f * 10) # 注意单位转换
其中:
d:单位厘米(cm),指空间分辨率。
s:单位微米(µm),指像元尺寸(也叫像素大小、像素间距)。
H:单位米(m),指飞行高度。(不是绝对高度)
f:单位毫米(mm),指镜头的焦段(焦距)。
请注意,在公式中我们进行了单位转换,因为1毫米等于10微米,所以除以10来确保单位的一致性。
单位关系为:
1米(m)= 100厘米(cm)
1毫米(mm)= 10微米(µm)
通过这个公式,我们可以根据已知的像元尺寸、飞行高度和焦距来计算GSD,从而了解遥感图像的空间分辨率。这对于遥感数据的分析和应用至关重要,因为它直接影响到图像中地物细节的识别能力。
示例以大 ...
在地理信息系统中,获取精确的地理位置数据对于各种分析至关重要。随着数码摄影的普及,越来越多的照片包含了EXIF元数据,其中就包含了拍摄地点的GPS信息。本文将介绍如何使用Python编程语言从照片中提取这些GPS信息,并将其转换为Shapefile文件,以便在GIS软件中进行进一步的分析和处理。
一、准备工作在开始之前,需要确保已经安装了以下Python库:
PIL(或Pillow):用于处理图像文件。
pyshp:用于读写Shapefile文件。
可以使用pip来安装这些库:
pip install pillow pyshp
二、准备工作首先,我们需要编写一个函数来从照片中提取EXIF元数据中的GPS信息。这个函数将打开照片文件,解析EXIF标签,并提取出经度和纬度信息。
from PIL import Image
def exif(img):
"""
从图片中返回EXIF元数据
"""
exif_data = {}
try:
i = Image.open(img) # 使用PIL库打开图片
tags ...
终结一切找不到包(第三方库)的问题。
经常在互联网上看到python的求助问题:
我安装了 pip 为什么运行报找不到可执行文件?
import module 为什么报 ModuleNotFound?
为什么我用 Pycharm 能运行在 cmd 里运行不了?
授人以鱼不如授人以渔,要解决这类问题,你得知道 Python 是如何找包的。希望看完这篇文章,能有所帮助。
Python 是如何寻找包的现在大家的电脑上很可能不只有一个 Python,还有更多的虚拟环境,导致安装包的时候,一不小心你就忘记注意安装包的路径了。首先我们来解决找包的问题,这个问题回答起来很简单,但很多人不知道这个原理。假如你的 Python 解释器的路径是 $path_prefix/bin/python,那么你启动 Python 交互环境或者用这个解释器运行脚本时,会默认寻找以下位置1:
$path_prefix/lib(标准库路径)
$path_prefix/lib/pythonX.Y/site-packages(三方库路径,X.Y 是对应 Python 的主次版本号,如 3.7, 2.6)
当前工作目录( ...
在地理信息系统中,Shapefile(.shp)是一种非常常见的矢量数据格式,用于存储地理要素的空间信息和属性数据。在处理大量Shapefile时,有时需要将多个文件合并成一个,以便于统一管理和分析。本文将介绍如何使用Python的GDAL/OGR库实现多个Shapefile文件的合并操作,并讨论其中的一些技术细节和注意事项。
一、背景介绍
GDAL/OGR是一个开源的地理数据转换库,提供了丰富的地理数据读写和处理功能。在Python中,我们可以通过osgeo模块来使用GDAL/OGR库。GDAL主要用于栅格数据的处理,而OGR则专注于矢量数据的处理。通过OGR,我们可以方便地读取、创建和修改Shapefile文件。
二、合并多个Shapefile文件
为了合并多个Shapefile文件,我们首先需要获取这些文件的路径列表,然后逐个读取文件并提取其中的地理要素和属性数据。最后,将这些数据写入一个新的Shapefile文件中。
以下是一个简单的Python类MultipleShpMerge,用于实现多个Shapefile文件的合并操作:
import glob
import os
fro ...
在地理和导航领域,我们经常使用度分秒(DMS)和十进制度数(DD)两种格式来表示经纬度。这两种格式各有优缺点,但在某些应用场景下,我们需要将一种格式转换为另一种格式。本文将介绍如何使用Python实现这两种格式之间的转换,并解释其背后的原理。
一、度分秒(DMS)与十进制度数(DD)简介
度分秒(DMS)是一种传统的角度表示方法,它将一个角度分为度、分和秒三个部分。在地理坐标中,度通常表示大单位,分和秒表示更小的单位。例如,北纬35度14分57.18秒可以表示为35º 14’ 57.18” N。
十进制度数(DD)则是一种更简洁的表示方法,它将角度表示为一个小数。例如,北纬35度14分57.18秒可以转换为十进制度数35.249216度。
二、从十进制度数转换为度分秒
import math
import re
def dd2dms(lat, lon):
latf, latn = math.modf(lat)
lonf, lonn = math.modf(lon)
latd = int(latn)
latm = int( ...
1.在平常,我时常玩chatgpt,它是个好工具。在写代码,我时常玩copilot,它也是个好工具。
copilot是微软开发的,而微软是开发chatgpt的openai的股东,所以copilot也就是调用了chatgpt的接口,copilot可以视为类gpt的工具,同理,国内的文心一言也是如此。
类gpt的东西是一个好工具,真真正正的提高工作效率。
首先这不是广告,也不需要我给它们打广告。
这是一篇关于使用copilot、chatgpt的使用感受。
2.我使用了chatgpt一年多,切切实实提高工作效率,一些问题直接复制去问它。简直把它当成了百度使用。
chatgpt有缺点吗?是有的,对于特定知识,它只会胡说八道一塌糊涂。
比如,我问它:利用最小二乘法拟合RPC参数。
这时候,gpt在一本正经的胡说八道,因为我问到了它的知识盲区,而它却试图掩盖自身缺点。
这个时候,不是它的错,而我的错。我问了一些特定领域的问题,显示是想为难它,因为它没有接触过相关的资料,不懂也是正常的。
3.纵使存在缺点,但是gpt的优点是大于缺点的。
对于通用知识,它显得过于强大。有人考雅思用它来改作文进而提升。 ...
在路线规划和高精度地图要素采集的过程中,获取道路的中心线是非常关键的步骤。这个过程本质上是将特殊的面矢量转化为线矢量。深度学习技术,特别是卷积神经网络(CNN),可以用于识别图像中的道路,生成一个道路的面矢量图,其中每个像素都被标记为“道路”或“非道路”。然后,我们需要将这个面矢量图转化为道路的中心线。这通常可以通过使用骨架化或细化技术来实现,这些技术可以将二维的面矢量细化为一维的线矢量,即道路的中心线。这样,我们就可以从深度学习生成的道路面矢量图中获取到道路的中心线,为路线规划和高精度地图要素采集提供重要信息。
本文主要讲解如何端对端获取道路中心线,不涉及深度学习道路识别。
输入是道路面矢量,输出是道路中心线矢量
代码# -*- coding: utf-8 -*-
# @Time : 2024/4/21 20:48
# @File : road_centerline.py
# 获取代表道路轮廓(红线)的多边形中心线
import geopandas as gpd
import pygeoops
def generate_centerline(input_shapefil ...
在路线规划和高精度地图要素采集的过程中,获取道路的中心线是非常关键的步骤。这个过程本质上是将特殊的面矢量转化为线矢量。深度学习技术,特别是卷积神经网络(CNN),可以用于识别图像中的道路,生成一个道路的面矢量图,其中每个像素都被标记为“道路”或“非道路”。然后,我们需要将这个面矢量图转化为道路的中心线。这通常可以通过使用骨架化或细化技术来实现,这些技术可以将二维的面矢量细化为一维的线矢量,即道路的中心线。这样,我们就可以从深度学习生成的道路面矢量图中获取到道路的中心线,为路线规划和高精度地图要素采集提供重要信息。
本文主要讲解如何端对端获取道路中心线,不涉及深度学习道路识别。
输入是道路面矢量,输出是道路中心线矢量
代码# -*- coding: utf-8 -*-
# @Time : 2024/4/21 20:48
# @File : road_centerline.py
# 获取代表道路轮廓(红线)的多边形中心线
import geopandas as gpd
import pygeoops
def generate_centerline(input_shapefil ...