如何使用其.shp文件生成与tiff文件相同大小的RGB图像?

时间:2018-11-01 07:35:12

标签: python matplotlib gis geopandas

1。现有数据:

我有一个区域的一些遥感图像数据,它们的名称分别是“ xx,BPW”,“ xx.TFW”,“ xx.tif” ,“ xx.Tif.Aux.XML” ”,“ xx。tif。Ovr”,“ xx。DBF”,“ xx。PRJ”,“ xx。SBN”,“ xx。SBX”,“ xx。shp” ,“ xx。 “ SHP。XML”,“ xx。SHS”。 .shp文件中存在许多功能,但是我只使用其中之一。

.tif遥感图像和相应的.shp文件可以在GIS软件中正确可视化,并且它们的坐标严格相同。

2。问题描述

我是计算机科学专业的学生,​​对遥感数据知之甚少,我想使用.shp文件生成RGB标签图像,该图像可用于深度学习中的语义分割任务(即每个值) (所选功能中的)将以一种颜色显示),并且RGB标签图像的大小可以完全匹配.tif文件的大小。但是,我现在生成的标签大小与.tif文件不同,该文件不能满足我的需要,而且我也不知道如何解决它。

3。我所做的

3.1生成标签图像

import geopandas as gp
import matplotlib.pyplot as plt
import os
import gdal
import numpy as np

tiff_file = "xx.tif"
shp_file = "xx.shp"
png_file = "xx.png"
variable = "OneFeature"

#open shp file
gp_file = gp.GeoDataFrame.from_file(shp_file)
#convert to plt image
fig, ax = plt.subplots(1)
ax.axis('off')
gp_file.plot(column=variable, cmap='Blues', ax=ax)
#save label image to png file
fig.savefig(png_file, dpi=200)

然后我得到了这张图片: My Generated Label

3.2获取tif文件的大小

tif = gdal.Open(tiff_file)  # (30480, 43990, 3)
print("tif.RasterCount =", tif.RasterCount)  # 3
band1 = tif.GetRasterBand(1)
band2 = tif.GetRasterBand(2)
band3 = tif.GetRasterBand(3)
band1Array = band1.ReadAsArray()
band1Array = band1Array[:, :, np.newaxis]
band2Array = band2.ReadAsArray()
band2Array = band2Array[:, :, np.newaxis]
band3Array = band3.ReadAsArray()
band3Array = band3Array[:, :, np.newaxis]
tifArray = tif.ReadAsArray()
print(tif)

band3d = np.concatenate((band1Array, band2Array, band3Array), axis=2)
print(band1Array.shape)
print(band3d.shape)

tif文件太大(〜4GB),所以我没有在Python中可视化它。

现在,tif的大小为(30480,43990,3),但是生成的标签的大小为(960,1280,3)。显然,它们具有不同的纵横比。 如何生成尺寸为(30480、43990、3)的标签图像,同时将tif和PNG图像中的地面对象放置在同一像素位置? (例如,如果一棵树在tif文件中的坐标为(301,400),则其在标签图像中的坐标也应为(301,400))

  

或者,还有另一种方法可以轻松地将.shp文件转换为标签图像吗?

0 个答案:

没有答案