




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1前言envi (the environment for visualizing images) 遙感影像處置軟件是美國(guó)itt公司推出的基于交互式數(shù)據(jù)語言idl 開發(fā)的一套功能壯大的遙感影像處置系統(tǒng),envi 能夠輕松的讀取、 顯示、分析各類類型的遙感數(shù)據(jù)并提供了從影像預(yù)處置、信息提取到與地理信息系統(tǒng)整合的完整處置流程。但對(duì)一些特殊需求, 如添加未知格式數(shù)據(jù)支持、 處置流程定制等可能都需要二次開發(fā)的模式。 envi 比較方便的進(jìn)行二次開發(fā),這是由于其底層壯大的idl語言支持,多種開發(fā)方式支持及200多個(gè)功能函數(shù)接口等因素決定的。2envi 二次開發(fā)的層次envi 的二次開發(fā)包括三個(gè)層次,env
2、i 的功能擴(kuò)展、獨(dú)立系統(tǒng)開發(fā)和其他語言集成開發(fā)。envi 的功能擴(kuò)展是利用envi 的現(xiàn)有功能及底層idl 語言壯大的運(yùn)算能力實(shí)現(xiàn)的功能模塊的定制開發(fā),在現(xiàn)有 envi 的主框架上擴(kuò)展功能模塊, 添加自系統(tǒng)功能補(bǔ)丁等方式。獨(dú)立系統(tǒng)開發(fā)是在非交互式envi 環(huán)境下 (如 idl 構(gòu)建系統(tǒng)框架), 利用 envi提供的函數(shù)接話柄現(xiàn)數(shù)據(jù)處置功能。其他語言集成開發(fā)指的是在其他語言如vc+、 visual 下挪用 envi 的功能。2.1 功能擴(kuò)展2.1.1 波段、波譜運(yùn)算與自概念功能擴(kuò)展 envi 的功能最簡(jiǎn)單的方式確實(shí)是利用波段和波譜運(yùn)算功能,通過該方式用戶能夠在波段和波譜運(yùn)算表達(dá)式對(duì)話框輸入運(yùn)算函
3、數(shù)進(jìn)行交互運(yùn)算。波段、波譜運(yùn)算功能的實(shí)現(xiàn)有兩種方式:數(shù)學(xué)表達(dá)式和波段、 波譜運(yùn)算函數(shù)。數(shù)學(xué)表達(dá)式:該方式充分利用idl 的數(shù)組處置能力,通過簡(jiǎn)單表達(dá)式輸入方式實(shí)現(xiàn)復(fù)雜的功能。實(shí)例:兩圖像的波段b1 和 b2,波段 b1 中的云部份(以為象元值大于200為云)用波段 b2 的部份替代。實(shí)現(xiàn)的步驟1) 在 envi 主菜單下,選擇basic toolsband math, 在彈出的 bandmath界面中,在 enter an expresion里面輸入表達(dá)式2) 點(diǎn)擊 add to list 按鈕,然后在 previous band math expressions里面選擇輸入的表達(dá)式點(diǎn)擊ok。
4、3) 在彈出的界面當(dāng)選擇表達(dá)式中變量賦需要計(jì)算的波段。波段、波譜運(yùn)算函數(shù)編寫波段運(yùn)算函數(shù)跟數(shù)學(xué)表達(dá)式相較,在操作上更靈活, 函數(shù)中能夠添加更多的操縱,如運(yùn)算中的錯(cuò)誤檢測(cè)等。函數(shù)的編寫超級(jí)簡(jiǎn)單,同意輸入波段,處置數(shù)據(jù),并返回結(jié)果。實(shí)例:以編寫( b1+b2)/ (b1-b2)功能為例,步驟如下1) 編寫函數(shù)并保留; 函數(shù)定義為兩個(gè)輸入波段b1和b2以及一個(gè) check 關(guān)鍵字functionbm_ratio ,b1,b2,check=check ; 計(jì)算差值 den= float (b1)-b2 ; 如設(shè)置 check 關(guān)鍵字,檢查被0除問題if (keyword_set(check) then
5、 ptr=where (den eq 0. ,count) $ else count= 0if (count gt 0) then den ptr= ; 繼續(xù)計(jì)算比率結(jié)果 result=(float (b1)+b2)/den if (count gt 0) then resultptr= ; 返回結(jié)果return ,result end2) 加載函數(shù)加載函數(shù)的方式有兩種。注意的是不同的文件需要注意下利用環(huán)境,假設(shè)是 sav文件,啟動(dòng) envi 或 envi+idl都可,但假設(shè)是 pro 文件,必需要啟動(dòng) envi+idl 。(1)直接編譯文件,在envi 的主菜單下,選擇 file compi
6、le idl module,選擇 pro 或 sav文件進(jìn)行編譯;(2)把或 sav文件放入 envi 安裝目錄下的 . envi46save_add下,重啟 envi 。3) 執(zhí)行函數(shù)在 envi 主菜單下,選擇 basic toolsband math,在彈出的 bandmath界面中,在 enter an expresion里面輸入函數(shù)挪用點(diǎn)擊 ok 執(zhí)行。2.1.2 用戶自概念功能用戶自概念功能許諾用戶為envi 添加新功能并通過envi 菜單進(jìn)行訪問。當(dāng)用戶通過菜單項(xiàng)選擇擇該函數(shù)對(duì)應(yīng)的菜單項(xiàng)時(shí),將會(huì)執(zhí)行這些函數(shù),就猶如envi 本身自帶的功能一樣。 分為兩個(gè)步驟, 一是編寫功能代碼,
7、 二是修改菜單。1) 編寫功能代碼用戶函數(shù)能夠是pro 或 sav,如是 pro 那么與一般的 idl 程序無任何區(qū)別, 用戶函數(shù)必需放入到envi 安裝目錄下的 save_add目錄中, 在 envi啟動(dòng)時(shí)用戶函數(shù)能夠被自動(dòng)編譯或恢復(fù)。用戶函數(shù)pro 代碼能夠隨時(shí)進(jìn)行修改, envi 只需從頭編譯函數(shù)而不需要重啟。2) menu 文件修改envi 的菜單文件在系統(tǒng)中途徑為ittidlxxproductsenvixxmenu ,利用記事本就能夠打開。文件頂部有些介紹的注釋文本,然后確實(shí)是文件的結(jié)構(gòu):前面以 ;開頭的是注釋文本,后面是菜單概念。菜單概念每一行開始的數(shù)據(jù)概念了菜單項(xiàng)的層次。0 表示
8、最頂層, 1 表示一級(jí)子菜單, 2 表示二級(jí)子菜單,如此類推。以 1級(jí)菜單為例說下內(nèi)容概念:open image file概念了顯示在菜單上的內(nèi)容。open envi file 概念了為菜單項(xiàng)所賦給的用戶值,在處置多個(gè)菜單項(xiàng)時(shí)有效。envi_menu_event概念了菜單項(xiàng)事件處置程序的名稱。修改保留該文件然后重啟envi 即可。3) 函數(shù)修改envi 提供函數(shù) envi_define_menu_button來實(shí)現(xiàn)菜單的程序添加。用法如下:功能函數(shù)名稱為my_function,event,成立一進(jìn)程pro my_function_define_buttons, buttoninfo,添加工作在
9、那個(gè)進(jìn)程中完成。envi_define_menu_button的挪用格式如下:envi_define_menu_button, buttoninfo , /, = string, /, =string, =long integer or string , = long integer , = variable , =string , =0 | 1 | -1 , /, =string關(guān)鍵字說明:display-是創(chuàng)建在主菜單仍是顯示菜單;value - 菜單的顯示信息;uvalue 菜單的 uvalue event_pro-程序事件名稱;menu- 是不是為菜單ref_index- 若 ref_
10、value 不唯一那么可用此來設(shè)置;ref_value - 已存在菜單名;sibling - 是不是創(chuàng)建同級(jí)菜單。4) 實(shí)例編寫 landsat-7 etm+的單影像去條帶補(bǔ)丁背景: 由于 landsat-7 etm+機(jī)載掃描行校正器 (slc) 故障致使 2003 年 5 月 31 日以后獲取的圖像顯現(xiàn)了數(shù)據(jù)條帶丟失,見以下圖。嚴(yán)峻阻礙了landsat etm 遙感影像的利用。針對(duì)該現(xiàn)象,實(shí)現(xiàn)一個(gè)對(duì)該傳感器進(jìn)行去條帶的補(bǔ)丁。分析:由于數(shù)據(jù)中包括有同名的掩膜文件,該掩膜文件可將條帶完全覆蓋。基于此那么程序?qū)崿F(xiàn)的時(shí)候只需依照掩膜文件進(jìn)行判定即可,而無需再依照數(shù)據(jù)值進(jìn)行。條帶部份數(shù)據(jù)的填充方式采取
11、條帶兩邊數(shù)據(jù)線性插值,盡管有些地址數(shù)據(jù)有些失真,該方式是速度比較快的容易實(shí)現(xiàn)方式。代碼編寫:依照前面的分析,代碼函數(shù)名及功能如下。tm_destripe:主函數(shù),數(shù)據(jù)的讀取、挪用條帶去除功能及存儲(chǔ);tm_destripe_define_buttons :創(chuàng)建 envi 主菜單按鈕;stripfill :條帶數(shù)據(jù)的賦值填充;pro tm_destripe, event ;讀取掩膜數(shù)據(jù)maskdata= float(envi_get_data(fid= m_fid,dims= dims,pos = 0) ;波段循環(huán)for bandidx =0,n_elements(pos)-1 do begin
12、;讀取原數(shù)據(jù)oridata = float(envi_get_data(fid= fid,dims= dims,pos = posbandidx) resdata = oridata ;列循環(huán)for i=0, ns-1 do begin envi_report_sta t, reportbase, bandidx*(ns+1)+i, n_elements(pos)*(ns+1), cancel=cancel if cancel eq 1 then break ;獲取 0 索引部分zeroidx = where(maskdatai,* eq 0) ;處理resdatai,* = stripfil
13、l (oridatai,*, zeroidx,ns) endfor ;進(jìn)度條end;添加菜單pro tm_destripe_define_buttons, buttoninfo envi_define_menu_button, buttoninfo, value = landsat-7 etm+ destripe, $ uvalue=landsat-7 etm+ destripe(改進(jìn) ), event_pro=tm_destripe, $ ref_value = destripe, $ position = after endfunction stripfill,data, zeroidx,
14、nlength num = n_elements(zeroidx) ;返回結(jié)果數(shù)據(jù)rdata = data startidx = 0 for i=0,num-2 do begin ;當(dāng)不等于1 的時(shí)候if (zeroidxi+1 - zeroidxi) gt 1 then begin endidx = i if startidx ne 0 then begin ;兩方向存在數(shù)據(jù)if zeroidxendidx ne nlength-1 then begin sdata = datazeroidxstartidx-1*1. edata = datazeroidxendidx+1*1. index
15、 = findgen(zeroidxendidx+1-zeroidxstartidx+1+1)0)/(zeroidxendidx+1-zeroidxstartidx+1+1)0 ;格網(wǎng)式插值并平滑rdatazeroidxstartidx-1:zeroidxendidx+1 =smooth(interpolate(sdata,edata,index, /grid),2) endif endif startidx =i+1 endif endfor return,rdata end程序運(yùn)行將 pro或生成的 sav放在save_add 目錄下, 重啟 envi+idl 或envi , 在basic
16、 toolspreprocessing general purpose utilities 下會(huì)自顯現(xiàn) landsat-7 etm+ destripe 功能菜單,如圖。處置后結(jié)果對(duì)條帶數(shù)據(jù)進(jìn)行處置后,關(guān)聯(lián)顯示后可發(fā)覺,條帶去除成效很明顯。2.2系統(tǒng)開發(fā)系統(tǒng)開發(fā)模式是離開envi 主界面的程序運(yùn)行方式, 充分利用了 idl 語言的快速、簡(jiǎn)單等特點(diǎn),能夠輕松、方便的實(shí)現(xiàn)批處置數(shù)據(jù)轉(zhuǎn)換等功能。系統(tǒng)開發(fā)模式與 envi 下的利用不同,需要進(jìn)行該模式的初始化,在系統(tǒng)關(guān)閉時(shí)需要對(duì)模式進(jìn)行關(guān)閉。 實(shí)現(xiàn)起來比較簡(jiǎn)單, 初始化和關(guān)閉就下面函數(shù)中的幾行代碼。;初始化 envi 系統(tǒng)開發(fā)模式envi,/restor
17、e_base_save_files envi_batch_init,log_file= ;關(guān)閉 envi 批處理模式envi_batch_exit實(shí)例:批量將多個(gè)多波段數(shù)據(jù)的3、二、 1 波段存為三通道的tif 文件,假設(shè)數(shù)據(jù)波段少于三那么全數(shù)存儲(chǔ)。分析:實(shí)現(xiàn)如此的功能批處置模式最符合要求,因需求中波段固定3、二、1,故讀取數(shù)據(jù)和存儲(chǔ)tif 文件函數(shù)都可挪用envi 的函數(shù)來實(shí)現(xiàn)。代碼編寫:分兩部份,一是界面構(gòu)建與交互處置,二是數(shù)據(jù)的存儲(chǔ)功能。界臉部份:tlb = widget_base(mbar= mbar, $ /column , $ title = 批處理轉(zhuǎn)換為tiff, $ space
18、 = 0 , xpad = 0, ypad = 0 , $ /tlb_kill_request_events, $ tlb_frame_attr = 1, map = 0) ;創(chuàng)建菜單fmenu = widget_button(mbar, value =文件 ,/menu) fexit = widget_button(fmenu, value = 退出 , $ uname = exit,/sep) hmenu = widget_button(mbar, value =幫助 ,/menu) hhelp = widget_button(hmenu, value = 關(guān)于 , $ uname = a
19、bout,/sep) ;上面的輸入base winputbase = widget_base(tlb, $ xsize =sz0, /column) ;下面的輸出base woutputbase = widget_base(tlb, $ /row,xsize =sz0) ;中間的參數(shù)base wsetbase = widget_base(tlb, $ xsize =sz0, /row) wbutton = widget_button(winputbase,value =打開數(shù)據(jù)文件, $ uname = open) wlist = widget_list(winputbase, $ ysize
20、 = sz1/(2*15),$ xsize = sz0/8) ; values = 源文件路徑 , $ 另選擇路徑 bgroup = cw_bgroup(woutputbase, values, $ /row, /exclusive, $ ;label_top= 輸出路徑 , $ /no_release, set_value=1, $ uname = filepathsele, $ /frame) outpath = widget_text(woutputbase, $ value = , $ xsize =35, $ /editable, $ uname = outroot) wsele =
21、 widget_button(woutputbase, $ value =選擇路徑 , $ uname =selepath) wbutton = widget_button(wsetbase,$ value =存為 tiff, $ uname = tiff)功能部份代碼;文件信息envi_file_query , fid, dims=dims, nb=nb,bnames = bnames ; 如果波段小于3 個(gè)if nb le 3 then begin bandlist = indgen(nb) endif else begin bandlist = 3,2,1 ; endelse ;存儲(chǔ) t
22、iff 文件envi_output_to_external_format,fid = fid,$ dims = dims, out_name=out_name,pos = bandlist, $ out_bname=bnamesbandlist,/tiff運(yùn)行主界面2.3 集成開發(fā)集成開發(fā)指的是在其他語言如vc+、visual 下挪用 envi 的功能。這種開發(fā)實(shí)現(xiàn)的方式跟idl 的集成開發(fā)一致, 只是在功能方式編寫的時(shí)候采納的envi的系統(tǒng)開發(fā)的形式,能夠通過下面幾種方式進(jìn)行。callable 技術(shù)envi/idl函數(shù)能夠作為動(dòng)態(tài)鏈接庫(kù)被外部程序挪用啟動(dòng),稱之為callable idl 技術(shù)
23、。利用 callable idl 技術(shù),外部程序能夠像在idl 環(huán)境中一樣執(zhí)行idl 的代碼。下面以 visual c+ 為例,實(shí)現(xiàn)挪用envi 或 idl 函數(shù)的要緊步驟:1.成立 vc 的 mfc 工程,添加 ittidl70externalinclude的頭文件;2.工程 設(shè)置 連接中的對(duì)象/庫(kù)模塊中添加;3.工具 選項(xiàng) 目錄中的library files 添加 idl 的安裝途徑;4.我的電腦右鍵屬性 高級(jí) 環(huán)境變量系統(tǒng)變量path 中添加idl的安裝途徑;5.idl 初始化執(zhí)行代碼“ idl_win32init(0,handle,null,0)”;6.執(zhí)行 idl 的命令語句用“ i
24、dl_executestr(“ * ” ) ”;7.退出時(shí)清除idl 挪用命令: “ idl_cleanup(true)”。idldrawwidget 跟 callable 技術(shù)類似, idldrawwidget技術(shù),能夠?qū)nvi/idl函數(shù)作為com 組件被外部程序挪用啟動(dòng)。以c#為例,該方式挪用envi/idl函數(shù)的步驟:1.成立一個(gè)windows 應(yīng)用程序;2.在工具箱上右鍵選擇項(xiàng) com 組件選中 idldrawwidget control 并拖動(dòng)控件到窗體上;3.設(shè)定 idl 庫(kù)文件目錄;4.初始化 idl 控件: n = (int) ;5. ( “ * ”);執(zhí)行 idl 命令。
25、對(duì)象導(dǎo)出利用對(duì)象導(dǎo)出向?qū)軌驅(qū)nvi 或 idl 的功能添加到其他應(yīng)用軟件中,該種模式能夠很容易地將envi 或 idl 對(duì)象輸出到j(luò)ava 和 com 環(huán)境,進(jìn)而直接縮短接口開發(fā)時(shí)刻。能夠?qū)С?envi 或 idl 的 pro 文件或 sav 文件, java 和 com 的實(shí)現(xiàn)步驟大體類似。導(dǎo)出 java 對(duì)象1在導(dǎo)出對(duì)象概念的進(jìn)程后加_ define(以類的形式 );2在 idl 命令行中輸入idlexbr_assistant 回車打開對(duì)象輸出向?qū)В?file new project java選擇要輸出的* 或*文件加載進(jìn)輸出向?qū)В?設(shè)置對(duì)象要輸出的進(jìn)程、函數(shù)及其參數(shù);5保留工程fil
26、e save project;6編譯輸出對(duì)象build build object ;7生成 *.java 和*.class 文件。導(dǎo)出 com 組件1在導(dǎo)出對(duì)象概念的進(jìn)程后加_ define(以類的形式 );2我 的電腦右鍵屬性 高級(jí) 環(huán)境變量 系統(tǒng) 變量path 中 添加: c:program filesmicrosoft visual studio 8common7ide;3在 idl 命令行中輸入idlexbr_assistant 回車打開對(duì)象輸出助手;4file new project com 選擇要輸出的*或*文件加載進(jìn)輸出向?qū)В?設(shè)置對(duì)象要輸出的進(jìn)程、函數(shù)及其參數(shù);6保留工程fil
27、e save project;7編譯輸出對(duì)象build build object ;8生成 *.dll 和*.tlb 文件 (或*.ocx 和*.tlb) ;9在運(yùn)行頂用regsvr32 對(duì) dll(ocx)注冊(cè)。實(shí)例:以 com 組件的方式實(shí)現(xiàn) 2005 下 envi 非監(jiān)督分類方式的功能挪用。第一編寫 idl 代碼實(shí)現(xiàn)非監(jiān)督分類的方式代碼; iso mean 分類算法function usingenvi:iso, inputfile,out_name compile_opt idl2 envi_open_file , inputfile, r_fid=fid if (fid eq - 1)
28、 thenbegin self-quitreturn , 0endifenvi_file_query , fid, dims=dims, nb=nb pos = lindgen (nb) envi_doit, class_doit , $ dims=dims, $ fid=fid, $ method= 4, $ ;| isodata (unsupervised) out_name=out_name, $ pos=pos, $ ; iterations=1, $ ; 迭代次數(shù) change_thresh=, $ ; iso_merge_dist= 5, $ iso_merge_pairs= 2,
29、 $ iso_min_pixels=1, $ iso_split_std=iso_split_std, $ ; 此參數(shù)不必須 min_classes= 5, $ num_classes=10return , 1end; k-meanfunction usingenvi:kmean, inputfile,out_name compile_opt idl2 envi_open_file , inputfile, r_fid=fidif (fid eq - 1) thenbegin self-quitreturn , 0endif; get the spatial dimensions and #
30、of bands; for the input file.;envi_file_query , fid, dims=dims, nb=nb ; set the pos to classify all; data (spectrally) in the file. ; pos = lindgen (nb) envi_doit, class_doit , $ dims=dims, $ fid=fid, $ method= 7, $ ;| k-means (unsupervised) out_name=out_name, $ pos=pos, $ ; iterations=1, $ ; 迭代次數(shù) change_thresh=, $ ; num_classes=5return , 1end; initialize envi and send all errorsfunction usingenvi:startenvi envi, /restore_base_save_files ;envi_batch_init, log_file=return , 1end; exit envi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥品緊急采購(gòu)管理制度
- 藥品銷售公司管理制度
- 藥店內(nèi)部保潔管理制度
- 藥店教育培訓(xùn)管理制度
- 莆田物流車隊(duì)管理制度
- 設(shè)備廠家生產(chǎn)管理制度
- 設(shè)備廣場(chǎng)衛(wèi)生管理制度
- 設(shè)備日常巡檢管理制度
- 設(shè)備研發(fā)流程管理制度
- 設(shè)備聯(lián)網(wǎng)過程管理制度
- 基于AI的智能汽車用戶體驗(yàn)優(yōu)化策略
- 毛石混凝土換填施工方案
- 公司信息安全管理制度
- 2025-2026年摩托車制造電動(dòng)化發(fā)展趨勢(shì)
- 醫(yī)院消毒隔離工作制度
- GB/T 10810.2-2025眼鏡鏡片第2部分:漸變焦
- 《長(zhǎng)QT綜合征》課件
- 海外項(xiàng)目廉潔風(fēng)險(xiǎn)的防控
- DBJ04T 439-2023 房屋建筑和市政基礎(chǔ)設(shè)施工程造價(jià)指標(biāo)指數(shù)編制標(biāo)準(zhǔn)
- 眩暈綜合癥的護(hù)理查房
- 2.1 堅(jiān)持依憲治國(guó) 教案 -2024-2025學(xué)年統(tǒng)編版道德與法治八年級(jí)下冊(cè)
評(píng)論
0/150
提交評(píng)論