如何根据坐标剪切卫星图像的一部分? (gdal)

时间:2019-08-13 18:28:46

标签: python pandas gdal geopandas osgeo

我有7个频道的卫星图像(基本上,我有7个.tif文件,每个频段一个)。我有一个.csv文件,其中包含在卫星拍摄的区域中的兴趣点坐标。我想在每个坐标点的周围剪切图像的一小部分。我该怎么办?

由于我现在没有完整的工作代码,因此图像的这些小部分的大小确实无关紧要。对于这个问题的解释,假设我希望它们为15x15像素。因此,目前,我的最终目标是获得许多15x15x7向量,每个.csv文件中的坐标点都有一个。这就是我所坚持的。 (“ 15x15x7”中的“ 7”是因为图片有7个通道)

只是在必要时提供一些背景知识:稍后我将使用这些向量在喀拉斯邦训练CNN模型。

这是我到目前为止所做的:(我正在使用jupyter笔记本,anaconda环境)

  • 导入了gdal,numpy,matplotlib,geopandas等库。

  • 使用gdal打开.gif文件,将其转换为数组

  • 使用熊猫打开.csv文件。

  • 创建了一个形状为(7931、7901、3)的名为“ imagen”的numpy数组,该数组将托管卫星图像的7个波段(以数字的形式)。在这一点上,我只需要知道数组“ imagen”的哪些行和列对应于每个坐标点。 换句话说,我需要将每个坐标点转换为一对数字(行,列)。这就是我所坚持的。

在那之后,我认为“切割部分”将很容易。

#I import libraries

from osgeo import gdal_array
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import geopandas
from geopandas import GeoDataFrame
from shapely.geometry import Point

#I access the satellite images (I just show one here to make it short)

b1 = r"E:\Imágenes Satelitales\2017\226_86\1\LC08_L1TP_226086_20170116_20170311_01_T1_sr_band1.tif"
band1 = gdal.Open(b1, gdal.GA_ReadOnly)

#I open the .csv file

file_svc = "C:\\Users\\Administrador\Desktop\DeepLearningInternship\Crop Yield Prediction\Crop Type Classification model - CNN\First\T28_Pringles4.csv"
df = pd.read_csv(file_svc)
print(df.head())

打印出这样的内容:

   Lat1        Long1       CropingState
   -37.75737   -61.14537   Barbecho
   -37.78152   -61.15872   Verdeo invierno
   -37.78248   -61.17755   Barbecho
   -37.78018   -61.17357   Campo natural
   -37.78850   -61.18501   Campo natural
#I create the array "imagen" (I only show one channel here to make it short)

imagen = (np.zeros(7931*7901*7, dtype = np.float32)).reshape(7931,7901,7)
imagen[:,:,0] = band1.ReadAsArray().astype(np.float32)

#And then I can plot it:

plt.imshow(imagen[:,:,0], cmap = 'hot')
plt.plot()

哪个图是这样的:

https://github.com/jamesluc007/DeepLearningInternship/blob/master/Crop%20Yield%20Prediction/Crop%20Type%20Classification%20model%20-%20CNN/First/red_band.png

我想将(-37,-61)转换为(2230,1750)。但是我还没弄清楚。有任何线索吗?

0 个答案:

没有答案