渴望被苹果砸中 渴望被苹果砸中
关注数: 4 粉丝数: 33 发帖数: 1,292 关注贴吧数: 26
IDL二次开发监督分类【转】 NVI二次开发代码共享之“监督与非监督分类” ;+ ;ENVI二次开发功能代码 ; ;Author: DYQ ;问题讨论: ; http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fhi.baidu.com%2Fdyqwrp&urlrefer=196ac605157c77139de9953a7d7bf295 ; http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fbbs.esrichina-bj.cn%2FESRI%2F%3Ffromuid%3D9806&urlrefer=c5bc9d804f22cedb7d198d0827a0b5dc ;描述: ; 分类处理,包括监督分类和非监督分类 ; ;调用方法: ; ;CAL_CLASS,inputfile,outputfile, method,... ; ;inputFile:待分类影像 ;outpurfile:分类结果; ;Method : 0--5为监督分类,6、7为非监督分类 ; ; 1-最小距离 1 ; 2-最大似然 2 ; 3-马氏距离 5 ; 4-神经元网络 ENVI_NEURAL_NET_DOIT ; 5-向量机 ENVI_SVM_DOIT ; 6-IsoData 4 ; 7-K-Means 7 ;注意:每一种算法需要使用的参数说明可参考ENVI帮助文档 ; PRO CAL_CLASS,inputfile,outputfile, method,$ ;感兴趣区文件 roifile = roifile,$ ;平行六面体分类算法可选参数 STDV = stdv, $ STD_MULT =STD_MULT,$ ;神经元网络分类算法参数 theta = theta, $ eta = eta, $ alpha = alpha, $ act_type = act_type, $ rms_crit = rms_crit, $ num_layers = num_layers, $ num_sweeps = num_sweeps, $ ;向量机 thresh = thresh, $ penalty = penalty, $ kernel_type = kernel_type, $ kernel_degree = kernel_degree, $ kernel_bias = kernel_bias ,$ ;K-Means 算法可选参数 ITERATIONS = ITERATIONS, $ NUM_CLASSES = NUM_CLASSES , $ ;ISO算法参数 CHANGE_THRESH = CHANGE_THRESH, $ ISO_MERGE_DIST = ISO_MERGE_DIST, $ ISO_MERGE_PAIRS = ISO_MERGE_PAIRS, $ ISO_MIN_PIXELS = ISO_MIN_PIXELS, $ ISO_SPLIT_SMULT = ISO_SPLIT_SMULT, $ ISO_SPLIT_STD = ISO_SPLIT_STD, $ MIN_CLASSES = MIN_CLASSES COMPILE_OPT idl2 CATCH, Error_status errorshow = 'Sorry to see the error,'+ $ ' please send the error Information to "[email protected]"' IF Error_status NE 0 THEN BEGIN tmp = DIALOG_MESSAGE(errorshow+STRING(13b)+$ !ERROR_STATE.MSG,/error,title = '错误提示!') return ENDIF ;输入数据预处理 ENVI_OPEN_FILE, inputfile, r_fid=fid IF (fid EQ -1) THEN BEGIN RETURN ENDIF ;获取文件信息 ENVI_FILE_QUERY, fid, dims=dims, nb=nb pos = LINDGEN(nb) out_name = outputfile CASE method OF ;-IsoData 4 6: BEGIN IF ~KEYWORD_SET(CHANGE_THRESH) THEN CHANGE_THRESH = .05 IF ~KEYWORD_SET(NUM_CLASSES) THEN NUM_CLASSES = 10 IF ~KEYWORD_SET(ITERATIONS) THEN ITERATIONS = 1 IF ~KEYWORD_SET(ISO_MERGE_DIST) THEN ISO_MERGE_DIST = 1 IF ~KEYWORD_SET(ISO_MERGE_PAIRS) THEN ISO_MERGE_PAIRS = 2 IF ~KEYWORD_SET(ISO_MIN_PIXELS) THEN ISO_MIN_PIXELS = 1 IF ~KEYWORD_SET(ISO_SPLIT_SMULT) THEN ISO_SPLIT_SMULT = 1 IF ~KEYWORD_SET(ISO_SPLIT_STD) THEN ISO_SPLIT_STD = 1 IF ~KEYWORD_SET(MIN_CLASSES) THEN MIN_CLASSES = 5 out_bname = 'IsoData' ENVI_DOIT, 'class_doit', fid=fid, pos=pos, dims=dims, $ out_bname=out_bname, out_name=out_name, method=4, $ r_fid=r_fid, $ NUM_CLASSES = NUM_CLASSES, $ ITERATIONS = ITERATIONS, $ in_memory=0, $ CHANGE_THRESH = CHANGE_THRESH, $ ISO_MERGE_DIST = ISO_MERGE_DIST, $ ISO_MERGE_PAIRS = ISO_MERGE_PAIRS, $ ISO_MIN_PIXELS = ISO_MIN_PIXELS, $ ISO_SPLIT_SMULT = ISO_SPLIT_SMULT, $ ISO_SPLIT_STD = ISO_SPLIT_STD, $ MIN_CLASSES = MIN_CLASSES END ;-K-Means 7 7: BEGIN IF ~KEYWORD_SET(NUM_CLASSES) THEN NUM_CLASSES = 5 IF ~KEYWORD_SET(CHANGE_THRESH) THEN CHANGE_THRESH = .5 IF ~KEYWORD_SET(ITERATIONS) THEN ITERATIONS = 1 out_bname = 'K-Means' thresh=REPLICATE(0.05,num_classes) ENVI_DOIT, 'class_doit', fid=fid, pos=pos, dims=dims, $ out_bname=out_bname, out_name=out_name, method=7, $ r_fid=r_fid, $ lookup = BYTARR(3,num_classes+1), $ NUM_CLASSES = NUM_CLASSES, $ in_memory=0, CHANGE_THRESH=CHANGE_THRESH,$ ITERATIONS = ITERATIONS END ;-平行六面体 0 0: BEGIN ENVI_RESTORE_ROIS, roifile roi_ids = ENVI_GET_ROI_IDS(fid=fid, $ roi_colors=roi_colors, roi_names=class_names) class_names = ['Unclassified', class_names] num_classes = N_ELEMENTS(roi_ids) ; Set the unclassified class to black and use roi colors lookup = BYTARR(3,num_classes+1) lookup[0,1] = roi_colors ; 计算类ROI的基本统计信息 mean = FLTARR(N_ELEMENTS(pos), num_classes) stdv = FLTARR(N_ELEMENTS(pos), num_classes) cov = FLTARR(N_ELEMENTS(pos),N_ELEMENTS(pos),num_classes) FOR j=0, num_classes-1 DO BEGIN ; roi_dims=[ENVI_GET_ROI_DIMS_PTR(roi_ids[j]),0,0,0,0] ENVI_DOIT, 'envi_stats_doit', fid=fid, pos=pos, $ dims=roi_dims, comp_flag=4, mean=c_mean, $ stdv=c_stdv, cov=c_cov MEAN[0,j] = c_mean stdv[0,j] = c_stdv cov[0,0,j] = c_cov ENDFOR ; thresh=REPLICATE(0.05,num_classes) out_bname = 'parallelepiped' ENVI_DOIT, 'class_doit', fid=fid, pos=pos, dims=dims, $ out_bname=out_bname, out_name=out_name, method=0, $ mean=mean, stdv=stdv, std_mult=st_mult, $ lookup=lookup, class_names=class_names, $ in_memory=0;, thresh=thresh END ;-最小距离 1 1: BEGIN ENVI_RESTORE_ROIS, roifile roi_ids = ENVI_GET_ROI_IDS(fid=fid, $ roi_colors=roi_colors, roi_names=class_names) class_names = ['Unclassified', class_names] num_classes = N_ELEMENTS(roi_ids) ; Set the unclassified class to black and use roi colors lookup = BYTARR(3,num_classes+1) lookup[0,1] = roi_colors ; 计算类ROI的基本统计信息 ; mean = FLTARR(N_ELEMENTS(pos), num_classes) stdv = FLTARR(N_ELEMENTS(pos), num_classes) cov = FLTARR(N_ELEMENTS(pos),N_ELEMENTS(pos),num_classes) FOR j=0, num_classes-1 DO BEGIN ; roi_dims=[ENVI_GET_ROI_DIMS_PTR(roi_ids[j]),0,0,0,0] ENVI_DOIT, 'envi_stats_doit', fid=fid, pos=pos, $ dims=roi_dims, comp_flag=4, mean=c_mean, $ stdv=c_stdv, cov=c_cov MEAN[0,j] = c_mean stdv[0,j] = c_stdv cov[0,0,j] = c_cov ENDFOR ; thresh=REPLICATE(0.05,num_classes) out_bname = 'MinimumDistance' ENVI_DOIT, 'class_doit', fid=fid, pos=pos, dims=dims, $ out_bname=out_bname, out_name=out_name, method=1, $ mean=mean, stdv=stdv, std_mult=st_mult, $ lookup=lookup, class_names=class_names, $ in_memory=0 END ;-最大似然 2 2: BEGIN ENVI_RESTORE_ROIS, roifile roi_ids = ENVI_GET_ROI_IDS(fid=fid, $ roi_colors=roi_colors, roi_names=class_names) class_names = ['Unclassified', class_names] num_classes = N_ELEMENTS(roi_ids) ; Set the unclassified class to black and use roi colors lookup = BYTARR(3,num_classes+1) lookup[0,1] = roi_colors ; 计算类ROI的基本统计信息 ; mean = FLTARR(N_ELEMENTS(pos), num_classes) stdv = FLTARR(N_ELEMENTS(pos), num_classes) cov = FLTARR(N_ELEMENTS(pos),N_ELEMENTS(pos),num_classes) FOR j=0, num_classes-1 DO BEGIN ; roi_dims=[ENVI_GET_ROI_DIMS_PTR(roi_ids[j]),0,0,0,0] ENVI_DOIT, 'envi_stats_doit', fid=fid, pos=pos, $ dims=roi_dims, comp_flag=4, mean=c_mean, $ stdv=c_stdv, cov=c_cov MEAN[0,j] = c_mean stdv[0,j] = c_stdv cov[0,0,j] = c_cov ENDFOR ; thresh=REPLICATE(0.05,num_classes) out_bname = 'MaximumLikelihood' ENVI_DOIT, 'class_doit', fid=fid, pos=pos, dims=dims, $ out_bname=out_bname, out_name=out_name, method=2, $ mean=mean, stdv=stdv, std_mult=st_mult, $ lookup=lookup, class_names=class_names, $ cov = cov,$ in_memory=0 END ;-马氏距离 5 3: BEGIN ENVI_RESTORE_ROIS, roifile roi_ids = ENVI_GET_ROI_IDS(fid=fid, $ roi_colors=roi_colors, roi_names=class_names) class_names = ['Unclassified', class_names] num_classes = N_ELEMENTS(roi_ids) ; Set the unclassified class to black and use roi colors lookup = BYTARR(3,num_classes+1) lookup[0,1] = roi_colors ; 计算类ROI的基本统计信息 ; mean = FLTARR(N_ELEMENTS(pos), num_classes) stdv = FLTARR(N_ELEMENTS(pos), num_classes) cov = FLTARR(N_ELEMENTS(pos),N_ELEMENTS(pos),num_classes) FOR j=0, num_classes-1 DO BEGIN ; roi_dims=[ENVI_GET_ROI_DIMS_PTR(roi_ids[j]),0,0,0,0] ENVI_DOIT, 'envi_stats_doit', fid=fid, pos=pos, $ dims=roi_dims, comp_flag=4, mean=c_mean, $ stdv=c_stdv, cov=c_cov MEAN[0,j] = c_mean stdv[0,j] = c_stdv cov[0,0,j] = c_cov ENDFOR ; thresh=REPLICATE(0.05,num_classes) out_bname = 'Mahalanobis' ENVI_GET_ROI_INFORMATION, roi_ids,nPts = nPts ENVI_DOIT, 'class_doit', fid=fid, pos=pos, dims=dims, $ out_bname=out_bname, out_name=out_name, method=5, $ mean=mean, stdv=stdv, std_mult=st_mult, $ lookup=lookup, class_names=class_names, $ cov = cov,NPTS = nPts, $ in_memory=0 END ;-神经元网络 ENVI_NEURAL_NET_DOIT 4: BEGIN IF ~KEYWORD_SET(theta) THEN theta = .9 IF ~KEYWORD_SET(eta) THEN eta = .2 IF ~KEYWORD_SET(alpha) THEN alpha = .9 IF ~KEYWORD_SET(act_type) THEN act_type = 0 IF ~KEYWORD_SET(rms_crit) THEN rms_crit = .1 IF ~KEYWORD_SET(num_layers) THEN num_layers = 3 IF ~KEYWORD_SET(num_sweeps) THEN num_sweeps = 10 ENVI_RESTORE_ROIS, roifile roi_ids = ENVI_GET_ROI_IDS(fid=fid, $ roi_colors=lookup, roi_names=class_names) ; Set the classification variables ; num_classes = N_ELEMENTS(roi_ids) class_names = ['Unclassified', class_names] lookup = REFORM([0,0,0, $ REFORM(lookup,3*num_classes)],3,num_classes+1) ; ; Call the doit ; ENVI_DOIT, 'envi_neural_net_doit', $ fid=fid, pos=pos, dims=dims, $ out_name=out_name, rule_out_name='', $ theta=theta, eta=eta, alpha=alpha, $ num_classes=num_classes, num_sweeps=num_sweeps, $ num_layers=num_layers, act_type=act_type, $ rms_crit=rms_crit, roi_ids=roi_ids, /train, $ class_names=class_names, lookup=lookup END ;-向量机 ENVI_SVM_DOIT 5: BEGIN IF ~KEYWORD_SET(thresh) THEN thresh = .5 IF ~KEYWORD_SET(penalty) THEN penalty=75 IF ~KEYWORD_SET(kernel_type) THEN kernel_type=1 IF ~KEYWORD_SET(kernel_degree) THEN kernel_degree=3 IF ~KEYWORD_SET(kernel_bias) THEN kernel_bias = 2. ENVI_RESTORE_ROIS, roifile roi_ids = ENVI_GET_ROI_IDS(fid=fid) ; Call the svm classification doit routine envi_doit, 'envi_svm_doit', $ fid=fid, pos=pos, dims=dims, $ out_name=out_name, $ roi_ids=roi_ids, thresh=thresh, $ penalty=penalty, kernel_type= kernel_type, $ kernel_degree=kernel_degree, kernel_bias=kernel_bias END ELSE: ENDCASE END
IDL二次开发监督分类【转】 NVI二次开发代码共享之“监督与非监督分类” ;+ ;ENVI二次开发功能代码 ; ;Author: DYQ ;问题讨论: ; http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fhi.baidu.com%2Fdyqwrp&urlrefer=196ac605157c77139de9953a7d7bf295 ; http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fbbs.esrichina-bj.cn%2FESRI%2F%3Ffromuid%3D9806&urlrefer=c5bc9d804f22cedb7d198d0827a0b5dc ;描述: ; 分类处理,包括监督分类和非监督分类 ; ;调用方法: ; ;CAL_CLASS,inputfile,outputfile, method,... ; ;inputFile:待分类影像 ;outpurfile:分类结果; ;Method : 0--5为监督分类,6、7为非监督分类 ; ; 1-最小距离 1 ; 2-最大似然 2 ; 3-马氏距离 5 ; 4-神经元网络 ENVI_NEURAL_NET_DOIT ; 5-向量机 ENVI_SVM_DOIT ; 6-IsoData 4 ; 7-K-Means 7 ;注意:每一种算法需要使用的参数说明可参考ENVI帮助文档 ; PRO CAL_CLASS,inputfile,outputfile, method,$ ;感兴趣区文件 roifile = roifile,$ ;平行六面体分类算法可选参数 STDV = stdv, $ STD_MULT =STD_MULT,$ ;神经元网络分类算法参数 theta = theta, $ eta = eta, $ alpha = alpha, $ act_type = act_type, $ rms_crit = rms_crit, $ num_layers = num_layers, $ num_sweeps = num_sweeps, $ ;向量机 thresh = thresh, $ penalty = penalty, $ kernel_type = kernel_type, $ kernel_degree = kernel_degree, $ kernel_bias = kernel_bias ,$ ;K-Means 算法可选参数 ITERATIONS = ITERATIONS, $ NUM_CLASSES = NUM_CLASSES , $ ;ISO算法参数 CHANGE_THRESH = CHANGE_THRESH, $ ISO_MERGE_DIST = ISO_MERGE_DIST, $ ISO_MERGE_PAIRS = ISO_MERGE_PAIRS, $ ISO_MIN_PIXELS = ISO_MIN_PIXELS, $ ISO_SPLIT_SMULT = ISO_SPLIT_SMULT, $ ISO_SPLIT_STD = ISO_SPLIT_STD, $ MIN_CLASSES = MIN_CLASSES COMPILE_OPT idl2 CATCH, Error_status errorshow = 'Sorry to see the error,'+ $ ' please send the error Information to "[email protected]"' IF Error_status NE 0 THEN BEGIN tmp = DIALOG_MESSAGE(errorshow+STRING(13b)+$ !ERROR_STATE.MSG,/error,title = '错误提示!') return ENDIF ;输入数据预处理 ENVI_OPEN_FILE, inputfile, r_fid=fid IF (fid EQ -1) THEN BEGIN RETURN ENDIF ;获取文件信息 ENVI_FILE_QUERY, fid, dims=dims, nb=nb pos = LINDGEN(nb) out_name = outputfile CASE method OF ;-IsoData 4 6: BEGIN IF ~KEYWORD_SET(CHANGE_THRESH) THEN CHANGE_THRESH = .05 IF ~KEYWORD_SET(NUM_CLASSES) THEN NUM_CLASSES = 10 IF ~KEYWORD_SET(ITERATIONS) THEN ITERATIONS = 1 IF ~KEYWORD_SET(ISO_MERGE_DIST) THEN ISO_MERGE_DIST = 1 IF ~KEYWORD_SET(ISO_MERGE_PAIRS) THEN ISO_MERGE_PAIRS = 2 IF ~KEYWORD_SET(ISO_MIN_PIXELS) THEN ISO_MIN_PIXELS = 1 IF ~KEYWORD_SET(ISO_SPLIT_SMULT) THEN ISO_SPLIT_SMULT = 1 IF ~KEYWORD_SET(ISO_SPLIT_STD) THEN ISO_SPLIT_STD = 1 IF ~KEYWORD_SET(MIN_CLASSES) THEN MIN_CLASSES = 5 out_bname = 'IsoData' ENVI_DOIT, 'class_doit', fid=fid, pos=pos, dims=dims, $ out_bname=out_bname, out_name=out_name, method=4, $ r_fid=r_fid, $ NUM_CLASSES = NUM_CLASSES, $ ITERATIONS = ITERATIONS, $ in_memory=0, $ CHANGE_THRESH = CHANGE_THRESH, $ ISO_MERGE_DIST = ISO_MERGE_DIST, $ ISO_MERGE_PAIRS = ISO_MERGE_PAIRS, $ ISO_MIN_PIXELS = ISO_MIN_PIXELS, $ ISO_SPLIT_SMULT = ISO_SPLIT_SMULT, $ ISO_SPLIT_STD = ISO_SPLIT_STD, $ MIN_CLASSES = MIN_CLASSES END ;-K-Means 7 7: BEGIN IF ~KEYWORD_SET(NUM_CLASSES) THEN NUM_CLASSES = 5 IF ~KEYWORD_SET(CHANGE_THRESH) THEN CHANGE_THRESH = .5 IF ~KEYWORD_SET(ITERATIONS) THEN ITERATIONS = 1 out_bname = 'K-Means' thresh=REPLICATE(0.05,num_classes) ENVI_DOIT, 'class_doit', fid=fid, pos=pos, dims=dims, $ out_bname=out_bname, out_name=out_name, method=7, $ r_fid=r_fid, $ lookup = BYTARR(3,num_classes+1), $ NUM_CLASSES = NUM_CLASSES, $ in_memory=0, CHANGE_THRESH=CHANGE_THRESH,$ ITERATIONS = ITERATIONS END ;-平行六面体 0 0: BEGIN ENVI_RESTORE_ROIS, roifile roi_ids = ENVI_GET_ROI_IDS(fid=fid, $ roi_colors=roi_colors, roi_names=class_names) class_names = ['Unclassified', class_names] num_classes = N_ELEMENTS(roi_ids) ; Set the unclassified class to black and use roi colors lookup = BYTARR(3,num_classes+1) lookup[0,1] = roi_colors ; 计算类ROI的基本统计信息 mean = FLTARR(N_ELEMENTS(pos), num_classes) stdv = FLTARR(N_ELEMENTS(pos), num_classes) cov = FLTARR(N_ELEMENTS(pos),N_ELEMENTS(pos),num_classes) FOR j=0, num_classes-1 DO BEGIN ; roi_dims=[ENVI_GET_ROI_DIMS_PTR(roi_ids[j]),0,0,0,0] ENVI_DOIT, 'envi_stats_doit', fid=fid, pos=pos, $ dims=roi_dims, comp_flag=4, mean=c_mean, $ stdv=c_stdv, cov=c_cov MEAN[0,j] = c_mean stdv[0,j] = c_stdv cov[0,0,j] = c_cov ENDFOR ; thresh=REPLICATE(0.05,num_classes) out_bname = 'parallelepiped' ENVI_DOIT, 'class_doit', fid=fid, pos=pos, dims=dims, $ out_bname=out_bname, out_name=out_name, method=0, $ mean=mean, stdv=stdv, std_mult=st_mult, $ lookup=lookup, class_names=class_names, $ in_memory=0;, thresh=thresh END ;-最小距离 1 1: BEGIN ENVI_RESTORE_ROIS, roifile roi_ids = ENVI_GET_ROI_IDS(fid=fid, $ roi_colors=roi_colors, roi_names=class_names) class_names = ['Unclassified', class_names] num_classes = N_ELEMENTS(roi_ids) ; Set the unclassified class to black and use roi colors lookup = BYTARR(3,num_classes+1) lookup[0,1] = roi_colors ; 计算类ROI的基本统计信息 ; mean = FLTARR(N_ELEMENTS(pos), num_classes) stdv = FLTARR(N_ELEMENTS(pos), num_classes) cov = FLTARR(N_ELEMENTS(pos),N_ELEMENTS(pos),num_classes) FOR j=0, num_classes-1 DO BEGIN ; roi_dims=[ENVI_GET_ROI_DIMS_PTR(roi_ids[j]),0,0,0,0] ENVI_DOIT, 'envi_stats_doit', fid=fid, pos=pos, $ dims=roi_dims, comp_flag=4, mean=c_mean, $ stdv=c_stdv, cov=c_cov MEAN[0,j] = c_mean stdv[0,j] = c_stdv cov[0,0,j] = c_cov ENDFOR ; thresh=REPLICATE(0.05,num_classes) out_bname = 'MinimumDistance' ENVI_DOIT, 'class_doit', fid=fid, pos=pos, dims=dims, $ out_bname=out_bname, out_name=out_name, method=1, $ mean=mean, stdv=stdv, std_mult=st_mult, $ lookup=lookup, class_names=class_names, $ in_memory=0 END ;-最大似然 2 2: BEGIN ENVI_RESTORE_ROIS, roifile roi_ids = ENVI_GET_ROI_IDS(fid=fid, $ roi_colors=roi_colors, roi_names=class_names) class_names = ['Unclassified', class_names] num_classes = N_ELEMENTS(roi_ids) ; Set the unclassified class to black and use roi colors lookup = BYTARR(3,num_classes+1) lookup[0,1] = roi_colors ; 计算类ROI的基本统计信息 ; mean = FLTARR(N_ELEMENTS(pos), num_classes) stdv = FLTARR(N_ELEMENTS(pos), num_classes) cov = FLTARR(N_ELEMENTS(pos),N_ELEMENTS(pos),num_classes) FOR j=0, num_classes-1 DO BEGIN ; roi_dims=[ENVI_GET_ROI_DIMS_PTR(roi_ids[j]),0,0,0,0] ENVI_DOIT, 'envi_stats_doit', fid=fid, pos=pos, $ dims=roi_dims, comp_flag=4, mean=c_mean, $ stdv=c_stdv, cov=c_cov MEAN[0,j] = c_mean stdv[0,j] = c_stdv cov[0,0,j] = c_cov ENDFOR ; thresh=REPLICATE(0.05,num_classes) out_bname = 'MaximumLikelihood' ENVI_DOIT, 'class_doit', fid=fid, pos=pos, dims=dims, $ out_bname=out_bname, out_name=out_name, method=2, $ mean=mean, stdv=stdv, std_mult=st_mult, $ lookup=lookup, class_names=class_names, $ cov = cov,$ in_memory=0 END ;-马氏距离 5 3: BEGIN ENVI_RESTORE_ROIS, roifile roi_ids = ENVI_GET_ROI_IDS(fid=fid, $ roi_colors=roi_colors, roi_names=class_names) class_names = ['Unclassified', class_names] num_classes = N_ELEMENTS(roi_ids) ; Set the unclassified class to black and use roi colors lookup = BYTARR(3,num_classes+1) lookup[0,1] = roi_colors ; 计算类ROI的基本统计信息 ; mean = FLTARR(N_ELEMENTS(pos), num_classes) stdv = FLTARR(N_ELEMENTS(pos), num_classes) cov = FLTARR(N_ELEMENTS(pos),N_ELEMENTS(pos),num_classes) FOR j=0, num_classes-1 DO BEGIN ; roi_dims=[ENVI_GET_ROI_DIMS_PTR(roi_ids[j]),0,0,0,0] ENVI_DOIT, 'envi_stats_doit', fid=fid, pos=pos, $ dims=roi_dims, comp_flag=4, mean=c_mean, $ stdv=c_stdv, cov=c_cov MEAN[0,j] = c_mean stdv[0,j] = c_stdv cov[0,0,j] = c_cov ENDFOR ; thresh=REPLICATE(0.05,num_classes) out_bname = 'Mahalanobis' ENVI_GET_ROI_INFORMATION, roi_ids,nPts = nPts ENVI_DOIT, 'class_doit', fid=fid, pos=pos, dims=dims, $ out_bname=out_bname, out_name=out_name, method=5, $ mean=mean, stdv=stdv, std_mult=st_mult, $ lookup=lookup, class_names=class_names, $ cov = cov,NPTS = nPts, $ in_memory=0 END ;-神经元网络 ENVI_NEURAL_NET_DOIT 4: BEGIN IF ~KEYWORD_SET(theta) THEN theta = .9 IF ~KEYWORD_SET(eta) THEN eta = .2 IF ~KEYWORD_SET(alpha) THEN alpha = .9 IF ~KEYWORD_SET(act_type) THEN act_type = 0 IF ~KEYWORD_SET(rms_crit) THEN rms_crit = .1 IF ~KEYWORD_SET(num_layers) THEN num_layers = 3 IF ~KEYWORD_SET(num_sweeps) THEN num_sweeps = 10 ENVI_RESTORE_ROIS, roifile roi_ids = ENVI_GET_ROI_IDS(fid=fid, $ roi_colors=lookup, roi_names=class_names) ; Set the classification variables ; num_classes = N_ELEMENTS(roi_ids) class_names = ['Unclassified', class_names] lookup = REFORM([0,0,0, $ REFORM(lookup,3*num_classes)],3,num_classes+1) ; ; Call the doit ; ENVI_DOIT, 'envi_neural_net_doit', $ fid=fid, pos=pos, dims=dims, $ out_name=out_name, rule_out_name='', $ theta=theta, eta=eta, alpha=alpha, $ num_classes=num_classes, num_sweeps=num_sweeps, $ num_layers=num_layers, act_type=act_type, $ rms_crit=rms_crit, roi_ids=roi_ids, /train, $ class_names=class_names, lookup=lookup END ;-向量机 ENVI_SVM_DOIT 5: BEGIN IF ~KEYWORD_SET(thresh) THEN thresh = .5 IF ~KEYWORD_SET(penalty) THEN penalty=75 IF ~KEYWORD_SET(kernel_type) THEN kernel_type=1 IF ~KEYWORD_SET(kernel_degree) THEN kernel_degree=3 IF ~KEYWORD_SET(kernel_bias) THEN kernel_bias = 2. ENVI_RESTORE_ROIS, roifile roi_ids = ENVI_GET_ROI_IDS(fid=fid) ; Call the svm classification doit routine envi_doit, 'envi_svm_doit', $ fid=fid, pos=pos, dims=dims, $ out_name=out_name, $ roi_ids=roi_ids, thresh=thresh, $ penalty=penalty, kernel_type= kernel_type, $ kernel_degree=kernel_degree, kernel_bias=kernel_bias END ELSE: ENDCASE END
ENVI/IDL与ArcGIS Engine一体化开发的实现 [p=30, 2, left]ENVI (The Environment for Visualizing Images)和IDL(Interactive Data Language)是美国ITT VIS公司的旗舰产品,是由遥感领域的科学家采用IDL开发的一套功能强大的遥感图像处理软件。其软件处理技术覆盖了图像数据的输入/输出、定标、几何校正、正射校正、图像融合、镶嵌、裁剪、图像增强、图像解译、图像分类、基于知识的决策树分类、面向对象图像分类、动态监测、矢量处理、DEM提取及地形分析、雷达数据处理、制图、三维场景构建、与GIS的整合,提供了专业可靠的波谱分析工具和高光谱分析工具。ENVI软件几乎可支持所有的UNIX系统,Mac OSX,Linux,以及PC机的WindowsXP/ Vista/7/Server2008等操作系统。 [/p][p=30, 2, left]ENVI具有丰富的函数接口API,完整的示例代码帮助文档。ArcGIS Engine是一套完备的嵌入式GIS 组件库和工具库,即是一个用于开发新应用程序的二次开发功能组件包。开发者可以选择集成开发环境来建立 ArcGIS Engine 应用程序,而同时开发环境又可以集成ENVI/IDL的功能,这样使得开发一个遥感与GIS一体化的程序变得非常的容易。下面以ArcGISEngine10.0和ENVI4.8为例,开发一个一体化的示例程序。 [/p]1.新建项目 [p=30, 2, left]启动Visual Studio2008,项目类型选择VisualC#-ArcGIS-Extending ArcObjects,模版选择MapControlApplication,解决方案设置为ArcGISEngineUsingENVI(图1.1)。 [/p][p=30, 2, left]
1 下一页