2. 深度学习处理后给一幅经过处理的图像加坐标信息

您所在的位置:网站首页 无为地理预测 2. 深度学习处理后给一幅经过处理的图像加坐标信息

2. 深度学习处理后给一幅经过处理的图像加坐标信息

2024-07-14 22:46| 来源: 网络整理| 查看: 265

1 gdal控制影像坐标原理(超级简单)

普通图像加坐标无非就考虑两个问题: (1)图像坐标怎么转为地理坐标; (2)坐标系是什么,wgs84,还是大地2000坐标。

图像的坐标只有两个参数,只要有了这两个参数就用了地理坐标,(1)仿射矩阵和(2)地理投影参考系:

1.1 仿射矩阵信息

仿射矩阵信息有六个参数,描述的是栅格行列号和地理坐标之间的关系,有了它就知道地理坐标了: ‘’’ 0:图像左上角像素的左上角X坐标,不是左上角像素的中心点坐标; 1:图像东西方向分辨率; 2:旋转角度,如果图像北方朝上,该值为0; 3:图像左上角像素的左上角Y坐标,不是左上角像素的中心点坐标; 4:旋转角度,如果图像北方朝上,该值为0; 5:图像南北方向分辨率; ‘’’

#读取tif数据集 def readTif(fileName): dataset = gdal.Open(fileName) if dataset == None: print(fileName+"文件无法打开") return dataset #获取仿射矩阵信息 def Getgeotrans(fileName): dataset = readTif(fileName) return dataset.GetGeoTransform() #像素坐标和地理坐标仿射变换 def CoordTransf(Xpixel,Ypixel,GeoTransform): XGeo = GeoTransform[0]+GeoTransform[1]*Xpixel+Ypixel*GeoTransform[2]; YGeo = GeoTransform[3]+GeoTransform[4]*Xpixel+Ypixel*GeoTransform[5]; return XGeo,YGeo 1.2 地理坐标和投影坐标信息

gdal中通过dataset.GetProjection()获取数据的地理坐标和投影坐标

就是坐标系是什么,WGS84还是北京54等 1、北京54。 2、西安80。 3、WGS-84。

2 添加坐标代码

很多时候我们对一幅影像进行一些处理后,位置信息丢失,当然分成两种情况:

(1)tif影像处理后还是tif影像,只需要把附带的坐标文件copy过去就可以了 (2)tif影像处理后变成了png影像,名字变了,直接copy附带文件的方式不靠谱,所以需要进行坐标的添加。下面实现了第二种情况,只要是tif格式,完全可以,不论你的输入波段是多少个,输出波段是多少个

这是自己进行的实验 https://blog.csdn.net/xiaotiig/article/details/118707133

import gdal def copy_geoCoordSys(img_pos_path,img_none_path): ''' 获取img_pos坐标,并赋值给img_none :param img_pos_path: 带有坐标的图像 :param img_none_path: 不带坐标的图像 :return: ''' def def_geoCoordSys(read_path, img_transf, img_proj): array_dataset = gdal.Open(read_path) img_array = array_dataset.ReadAsArray(0, 0, array_dataset.RasterXSize, array_dataset.RasterYSize) if 'int8' in img_array.dtype.name: datatype = gdal.GDT_Byte elif 'int16' in img_array.dtype.name: datatype = gdal.GDT_UInt16 else: datatype = gdal.GDT_Float32 if len(img_array.shape) == 3: img_bands, im_height, im_width = img_array.shape else: img_bands, (im_height, im_width) = 1, img_array.shape filename = read_path[:-4] + '_proj' + read_path[-4:] driver = gdal.GetDriverByName("GTiff") # 创建文件驱动 dataset = driver.Create(filename, im_width, im_height, img_bands, datatype) dataset.SetGeoTransform(img_transf) # 写入仿射变换参数 dataset.SetProjection(img_proj) # 写入投影 # 写入影像数据 if img_bands == 1: dataset.GetRasterBand(1).WriteArray(img_array) else: for i in range(img_bands): dataset.GetRasterBand(i + 1).WriteArray(img_array[i]) print(read_path, 'geoCoordSys get!') dataset = gdal.Open(img_pos_path) # 打开文件 img_pos_transf = dataset.GetGeoTransform() # 仿射矩阵 img_pos_proj = dataset.GetProjection() # 地图投影信息 def_geoCoordSys(img_none_path,img_pos_transf,img_pos_proj)

参考: https://blog.csdn.net/nominior/article/details/102737294 十分感谢!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3