我有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()
哪个图是这样的:
我想将(-37,-61)转换为(2230,1750)。但是我还没弄清楚。有任何线索吗?