如果你的gdal版本是3.2.2及以上,那么只能:
from osgeo import gdal
ds = gdal.Open(data)
rows = ds.RasterYSize
cols = ds.RasterXSize
bandnum = ds.RasterCount
transform = ds.GetGeoTransform()
ds是一个对象,rows是影像的行,也是Y轴长度。对应的,cols则是影像的列,X轴的长度。bandnum代表影像的波段数。
transform是一个list,存储着栅格数据集的地理坐标信息。
#transform[0] /* top left x 左上角x坐标(经度)*/
#transform[1] /* w--e pixel resolution 东西方向上的像素分辨率*/
#transform[2] /* rotation, 0 if image is "north up" 如果北边朝上,地图的旋转角度*/
#transform[3] /* top left y 左上角y坐标(纬度)*/
#transform[4] ...
今天分享一个坐标系转换到wgs1984的脚本,并且分析此脚本生成的结果、和arcgis、QGIS的结果的差别,以此验证该脚本的可靠性。首先那么我说下为什么写这个脚本。
1现有一个遥感矢量文件,它的坐标系是投影坐标,如下图。
需要把它的坐标系转为地理坐标wgs1984。
我知道arcgis或者QGis可以实现这个功能,但是这样的操作,是做不到批量处理的,所以有必要自己写代码实现这个功能,从而加深对矢量文件处理的理解。
2下面的代码,是一个使用GDAL/OGR库的Python脚本,用来将输入的Shapefile文件转换到目标坐标系,默认是WGS84(EPSG:4326)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2025/2/19 20:05
# @File : 矢量转为wgs1984坐标系.py
'''
'''
# !/usr/bin/env python
from osgeo import ogr, osr
import os
def reproject_shapefile(input_shp, outpu ...
为什么会出现黑边某些遥感L1级别的影像本身自带黑边,所以在经过预处理后,L2级别的遥感影像存在黑边。
L1级别的影像的边缘如下,黑边的像素值是0。
L1级别的透明区域的像素值为Nodata,如下。
我们可以在arcgis上设置L1级别的像素为透明,但是这个设置是不改变影像,只是视觉效果上发生改变,操作如下:右击影像,选择属性,然后在Symbology勾选上Display Background Value按钮
可视化结果如下:
然而,经过6S大气校正、RPC几何校正后的影像边缘如下,黑边的像素值是负值。
怎么去除逻辑简单,将L2级别的影像中的负值设置为0即可。
代码简单,如下:
from osgeo import gdal
import numpy as np
import os
def remove_black_edges_border_only(input_path, output_path, block_size=2000, edge_width=100):
"""
以分块方式读取遥感影像,仅对影像边缘区域(图像边界内 edge_width 像素范围)进 ...
遥感影像的真正的顶点
如上图所示,红色的四个点是遥感影像中的真正的顶点,指的是影像有效区域的边界点,而非无效值(如NoData或背景值)的顶点。
而蓝色的四个点,影像的地理范围(边界)的角点。这些顶点是影像的四个角点(左上、右上、右下、左下),表示影像的地理范围。与影像的有效区域无关,即使影像中有大量无效值(如NoData),GDAL的顶点仍然是影像的四个角点。
GDAL只保存左上角信息,其余三个角通过基于影像的地理坐标(经纬度或投影坐标)计算的。
代码如下:
from osgeo import gdal
# 打开影像
dataset = gdal.Open('image.tif')
width = dataset.RasterXSize
height = dataset.RasterYSize
geotransform = dataset.GetGeoTransform()
# 计算四个角点的坐标
corners = [
(geotransform[0], geotransform[3]),
(geotransform[0] + width * geotransf ...
提问以一张png做演示,不依赖gdal和rasterio第三方库,用python一步一步演示遥感影像几何校正的过程,写成函数,帮我学习几何校正,帮助理解几何校正的本质
以下是它的思考:
嗯,用户想让我用Python一步步演示遥感影像的几何校正过程,而且不依赖GDAL和rasterio这两个库。他们希望写成函数,帮助他们理解几何校正的本质。好的,首先我得理清楚几何校正的基本步骤,然后考虑如何用纯Python实现这些步骤,而不用那些专业的库。
首先,几何校正的主要步骤通常包括确定控制点、构建变换模型、然后对图像进行重采样。用户可能想了解的是多项式变换,比如一阶或二阶多项式,然后用最小二乘法来求解系数。接着是反向映射,用双线性插值等方法填充校正后的图像。不过,使用纯Python处理图像的话,可能需要用到PIL库来读取和保存图像,以及处理像素数据。
那用户的需求是不用GDAL和rasterio,所以需要找到替代的库。PIL或者Pillow应该可以处理基本的图像操作。但处理地理空间数据的话,可能需要自己解析坐标,不过用户可能只是需要一个演示,所以可能控制点是由用户提供的,而不是从地理文件中 ...
根据https://github.com/xzyun2011/finetune_segment_anything_tutorial 微调SAM模型
代码使用Fine-tuning
Step 0, 下载SAM的权重,可以从segment-anything github repo model checkpoint 直接下载
Step 1, 准备好VOC2007 dataset,直接在 官网 下载。直链是http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
代码里面有个迷你版的VOC2007数据集,在 “data_example”里面,下好了权重可以直接用这个目录文件试跑
Step 2, 开始 fine-tuning
❗ 记得把模型、数据路径换成自己的,gpu id也可以指定 ❗
python3 finetune_sam_voc.py --w weights/sam_vit_b_01ec64.pth --type vit_b --data data_example/VOCdevkit
代 ...
代码片段1#include <iostream>
#include "gdal_priv.h"
using namespace std;
int main()
{
printf("strat!\n");
//注册文件格式
GDALAllRegister();
const char* file = "D:\\img1_1_32.tif";
GDALDataset *ds = (GDALDataset*) GDALOpen (file, GA_ReadOnly);
//A* p则使用:p->play(); 左边是结构指针。
//A p 则使用:p.paly(); 左边是结构变量。
int Xsize = ds->GetRasterXSize();
int Ysize = ds->GetRasterYSize();
printf("Xsize =%d\n" , Xsize);
...
MATLAB 和 Python 的主要区别在于,Python 是一种通用编程语言,而 MATLAB 是一个用于工程和科学应用的计算平台。
Matlab和Python,它们就像 Windows 和 Linux。
Matlab 更加直观,而 Python 可以定制,但需要更多知识。
Matlab 可能在某些特定方面比 Python 做得更好,MATLAB 也是 Simulink 的基础,Simulink 是一个用于模拟复杂多域系统的框图环境。
MATLAB 与 Python 语法Python 将一切视为对象,而 MATLAB 将一切视为数组。根本的技术差异影响了两者之间语法变化的许多其他方面。
例如,MATLAB 的语法非常适合数学建模和线性代数,可以清晰简洁地表达数学概念。相比之下,Python 提供了一种通用方法,凭借其可读性、多功能性和广泛的生态系统,更适合更广泛的应用。
MATLAB 的语法简洁直观
MATLAB 具有简单直观的数据分析和数值计算语法。一个原因是它使用类似于数学符号的脚本语言。Matlab 最擅长矩阵向量。语法就像在纸上书写一样,非常棒。你可以实现很多功能,比 ...
一直想在CLION上写关于GDAL的代码。由于我是一个野生程序员,所以我的CPP功力不深厚,甚至是属于那种,学过但全忘了的状态。
平常的工作中,python足以解决了我遇到80%的问题。
由于我习惯使用pycharm,那自然对clion也有一个较为不错的初印象。
我想在clion编辑器上,重新学习GDAL,重新学习CPP。
于是,拦路虎出现了:怎么在Clion下配置GDAL开发环境。
我查阅了很多中文资料、英文资料。终于解决了这个问题。
所以现在,把这个解决问题的详细的步骤记录下来。
这篇文章分为 行不通的方案,可行的方案。
行不通的方案,是指我走不通的路,但是别人走通的。
可行的方案,是指我走通的路,你们走不走得通,你们都试试才知道。
我是小白,水平有限,CPP太难了。
行不通的方案
在clion上使用vcpkg安装gdal。
这条路,我走了很多次,次次失败。失败原因未知。
你们可以先试一下这条路,是否对你们有用。
可行的方案我会详细地记录这个过程。步骤分为:
1.编译gdal
2.在clion创建一个新项目
3.复制编译好的gdal文件夹到我们的项目文件夹下
4.修改CMakeLi ...