IDL监督分类——极大似然估计

代码为HPU遥感专业作业,仅供参考。

7c5b4ed59da84474b94e74631692292a.png

 需要解释一下,X为单个像素六个波段的灰度值数组,mi是采集的样本六个波段中每一个波段的平均灰度值,eq?%5Csum是协方差阵,eq?%5Csum_%7Bi%7D%5E%7B-1%7D是协方差阵的逆,eq?%5Cleft%20%7C%20%5Csum_%7Bi%7D%5E%7B%7D%20%5Cright%20%7C是协方差阵的模。

具体实现代码如下:

Compile_opt idl2
    ENVI,/restore_base_save_files
    ENVI_BATCH_INIT
    
    tm_file ='E:\yaoganhomework\ch08+Classification_tm\Classification_tm\tm_data\LT51240362007139_JZ.img'
        
    ENVI_OPEN_FILE, tm_file, r_fid=fid
    ENVI_FILE_QUERY, fid, dims=dims, ns=ns, nl=nl, nb=nb
    
    tm_data = intarr(ns,nl,nb)
    
    tm_data[*,*,0] = envi_get_data(fid=fid, dims=dims, pos=0)
    tm_data[*,*,1] = envi_get_data(fid=fid, dims=dims, pos=1)
    tm_data[*,*,2] = envi_get_data(fid=fid, dims=dims, pos=2)
    tm_data[*,*,3] = envi_get_data(fid=fid, dims=dims, pos=3)
    tm_data[*,*,4] = envi_get_data(fid=fid, dims=dims, pos=4)
    tm_data[*,*,5] = envi_get_data(fid=fid, dims=dims, pos=5)
    
    map_info = envi_get_map_info(fid=fid)
          
    dims=size(tm_data[*,*,0], /DIMENSIONS)

class_data=intarr(512,512,3)

cov_crop=[[3.846530612,1.415510204,1.928163265,3.993469388,4.413877551,1.16],$
          [1.415510204,1.469795918,1.680816327,2.423673469,3.172653061,1.283265306],$
          [1.928163265,1.680816327,2.45877551,3.095510204,4.59755102,1.711020408],$
          [3.993469388,2.423673469,3.095510204,12.42612245,9.560816327,3.580408163],$
          [4.413877551,3.172653061,4.59755102,9.560816327,11.88938776,4.392653061],$
          [1.16,1.283265306,1.711020408,3.580408163,4.392653061,2.667755102]]
          
cov_forest=[[8.704081633,3.946938776,5.746938776,0.842857143,8.967346939,6.395918367],$
            [3.946938776,2.434285714,3.353469388,0.293061224,5.103673469,3.760816327],$
            [5.746938776,3.353469388,5.348571429,-1.186938776,7.173877551,5.537142857],$
            [0.842857143,0.293061224,-1.186938776,34.62897959,10.22367347,-0.196734694],$
            [8.967346939,5.103673469,7.173877551,10.22367347,19.85469388,9.634285714],$
            [6.395918367,3.760816327,5.537142857,-0.196734694,9.634285714,8.026122449]]
            
cov_urban=[[32.39020408,15.44,21.72734694,12.6122449,26.56,25.11102041],$
           [15.44,19.41387755,28.21061224,19.12244898,38.62693878,31.30040816],$
           [21.72734694,28.21061224,42.77714286,27.89795918,56.42204082,46.19755102],$
           [12.6122449,19.12244898,27.89795918,36.97959184,62.08163265,41.06122449],$
           [26.56,38.62693878,56.42204082,62.08163265,141.6995918,94.65877551],$
           [25.11102041,31.30040816,46.19755102,41.06122449,94.65877551,70.36285714]]

cov_water=[[4.865714286,2.68,2.080816327,-0.034285714,0.219591837,0.758367347],$
           [2.68,2.667755102,2.105306122,-0.148571429,0.672653061,0.864489796],$
           [2.080816327,2.105306122,2.662857143,1.064489796,2.038367347,1.226122449],$
           [-0.034285714,-0.148571429,1.064489796,5.198367347,6.121632653,2.742040816],$
           [0.219591837,0.672653061,2.038367347,6.121632653,8.760816327,3.601632653],$
           [0.758367347,0.864489796,1.226122449,2.742040816,3.601632653,2.687346939]]
           
cov_barren=[[26.08530612,12.47346939,12.31959184,-6.809795918,-12.78979592,-2.391428571],$
            [12.47346939,7.387755102,8.497959184,-2.085714286,-2.469387755,0.506122449],$
            [12.31959184,8.497959184,16.58,2.486530612,9.757142857,5.435510204],$
            [-6.809795918,-2.085714286,2.486530612,24.85061224,24.55510204,6.666938776],$
            [-12.78979592,-2.469387755,9.757142857,24.55510204,62.62244898,27.74897959],$
            [-2.391428571,0.506122449,5.435510204,6.666938776,27.74897959,16.82]]
            
mo_crop=determ(cov_crop)
mo_forest=determ(cov_forest)
mo_urban=determ(cov_urban)
mo_water=determ(cov_water)
mo_barren=DETERM(cov_barren)

ni_crop=MATRIX_POWER(cov_crop,-1)
ni_forest=MATRIX_POWER(cov_forest,-1)
ni_urban=MATRIX_POWER(cov_urban,-1)
ni_water=MATRIX_POWER(cov_water,-1)
ni_barren=MATRIX_POWER(cov_barren,-1)

mi=[[83.52,37.14,34.52,82.32,54.22,22.16],$
    [83.9,38.88,35.72,84.06,79.68,32.88],$
    [117.24,57.12,66.28,65,94.88,62.38],$
    [110.54,54.84,50.52,28.84,24.12,13.92],$
    [107.42,55.8,69.54,84.08,122.7,70.58]]
    
arr=intarr(6,1)

out=intarr(5,1)
    
for i=0,dims[0]-1 do begin
  for j=0,dims[1]-1 do begin
    arr[0]=tm_data[i,j,0]
    arr[1]=tm_data[i,j,1]
    arr[2]=tm_data[i,j,2]
    arr[3]=tm_data[i,j,3]
    arr[4]=tm_data[i,j,4]
    arr[5]=tm_data[i,j,5]
    out[0]=-(arr-mi[*,0])##ni_crop##TRANSPOSE(arr-mi[*,0])-alog(mo_crop)
    out[1]=-(arr-mi[*,1])##ni_forest##TRANSPOSE(arr-mi[*,1])-alog(mo_forest)
    out[2]=-(arr-mi[*,2])##ni_urban##TRANSPOSE(arr-mi[*,2])-alog(mo_urban)
    out[3]=-(arr-mi[*,3])##ni_water##TRANSPOSE(arr-mi[*,3])-alog(mo_water)
    out[4]=-(arr-mi[*,4])##ni_barren##TRANSPOSE(arr-mi[*,4])-alog(mo_barren)
    a=max(out,index)
    case index of
      0:begin
         tm_data[i,j,0]=250
         tm_data[i,j,1]=237
         tm_data[i,j,2]=115
          end 
      1:begin 
        tm_data[i,j,0]=33
        tm_data[i,j,1]=138
        tm_data[i,j,2]=33 
        end
      2:begin 
        tm_data[i,j,0]=255
        tm_data[i,j,1]=0
        tm_data[i,j,2]=0 
        end
      3:begin 
        tm_data[i,j,0]=23
        tm_data[i,j,1]=23
        tm_data[i,j,2]=115 
        end
      4:begin 
        tm_data[i,j,0]=189
        tm_data[i,j,1]=189
        tm_data[i,j,2]=189 
        end
    endcase
  endfor
endfor


class_data[*,*,0]=tm_data[*,*,0]
class_data[*,*,1]=tm_data[*,*,1]
class_data[*,*,2]=tm_data[*,*,2]

tv,class_data,true=3,/order

    pos_class=indgen(3)   ; 3 denote band numbers  if 1, means band number of outdata is 1
                          ;                        if 3, means band number of outdata is 3
                          ;                        if 6, means band number of outdata is 6
    
    out_name ='E:\yaoganhomework\ch08+Classification_tm\Classification_tm\tm_class_jz.img'
    envi_enter_data, class_data, map_info = map_info, r_fid=out_fid
    envi_output_to_external_format, fid=out_fid, out_name = out_name, dims=dims, pos=pos_class, /envi

输出的结果如下:

751dac3356da474d9695c388b65aa4fc.png

 主要存在的问题是样本点选的过于集中导致分类效果差强人意。

 

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值