GDALノート--chapter12

リモートセンシング画像分類(教師付き分類、教師なし分類)

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%、区切り文字= 

 

おすすめ

転載: www.cnblogs.com/ljwgis/p/12668830.html
おすすめ