ENVI5.4 新增图像分类介绍

ENVI5.4 新增图像分类介绍
ENVI5.4 新增图像分类介绍
ENVI5.4 新增图像分类介绍
ENVI5.4 新增图像分类介绍
ENVI5.4 新增图像分类介绍
PRO ApplySoftmaxTrainedClassifier
COMPILE_OPT IDL2
e = ENVI()

;获取数据所在路径,与pro源码同路径的data文件夹内
dataPath = FILE_DIRNAME(ROUTINE_FILEPATH())+$
PATH_SEP()+‘data’+PATH_SEP()

;设置输出路径,保存了分类结果和分类器
outPath = FILE_DIRNAME(ROUTINE_FILEPATH())+$
PATH_SEP()+‘output’+PATH_SEP()

;打开第2景数据,使用训练好的分类器进行分类
file = dataPath+‘AttributeImage2.dat’
raster = e.OpenRaster(file)

;导入之前保存的gain和offset变量
gainoffsetFile = outPath+‘gain_offset.txt’
OPENR, lun, gainoffsetFile, /get_lun
tmpStrings = STRARR(2)
READF, lun, tmpStrings
FREE_LUN, lun
gain = DOUBLE(STRSPLIT(tmpstrings[0], ’ ', /extract))
offset = DOUBLE(STRSPLIT(tmpstrings[1], ’ ', /extract))

;对栅格数据进行归一化处理
normalizedRaster = ENVIGainOffsetRaster(raster, gain, offset)

;获取训练好的分类器路径,并将其加载进来
trainedClassifierURI = outPath+‘TrainedSoftmaxClassifier.epo’
trainedClassifier = ENVIRestoreObject(trainedClassifierURI)

;利用此分类器对新的数据进行分类
outClassFile = outPath+‘AttributeImage2_SoftmaxClassifier_class.dat’
FILE_DELETE, outClassFile, /quiet, /allow_nonexistent
classRaster = ENVIClassifyRaster(normalizedRaster, trainedClassifier, $
OUTPUT_FILENAME = outClassFile)

;评估分类精度–start-----------------------------------------------
;打开训练样本
ROIfile = dataPath + ‘TrainingDataROIs.xml’
rois = e.OpenROI(ROIfile)

;精度评价
confusionMatrix = ENVICalculateConfusionMatrixFromRaster( $
classRaster, rois)

;打印混淆矩阵
Print, confusionMatrix.Confusion_Matrix

;获取类别数和类别名
numClasses = classRaster.Metadata[‘CLASSES’]
classNames = classRaster.Metadata[‘CLASS NAMES’]

;打印各种精度评价结果
columnTotals = confusionMatrix.ColumnTotals()
FOR i=0, (numClasses)-1 DO $
Print, 'Ground truth total for ‘, $
classNames[i],’: ', $
columnTotals[i]

rowTotals = confusionMatrix.RowTotals()
FOR i=0, (numClasses)-1 DO $
Print, 'Predicted total for ‘, $
classNames[i],’: ', $
rowTotals[i]

accuracy = confusionMatrix.Accuracy()
Print, 'Overall accuracy: ', accuracy
kappa = confusionMatrix.KappaCoefficient()
Print, 'Kappa coefficient: ', kappa
commissionError = confusionMatrix.CommissionError()
Print, 'Error of commission: ', commissionError
omissionError = confusionMatrix.OmissionError()
Print, 'Error of omission: ', omissionError
F1 = confusionMatrix.F1()
Print, 'F1 value: ', F1
precision = confusionMatrix.Precision()
Print, 'Precision: ', precision
producerAccuracy = confusionMatrix.ProducerAccuracy()
Print, 'Producer accuracy: ', producerAccuracy
recall = confusionMatrix.Recall()
Print, 'Recall: ', recall
userAccuracy = confusionMatrix.UserAccuracy()
Print, 'User accuracy: ', userAccuracy
;评估分类精度–end-------------------------------------------------

;显示结果
view = e.GetView()
layer = view.CreateLayer(raster)
layer2 = view.CreateLayer(classRaster)
view.Zoom, /FULL_EXTENT
END

ENVI5.4 新增图像分类介绍
ENVI5.4 新增图像分类介绍

来源:esri