2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩38頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、ENVI/IDL 二次開發(fā),新疆大學(xué)資源與環(huán)境科學(xué)學(xué)院買買提沙吾提QQ:317851568,主要內(nèi)容,1,,ENVI /IDL二次開發(fā)介紹,3,,批處理模式,ENVI /IDL二次開發(fā)介紹,如何進行ENVI功能的擴展波譜、波段函數(shù) 擴展ENVI功能的最簡單方法,波段和波譜運算函數(shù),不需要處理文件I/O,不需要進行事件控制,不需修改菜單,用戶只需編寫運算函數(shù)部分內(nèi)容,其它由ENVI進行管理。批處理模式不出現(xiàn)ENVI的菜單界面

2、,通過調(diào)用ENVI提供的非交互式函數(shù)來實現(xiàn)交互式ENVI所提供的功能。,ENVI /IDL二次開發(fā)介紹,用戶函數(shù)用戶函數(shù)可以用IDL、C、Fortran或者其它的高級語言編寫,并集成到ENVI軟件中,通過ENVI的菜單來執(zhí)行。用戶函數(shù)可以通過ENVI獲得輸入數(shù)據(jù),并將結(jié)果直接輸入到ENVI中。用戶函數(shù)包括了部件的定義,事件的處理,以及處理程序。用戶函數(shù)和ENVI菜單的一個按鈕聯(lián)系起來,并像ENVI的其它函數(shù)一樣執(zhí)行。,E

3、NVI /IDL二次開發(fā)介紹,ENVI程序中的通用關(guān)鍵字FIDFID是一個長整型的標(biāo)量。FID為ENVI的程序員提供了一個命名變量,可以用于一個或幾個ENVI程序,來打開或選擇文件。所有對該文件進行操作的ENVI程序都是通過FID完成。如果文件打開失敗,則FID返回為-1。,ENVI /IDL二次開發(fā)介紹,R_FID和M_FIDENVI處理程序產(chǎn)生結(jié)果一幅新圖像也包括一個R_FID,或者稱為返回FID關(guān)鍵字。如果結(jié)果是存

4、在內(nèi)存中的,設(shè)置R_FID關(guān)鍵字是訪問數(shù)據(jù)的唯一方法。進行掩模的處理時還包括一個M_FID,或者稱為掩模關(guān)鍵字,用于確定用于掩模波段的文件。,ENVI /IDL二次開發(fā)介紹,DIMS DIMS關(guān)鍵字是一個5個元素長整型數(shù)組。它定義了處理數(shù)據(jù)的空間子集。當(dāng)需要確定FID的時候,你必須同時確定該文件的空間范圍。 DIMS[0] 存儲一個打開的ROI區(qū)域的指針,僅在ROI被定義的時候使用,其它時候設(shè)為-1L

5、DIMS[1] 采樣的起始位置 Sample start DIMS[2] 采樣的終止位置 Sample end DIMS[3] 行的起始位置 Line start DIMS[4] 行的結(jié)束位置 Line end,ENVI /IDL二次開發(fā)介紹,POSPOS關(guān)鍵字定義了用于處理的波段位置,是一個變長的長整型數(shù)組。波段從0開始,例如,要處理第三波段和第四波段,POS=[2,3]。,ENVI /IDL

6、二次開發(fā)介紹,常用ENVI功能函數(shù)介紹文件管理 ENVI_PICKFILE: 產(chǎn)生一個提示用戶選擇文件的對話框,并返回用戶所選擇的文件名 ENVI_SELECT: 產(chǎn)生對話框提示用戶從ENVI中已經(jīng)打開的文件中選擇一個文件,并返回用戶所選擇文件的FID,該函數(shù)還可以返回DIMS和POS的值 ENVI_OPEN_FILE:該函數(shù)返回一個文件的FID,并將文件信息添加到可用波段列表中 ENVI_FILE_MNG: 該函數(shù)可

7、以打開、關(guān)閉或者刪除硬盤上的文件。無需用戶干預(yù) ENVI_GET_FILE_IDS:該函數(shù)返回所有當(dāng)前打開的文件的FID,ENVI /IDL二次開發(fā)介紹,打開外部文件格式 ENVI_OPEN_DATA_FILE: 該函數(shù)打開ENVI所支持的外部文件(無ENVI頭文件)并返回FID獲取數(shù)據(jù) ENVI_GET_DATA:該函數(shù)從一個打開的文件中獲取影像數(shù)據(jù)。它每次只返回某一波段的數(shù)據(jù),數(shù)據(jù)的范圍由DIMS關(guān)鍵字控制。

8、ENVI_GET_SLICE:該函數(shù)從一個打開的文件中獲取波譜影像數(shù)據(jù),它返回影像某一行所有波段的數(shù)據(jù)值。結(jié)果以BIP或BIL的格式返回,ENVI /IDL二次開發(fā)介紹,將數(shù)據(jù)輸入到ENVIENVI_ENTER_DATA:該函數(shù)將IDL數(shù)組中的數(shù)據(jù)輸入到內(nèi)存中,并通過可用波段列表進行管理。將影像數(shù)據(jù)存入硬盤 使用IDL的WRITEU函數(shù)寫入數(shù)據(jù) ENVI_SETUP_HEAD:使用該函數(shù)寫某個影像數(shù)據(jù)的頭文件,波段、波譜運算

9、,波段運算,Function bm_func,b1,[b2,…,bn, parameters and keywords] processing steps return,result end,波段、波譜運算,波譜運算,ENVI批處理模式,批處理模式簡介批處理模式的ENVI和正常模式下沒有什么區(qū)別,只是通過一系列的特定的函數(shù)庫來執(zhí)行ENVI的功能。為了使用這些函數(shù),必須首先將它們恢復(fù)到IDL內(nèi)存中。

10、因此為了正確獲取這些函數(shù),有必要了解一下ENVI程序的結(jié)構(gòu)。ENVI功能文件由大約50多個小的IDL save文件組成,這些文件是包括數(shù)據(jù)和編譯后的程序的二進制文件。這些save文件存放在ENVI安裝目錄下的Save目錄下。ENVI的核心save文件包括ENVI的基本功能函數(shù),動態(tài)運行函數(shù)以及ENVI運行所需的內(nèi)部變量。,ENVI批處理模式,如何開始批處理模式 恢復(fù)ENVI sav文件 envi, /restore_bas

11、e_save_files 開始批處理模式 envi_batch_init, log_file=’batch.txt’ 退出批處理模式 envi_batch_eixt批處理的例子,用戶函數(shù),用戶函數(shù)簡介用戶函數(shù)允許用戶為ENVI添加新的功能并通過ENVI的菜單進行訪問。用戶能夠添加任意數(shù)量的用戶函數(shù),并且每個函數(shù)都可以獲得它自己的菜單選項。用戶函數(shù)是事件的處理程序。因此,所有的ENVI用戶函數(shù)必須遵循事件處理

12、的基本規(guī)則,即用戶函數(shù)定義時必須要加上一個附加的變量來接受事件結(jié)構(gòu)。,用戶函數(shù),ENVI菜單修改使用任何文本編輯器就可以打開envi.men文件。文件的結(jié)構(gòu)如下所示:0 {File} 1 {Open Image File}{open envi file}{envi_menu_event} 1 {Open Vector File}{open vector file}{envi_menu_event} 1

13、{Open External File} 2 {Landsat} 3 {Fast} {open fast tm} {envi_menu_event} 3 {GeoTIFF} {open tiff} {envi_menu_event} 3 {HDF} {open envi file} {envi_menu_event} 3 {NLAPS

14、} {open nlaps} {envi_menu_event}每一行開始的數(shù)據(jù)定義了菜單項的層次。0表示最頂層,1表示一級子菜單,2表示二級子菜單,依次類推。,用戶函數(shù),{Open External File}第一個大括號括起來的部分定義了顯示在菜單上的內(nèi)容。{open envi file}第二個大括號括起來的部分定義了為菜單項所賦給的用戶值。用戶值在同一用戶函數(shù)處理多個菜單項時非常有用,可以區(qū)別那個菜單項被選擇。{envi_m

15、enu_event}第三個定義了菜單項事件處理程序的名稱,即編寫的用戶函數(shù)名。此處使用的是用戶函數(shù)名,而不是用戶函數(shù)所在的文件名,所以沒有后綴。需要注意的部分:用戶值在大多數(shù)ENVI的程序中是需要的,要保持用戶值的唯一性。但當(dāng)編寫用戶函數(shù)時,大多數(shù)情況下,用戶值部分是沒有用的,這時候,可以將用戶值設(shè)為和用戶函數(shù)名一致,也可以將它設(shè)置為{not used}等醒目的標(biāo)示。修改ENVI菜單添加如下部分:0{MyFunctions}

16、 1{Basic File Info}{not used}{file_info},用戶函數(shù),為用戶函數(shù)添加Widget部件ENVI包括了20多種的小部件,可以為用戶函數(shù)所用。大多數(shù)的函數(shù)以WIDGET_開頭。ENVI_PICKFILE:用于從硬盤上選擇一個文件。可以用來收集任意類型的文件名。ENVI_SELECT:ENVI標(biāo)準(zhǔn)的文件選擇對話框,用來選擇一個打開的文件,確定空間和光譜子區(qū),以及掩模波段。它也包括了一個打開按鈕,能夠允

17、許用戶從硬盤上打開一個新的文件。WIDGET_EDIT:提供了一個部件從列表中選擇項目。,用戶函數(shù),WIDGET_EDIT:提供了一個部件從列表中選擇項目WIDGET_GEO:用于提示用戶選擇經(jīng)緯度值。,用戶函數(shù),WIDGET_MAP:用于編輯地圖坐標(biāo)和投影WIDGET_MENU,用戶函數(shù),WIDGET_MULTI:用于多項選擇WIDGET_OUTF 用于選擇一個輸出文件名,用戶函數(shù),WI

18、DGET_OUTFM:用于選擇一個輸出文件名或是輸入到內(nèi)存WIDGET_PARAM,用戶函數(shù),WIDGET_PMENU:提供下拉菜單WIDGET_RGB:用于修改RGB顏色值,用戶函數(shù),WIDGET_SLABEL:用于顯示文本信息WIDGET_STRING,用戶函數(shù),Widget部件自動事件管理程序WIDGET_AUTO_BASE 如果要創(chuàng)建事件自動管理的部件構(gòu)架,必須通過WIDGET_AUTO_

19、BASE創(chuàng)建頂級BASE,在構(gòu)建GUI的過程中使用的其它BASE使用原來的WIDGET_BASE函數(shù)創(chuàng)建。AUTO_WID_MNG 調(diào)用AUTO_WID_MNG函數(shù)進行部件的注冊,檢測事件,并以結(jié)構(gòu)的形式返回用戶輸入的值,用戶函數(shù),用戶函數(shù)中錯誤的捕獲 使用Catch函數(shù)進錯誤的捕獲Catch, errorIF (error NE 0) THEN BEGINok = DIALOG_MESSAGE(!error_state.

20、msg, /cancel)IF (STRUPCASE(ok) EQ ’CANCEL’) THEN returnENDIF,用戶函數(shù),用戶函數(shù)與顯示組交互ENVI中每一個三窗口的顯示組都能夠通過一個唯一數(shù)字標(biāo)識DN進行區(qū)別。一旦獲得某一顯示組的DN值,ENVI提供了幾個函數(shù)能夠提供顯示組的有用信息,并能夠控制Zoom窗口的移動位置ENVI_DISP_QUERY:該函數(shù)體能夠了獲取當(dāng)前顯示影像的基本信息,包括影像文件的FID,空間分

21、辨率,影像的顯示類型(RGB,灰度或分類),顯示的波段位置,以及三個窗口的大小,用戶函數(shù),ENVI_GET_IMAGE:該函數(shù)類似于ENVI_GET_DATA函數(shù),但它用于從顯示窗口中返回數(shù)據(jù)。給定波段位置,維度,以及DN值,ENVI_GET_IMAGE函數(shù)能夠返回拉伸后的灰度值DISP_GET_LOCATION,該函數(shù)返回當(dāng)前選定的像素的位置DISP_GOTO,該函數(shù)移動Zoom窗口到一個指定的位置,并在必要的情況下更新Image

22、和Scroll窗口,用戶函數(shù),在用戶函數(shù)中使用影像分塊技術(shù)所有的ENVI用戶函數(shù)也能夠通過ENVI內(nèi)建的分塊函數(shù)獲取數(shù)據(jù)。這確保了用戶函數(shù)也能夠處理任意大小的數(shù)據(jù)文件。ENVI的分塊來自于三種格式:BSQ格式,BIL格式以及BIP格式。ENVI還提供了進度條部件來顯示分塊的處理情況。,用戶函數(shù),ENVI分塊處理將輸入數(shù)據(jù)分成同樣大小的單元,可以是空間方式也可以是波譜方式,以確保所有大小的影像都能被處理。一個空間分塊的大小是n行*所有列

23、 ,而波譜分塊的大小是Sample*band。,用戶函數(shù),空間分塊近似等于按輸入波段對影像進行分塊,因此可以不用考慮文件的存儲方式而進行空間處理。但訪問單一文件的多個波段,所有波段將擁有同樣數(shù)目的空間分塊。通常進行空間分塊的都是BSQ文件,而進行波譜分塊的是BIL或BIP文件。使用和輸入文件同樣的存儲方式非常有效。當(dāng)進行鄰域處理時,空間分塊也可以設(shè)定重疊的行數(shù)。重疊行僅加在每個分塊的頂部,在整個波段作為一個分塊時,沒有重疊行。例如:進

24、行3x3卷積時,需要一行重疊來處理上一個分塊的最后一行。,用戶函數(shù),分塊處理的步驟如下: 初始化空間或波譜分塊需求,使用 ENVI_INIT_TILE 獲取分塊輸入數(shù)據(jù),ENVI_GET_TILE 當(dāng)所有的分塊數(shù)據(jù)都處理完畢,釋放分塊需求,ENVI_TILE_DONE,用戶函數(shù),保存結(jié)果 輸出文件通過使用IDL程序OPENW寫入,在調(diào)用OPENW程序前,需要通過GET_LUN函數(shù)獲得文件單元號。通過IDL程序WRI

25、TEU函數(shù)將處理后的分塊數(shù)據(jù)寫入文件。在所有分塊數(shù)據(jù)都寫入后,文件被關(guān)閉,文件單元號通過IDL程序FREE_LUN釋放。 一旦文件被寫入硬盤,可以使用ENVI函數(shù)ENVI_SETUP_HEAD進行ENVI頭文件的寫入。下列文件信息必須寫入頭文件:文件名,采樣數(shù),行數(shù),波段數(shù),偏移,存儲方式,以及數(shù)據(jù)類型。此外還有一些可選的關(guān)鍵字。如X、Y的起始位置,文本描述,波段名稱等等。,用戶函數(shù),對于內(nèi)存輸出,結(jié)果存儲在內(nèi)存中分配的數(shù)組中。

26、處理后的數(shù)據(jù)塊插入合適的存儲位置。內(nèi)存數(shù)組的大小為NS*NL*NB,IDL函數(shù)BYTARR,INTARR,LONARR,F(xiàn)LTARR,DBLARR,以及MAKE_ARRAY用來創(chuàng)建相對應(yīng)的比特類型、整型、長整型、浮點、雙精度浮點以及任意類型的內(nèi)存數(shù)組。當(dāng)處理結(jié)果完成后,包含處理結(jié)果的內(nèi)存數(shù)組可以使用ENVI_ENTER_DATA傳遞給ENVI。在最簡單的情況下,僅僅內(nèi)存數(shù)組是必須的。同樣有一些額外的信息可以提供,如XY的起始位置以及文

27、字描述和波段名稱。,用戶函數(shù),非分塊處理程序ENVI_GET_DATA 該函數(shù)從文件中獲取數(shù)據(jù),一次只能對單一波段操作,范圍由DIMS關(guān)鍵字指定。該函數(shù)提供了xfactor和yfactor兩個參數(shù)能夠產(chǎn)生放大和縮小的影像。ENVI_GET_SLICE 該函數(shù)從文件中獲取波譜數(shù)據(jù),以BIP或BIL的格式返回。,用戶函數(shù),使用處理進度報告 處理進度報告顯示了當(dāng)前處理的完成程度。使用ENVI提供的處理進度報告,開

28、發(fā)人員只需控制增量大小和更新頻率??蛇x的關(guān)鍵字Cancel用來在下次增量更新時終止處理進程。處理進度報告由三個程序控制,分別為初始化、設(shè)置增量、更新狀態(tài)。這些函數(shù)列在下面: ENVI_REPORT_INC 設(shè)置報告的增量 ENVI_REPORT_INIT 初始化報告對話框 ENVI_REPORT_STAT 更新完成的百分?jǐn)?shù)并檢查用戶

29、是否執(zhí)行了Cancel 注:只有在處理進程小于100%時,用戶才可以取消處理,如果處理進度已達到100%,Cancel將被忽略。,用戶函數(shù),用戶函數(shù)編譯由于IDL編譯器不能識別ENVI庫函數(shù),因此用戶程序在編譯的時候通常會報錯。同時為了向下兼容,IDL編譯器將()作為數(shù)組的定義,當(dāng)IDL編譯器不能識別函數(shù)時,它會將它當(dāng)作是數(shù)組定義,從而導(dǎo)致編譯錯誤。FORWARD_FUNCTION可以告訴編譯器,哪些變量是函數(shù),而非數(shù)組定

30、義。COMPILE_OPT STRICTARR則強制編譯器以[]作為數(shù)組的定義。,用戶函數(shù),RESOLVE_ALL在IDL程序中,用到許多IDL內(nèi)置的函數(shù),都是以源碼的形式提供的。在IDL編譯器中,它們被自動編譯。但是在ENVI中,ENVI不能編譯這些函數(shù),因此要想將用戶函數(shù)打包,必須要找到所有依賴的函數(shù),而IDL提供了一個工具函數(shù)就是RESOLVE_ALL,該函數(shù)可以自動尋找和編譯用戶程序所依賴的所有函數(shù)。在使用RESOLVE_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論