PRO done_event, ev ; When the 'Done' button is pressed, exit ; the application. WIDGET_CONTROL, ev.TOP, /DESTROY END Pro SEATH_Pixels_define_buttons, buttonInfo ENVI_DEFINE_MENU_BUTTON, buttonInfo, VALUE = 'SEATH', $ UVALUE = 'SEATH', EVENT_PRO = 'SEATH_Pixels', $ REF_VALUE = 'Basic Tools', POSITION = 'last' end ; main program pro SEATH_Pixels, ev ;Select input image envi_select, title='Input Image filename', fid=fid,pos=pos if (fid eq -1) then begin error=dialog_message('File does not exist',/error) return endif ; Delete any unwanted ROIs envi_delete_rois, /ALL nb=n_elements(pos) ; Select ROI file roi_filename = DIALOG_PICKFILE(/READ, TITLE='Select ROI File',FILTER='*.roi') envi_restore_rois,roi_filename ; get associated ROIs roi_ids = envi_get_roi_ids(fid=fid1, roi_names=roi_names, roi_colors=roi_colors) if (roi_ids[0] eq -1) then begin error=dialog_message('No ROIs associated with the selected file',/error) print, 'No ROIs associated with the selected file' print, 'done' return endif ; compound widget for ROI selection base = widget_auto_base(title='ROI Selection') wm = widget_multi(base, list=roi_names, uvalue='list', /auto) result = auto_wid_mng(base) if (result.accept eq 0) then begin error=dialog_message('No ROIs selected',/error) print, 'No ROIs selected' print, 'done' return endif roi_ind = where(result.list eq 1, K) classes=roi_names features=string(indgen(1,nb)+1) nf=nb ;no. of features ;;getting the data for ROIs ;X_v=envi_get_roi_data(roi_ids[roi_ind[0]],fid=fid, pos=pos) ;len1=n_elements(X_v[1,*]) ;label=roi_ind[0]*(1+dblarr(1,len1)) ;nel=[0,len1] ; ;for ii=1l,K-1 do begin ; ; X1=envi_get_roi_data(roi_ids[roi_ind[ii]],fid=fid, pos=pos) ; ;X_v= [[X_v],[X1]] ; ; ;len1=n_elements(X1[1,*]) ; ;label=[[label],[roi_ind[ii]*(1+dblarr(1,len1))]] ;nel=[nel,len1] ; ; endfor ; ;X1=0 ;ns=N_elements(label) ;no. of samples ; ;;;;;;;;;;;;;;;; Training areas selected cc=K; table_labels=['Features','J','Direction','Threshold','m1','m2'] ;--------------------------------- ;CREATING WIDGETS ;MAIN WIDGET tlb_total=widget_base(row=2,title='Optimum Feature Space',/SCROLL,X_SCROLL_SIZE=1000,Y_SCROLL_SIZE=500) tlb_main=widget_base(tlb_total,row=1) tlb_but_base=widget_base(tlb_total,row=1) tlb_done_button= WIDGET_BUTTON(tlb_but_base, VALUE='Done',EVENT_PRO='done_event') for c1=1,(cc) do begin tlb_child=widget_base(tlb_main,column=1) label=widget_label(tlb_child,value=classes[c1-1]) label=widget_label(tlb_child,value='*****') a1=envi_get_roi_data(roi_ids[roi_ind[c1-1]],fid=fid, pos=pos) envi_get_roi_information,roi_ids[roi_ind[c1-1]], npts=ns1 ;for c2=c1+1,cc do begin for c2=1,cc do begin if c1 eq c2 then continue if c2 eq cc then begin a2=envi_get_roi_data(roi_ids[roi_ind[c2-1]],fid=fid, pos=pos) envi_get_roi_information,roi_ids[roi_ind[c2-1]], npts=ns2 endif else begin a2=envi_get_roi_data(roi_ids[roi_ind[c2-1]],fid=fid, pos=pos) envi_get_roi_information,roi_ids[roi_ind[c2-1]], npts=ns2 endelse m1=fltarr(nf) m2=fltarr(nf) std1=fltarr(nf) std2=fltarr(nf) for ii=0,nf-1,1 do begin m1[ii]=mean(a1[ii,*]) m2[ii]=mean(a2[ii,*]) std1[ii]=stdev(a1[ii,*]) std2[ii]=stdev(a2[ii,*]) endfor ;Bhattacharya distance B =( 0.125 * (m1-m2)^2 * (2/(std1^2 + std2^2))) + (0.5 * alog((std1^2 + std2^2)/(2*std1*std2))) ;Jeffries-Matusita distance J = 2 * (1 - exp(-B)) A = alog((std1/std2)* (float(ns2)/ns1)) sqrt1 = sqrt((m1-m2)^2 + ((2*A) * (std1^2 - std2^2))) s1 = (((m2 * std1^2) - (m1 * std2^2) + ((std1* std2)) * sqrt1))/ (std1^2 - std2^2) s2 = (((m2 * std1^2) - (m1 * std2^2) - ((std1 * std2)) * sqrt1)) / (std1^2 - std2^2) ;threshold S= ((m1 gt m2)*(m1 gt s1)*(m2 lt s1)*s1)+ ((m1 gt m2)*(m1 gt s2)*(m2 lt s2)*s2)+ ((m2 gt m1)*(m2 gt s1)*(s1 gt m1)*s1)+((m2 gt m1)*(m2 gt s2)*(s2 gt m1)*s2) ;direction V=2*(m1 gt m2)-1; m1=string(m1) m2=string(m2) ftr_flag=finite(s) s=string(s) ;v=string(v) J1=string(J) mn=min(J) ;finald=string(indgen(nf+1)) table_data=string(intarr(6,nf)) ;finald(0)=strjoin(table_labels,';') ti=0 ;fi=0 for ii=0,nf-1,1 do begin mx=max(J,mxi) J[mxi]=mn-1 if ftr_flag[mxi] eq 1 then begin ;finald(fi+1)=strjoin([features(mxi),J1(mxi),m1(mxi),m2(mxi),s(mxi),v(mxi)],';') ;fi=fi+1 if v[mxi] eq -1 then begin gl='<' endif if v[mxi] eq 1 then begin gl='>' endif table_data[*,ti]=[features(mxi),J1(mxi),gl,s(mxi),m1(mxi),m2(mxi)] ti=ti+1 endif endfor label=widget_label(tlb_child,value=classes[c2-1]) table1=widget_table(tlb_child,value=table_data[*,0:ti-1], $ x_scroll_size=4,y_scroll_size=4,row_labels='',column_labels=table_labels,/resizeable_columns) widget_control,tlb_child,/realize table_data=0 endfor widget_control,tlb_main,/realize endfor widget_control,tlb_but_base,/realize widget_control,tlb_total,/realize ; Call XMANAGER to manage the event loop. XMANAGER, 'seath_pixels', tlb_total, /NO_BLOCK end