1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
import pandas as pd
import numpy as np
import gdal
from matplotlib import cm
from pandas.plotting import scatter_matrix
from pandas import DataFrame
import seaborn as sns
import matplotlib.pyplot as plt
import os
#os.environ['PROJ_LIB'] = 'C:\\Users\\Lenovo P50\\anaconda3\\envs\\myenv\\Library\\share\\proj'
#os.environ['GDAL_DATA'] = 'C:\\Users\\Lenovo P50\\anaconda3\\envs\\myenv\\Library\\share'
#### definir les inputs########
inpRaster = 'D:\code-python\img.tif'
outRaster = 'D:\code-python\output.tif'
df = pd.read_csv('D:/code-python/RandomForest/test2/Echantillons_3CP_csv.csv', sep=';')
#read training data
#enter training data bands according to your csv columns name
data1 = df[['B1','B2','B3']]
#enter training label according to your csv column name
label1 = df['Class']
del df
#open raster
ds = gdal.Open(inpRaster, gdal.GA_ReadOnly)
rows = ds.RasterYSize
cols = ds.RasterXSize
bands = ds.RasterCount
geo_transform = ds.GetGeoTransform()
projection = ds.GetProjectionRef()
#read as array
array1 = ds.ReadAsArray()
ds = None
#Modify structure
array1 = np.stack(array1,axis=2)
array1 = np.reshape(array1,[rows*cols,bands])
test1 = pd.DataFrame(array1, dtype='int16')
del array1
from sklearn.model_selection import train_test_split
data_train, data_test, label_train, label_test = train_test_split(data1, label1, test_size=0.5, random_state=100)
#set classifier
from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators=50,n_jobs=-1)
classifier.fit(data_train,label_train)
data_train
label_train
# #prédire les classes
y_pred1= classifier.predict(test1)
del test1
classification1 = y_pred1.reshape((rows,cols))
del y_pred1
# Create a GeoTIFF file with the given data
def createGeotiff(outRaster, data, geo_transform, projection):
# Create a GeoTIFF file with the given data
driver = gdal.GetDriverByName('GTiff')
rows, cols = data1.shape
rasterDS = driver.Create(outRaster, cols, rows, 1, gdal.GDT_Byte)
rasterDS.SetGeoTransform(geo_transform)
rasterDS.SetProjection(projection)
rasterDS.GetRasterBand(1).WriteArray(data1)
rasterDS = None
#export classified image
createGeotiff(outRaster,classification1,geo_transform,projection)
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score, cohen_kappa_score
print(confusion_matrix(label_test,y_pred))
print(classification_report(label_test,y_pred))
print(accuracy_score(label_test, y_pred))
print(cohen_kappa_score(label_test,y_pred)) |
Partager