リモートセンシング画像分類(教師付き分類、教師なし分類)
1.K手段クラスター分析(教師なし分類)
#教師なし分類 #スタック機能ラスタバンド から OSGEO インポートGDAL インポートnumpyのAS NP DEF stack_bands(ファイル名): バンドスクラップ = [] のためのFn におけるファイル名の: DS = gdal.Open(FN) のための I における範囲(1、DS。 。+ 1 .RasterCount ): bands.append(ds.GetRasterBand(I).ReadAsArray()) 戻りnp.dstack(バンドスクラップ) #のK平均クラスタリング分析スペクトル インポートOS インポートnumpyのAS NP インポートスペクトル からOSGEO インポートGDAL インポートospybook AS鉛 フォルダ = R&LT ' E:\ Desktopのファイルパス\ GDAL \ osgeopy-DATA \ osgeopy-DATA \ランドサット\ユタ' raster_fn = [ ' LE70380322000181EDC02_60m.tif '、' LE70380322000181EDC02_TIR_60m.tif ' ] out_fn = ' kmeans_prediction_60m2.tif ' os.chdir(フォルダ) データ = pb.stack_bands(raster_fn) #のデータスタックの クラス、センター= spectral.kmeans(データ)#の実行モデル #デフォルトのクラスタ10、20回の反復 DS = gdal.Open( raster_fn [0]) #以下投影取得するアフィン変換 out_ds = pb.make_raster(DS、out_fn、クラス、gdal.GDT_Byte) レベル = pb.compute_overview_levels(out_ds.GetRasterBandを(1 )) out_ds.BuildOverviews(' NEAREST ' 、レベル) out_ds。 flushCacheに() out_ds.GetRasterBand( 1 ).ComputeStatistics(偽) デル out_ds、DS
2.Sklearn実施CART決定木分類(教師付き分類)
#使用CARTマップの分類(教師付き分類) のインポートCSV インポートのOS インポートnumpyのAS NP から sklearn インポートツリー から OSGEO インポートGDAL インポートPB AS ospybook フォルダ = R " E:\デスクトップファイルパス\ GDAL \ osgeopyデータ\ osgeopy -data \ランドサット\ユタ' raster_fn = [ ' LE70380322000181EDC02_60m.tif ' ' LE70380322000181EDC02_TIR_60m.tif ' ] #リモートセンシング画像バンドストレージ out_fn = R&LT ' tree_prediction60.tif ' train_fnR&LT = ' E:\ Desktopのファイルパス\ GDAL \ osgeopy-DATA \ osgeopy-DATA \ユタ\ training_data.csv ' #のCSVファイル、および座標データ gap_fn R&LT = ' E:\ Desktopのファイルパス\ GDAL \ osgeopy-データ\ osgeopyデータ\ユタ\ landcover60.tif ' #のカラーテーブルデータ os.chdir(フォルダ) XYS = [] クラス = [] を開くと(train_fn)AS FP: リーダー = csv.reader(FP) #は、オブジェクトのリーダーを返します、行を 次に(リーダ)#は、最初の行読み取り 用の行にリーダー:#トラバースCSV各ライン xys.append([フロート(N-)のための N- で行[2]]) #のフロント二つの座標の classes.append(INT(行[2])) #3番目の列のカテゴリである DS = gdal.Open(raster_fn [0]) pixel_trans = gdal.Transformer(DS、なし、[]) #1 セットなし、画像座標に投影座標に変換する(すなわち、ピクセルオフセット) オフセット、pixel_trans.TransformPoints OK =(真、XYS) #はピクセルシフト算出 COLSを、行、Z = ZIP( *オフセット) #は、値の読み取りのための列番号とZ、バンド計算 [INT(COL)COLSを= ため COL に COLS] #は整数ランク [INT(行)=行のための行に行] データ = pb.stack_bands(raster_fn ) #二つのバンドの積層アレイ サンプル = DATA [行、colsの,:] #サンプリングはサンプル点の画素値を読み出す(バンドリストがランクに対応する全ての読み出し値を選択) 印刷(np.shape(サンプル)) #のCOLS行*行(578,4)バンドの数として CLF = tree.DecisionTreeClassifier(MAX_DEPTH = 5)#1 モデル、ツリーの深さ5 CLF = clf.fit(サンプルクラス)#フィットモデルCLFの #メモリがない十分に大きい、ラインによってリード線である場合取る #予測を= np.empty(data.shape [0:2])*行#0アレイ全体カラム #1 印刷(np.shape(予測))、#(3631、3996)は、元のデータのランク数 #範囲におけるIため( data.shape [0]): #1 予測[I ,:] = clf.predict(データ[I、:、:])#元のデータがモデルに当てはめ、行ずつ読み出す 行を、COLS、バンドスクラップ = data.shape data2dNp.reshape =(データ、(行×COLS、バンドスクラップ)) #RESHAPEバンドアレイ、拡張する帯域の数に応じ。列の数は、バンドの数であり、ドットが行数、各行対応する画素点の値である 予測= clf.predict(data2d) 予測 = np.reshape(予測、(行、COLS)) #元にRESHAPEバック 予測[NPは。 SUM(データ、 2)== 0] = 0 #元のデータポイントと0にバンドの全ての場合和、軸= 2、それのNoDataであるべきである predict_ds = pb.make_raster(DS、out_fn、予測、gdal.GDT_Byte 、0) predict_ds.FlushCache() #のフラッシュキャッシュ レベル= pb.compute_overview_levels(predict_ds.GetRasterBand(1)) #のような2 \ 4 \ 8 \ 16として出力適切なレベル()、概要作成 プリント(レベル) predict_ds.BuildOverviews (' NEAREST '、レベル) gap_ds = gdal.Open(gap_fn) 色 = gap_ds.GetRasterBand(1).GetRasterColorTable() #は、図のサンプルカラーテーブル読み取る predict_ds.GetRasterBand(1).SetRasterColorTable(色)#カラーテーブルを設定 デル DSを
3.カッパ係数、混同行列の計算
#混同行列係数およびκ統計 #は、予測画像の値にサンプル点を抽出し、係数カッパ一緒に混同行列の実際のサンプル値算出 インポートCSV インポートOS インポートnumpyのAS NP から sklearn インポートメトリック#計算混同行列 インポート skll #の計算をカッパ係数、より小さいカッパ係数、分類劣る から OSGEO インポートGDAL フォルダ = '' accuracy_fn = R&LT '' #のCSVファイル、サンプル点分類 matrix_fn R&LT = '' #のストア混同行列 prediction_fn R&LT = '' #の予測結果 OS .chdir('' ) XYS = [] #は、点格納された投影座標 クラス= [] :オープン(accuracy_fn)とFPとの リーダー = csv.reader(FP) 次に(リーダー) のための行におけるリーダー: xys.append([フロート(N-)のためのN- 行[2 ]]) classes.append(INT(行[ 2 ])) DS = gdal.Open(prediction_fn) #は、予測図開く pixel_trans = gdal.Transformer(DS、なし、[]) #は、投影座標を定義します画像変換器座標、抽出した画像座標 Qoffsets、OK = pixel_trans.TransformPoints(真、XYS) COLS、行、Z = ZIP(* Qoffsets) データ = ds.GetRasterBand(1 ).ReadAsArray() サンプル = DATA [行、colsの] #は、分類結果にサンプル点が図予想読み取る デルDSの 印刷(' :カッパ'、skll.kappa(クラス、サンプル)) #のクラス、サンプル(サンプル値、予測値)は、係数カッパ計算するために使用される ラベル = np.unique(np.concatenate((クラス、サンプル))) #のクラス\サンプルラインに加え、ユニークなすべてのカテゴリをスクリーニングは、表示されランクとして マトリックス= metrics.confusion_matrix(クラス、試料、標識)#の計算混同行列 マトリックス = np.insert(行列、0、ラベル、0) #最初の行ラベルに挿入し、行座標として マトリックス= np.insert(行列を、 0、np.insert(ラベル、0、 0)、1)#まず、出発点0に挿入され、次いでカラム座標としてラベルの最初の列に挿入 (matrix_fn、マトリックス、FMT = np.savetxt 「1.0F%」、区切り文字= 「」)