版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、ENVI/IDL 二次開(kāi)發(fā),新疆大學(xué)資源與環(huán)境科學(xué)學(xué)院買買提沙吾提QQ:317851568,主要內(nèi)容,1,,ENVI /IDL二次開(kāi)發(fā)介紹,3,,批處理模式,ENVI /IDL二次開(kāi)發(fā)介紹,如何進(jìn)行ENVI功能的擴(kuò)展波譜、波段函數(shù) 擴(kuò)展ENVI功能的最簡(jiǎn)單方法,波段和波譜運(yùn)算函數(shù),不需要處理文件I/O,不需要進(jìn)行事件控制,不需修改菜單,用戶只需編寫運(yùn)算函數(shù)部分內(nèi)容,其它由ENVI進(jìn)行管理。批處理模式不出現(xiàn)ENVI的菜單界面
2、,通過(guò)調(diào)用ENVI提供的非交互式函數(shù)來(lái)實(shí)現(xiàn)交互式ENVI所提供的功能。,ENVI /IDL二次開(kāi)發(fā)介紹,用戶函數(shù)用戶函數(shù)可以用IDL、C、Fortran或者其它的高級(jí)語(yǔ)言編寫,并集成到ENVI軟件中,通過(guò)ENVI的菜單來(lái)執(zhí)行。用戶函數(shù)可以通過(guò)ENVI獲得輸入數(shù)據(jù),并將結(jié)果直接輸入到ENVI中。用戶函數(shù)包括了部件的定義,事件的處理,以及處理程序。用戶函數(shù)和ENVI菜單的一個(gè)按鈕聯(lián)系起來(lái),并像ENVI的其它函數(shù)一樣執(zhí)行。,E
3、NVI /IDL二次開(kāi)發(fā)介紹,ENVI程序中的通用關(guān)鍵字FIDFID是一個(gè)長(zhǎng)整型的標(biāo)量。FID為ENVI的程序員提供了一個(gè)命名變量,可以用于一個(gè)或幾個(gè)ENVI程序,來(lái)打開(kāi)或選擇文件。所有對(duì)該文件進(jìn)行操作的ENVI程序都是通過(guò)FID完成。如果文件打開(kāi)失敗,則FID返回為-1。,ENVI /IDL二次開(kāi)發(fā)介紹,R_FID和M_FIDENVI處理程序產(chǎn)生結(jié)果一幅新圖像也包括一個(gè)R_FID,或者稱為返回FID關(guān)鍵字。如果結(jié)果是存
4、在內(nèi)存中的,設(shè)置R_FID關(guān)鍵字是訪問(wèn)數(shù)據(jù)的唯一方法。進(jìn)行掩模的處理時(shí)還包括一個(gè)M_FID,或者稱為掩模關(guān)鍵字,用于確定用于掩模波段的文件。,ENVI /IDL二次開(kāi)發(fā)介紹,DIMS DIMS關(guān)鍵字是一個(gè)5個(gè)元素長(zhǎng)整型數(shù)組。它定義了處理數(shù)據(jù)的空間子集。當(dāng)需要確定FID的時(shí)候,你必須同時(shí)確定該文件的空間范圍。 DIMS[0] 存儲(chǔ)一個(gè)打開(kāi)的ROI區(qū)域的指針,僅在ROI被定義的時(shí)候使用,其它時(shí)候設(shè)為-1L
5、DIMS[1] 采樣的起始位置 Sample start DIMS[2] 采樣的終止位置 Sample end DIMS[3] 行的起始位置 Line start DIMS[4] 行的結(jié)束位置 Line end,ENVI /IDL二次開(kāi)發(fā)介紹,POSPOS關(guān)鍵字定義了用于處理的波段位置,是一個(gè)變長(zhǎng)的長(zhǎng)整型數(shù)組。波段從0開(kāi)始,例如,要處理第三波段和第四波段,POS=[2,3]。,ENVI /IDL
6、二次開(kāi)發(fā)介紹,常用ENVI功能函數(shù)介紹文件管理 ENVI_PICKFILE: 產(chǎn)生一個(gè)提示用戶選擇文件的對(duì)話框,并返回用戶所選擇的文件名 ENVI_SELECT: 產(chǎn)生對(duì)話框提示用戶從ENVI中已經(jīng)打開(kāi)的文件中選擇一個(gè)文件,并返回用戶所選擇文件的FID,該函數(shù)還可以返回DIMS和POS的值 ENVI_OPEN_FILE:該函數(shù)返回一個(gè)文件的FID,并將文件信息添加到可用波段列表中 ENVI_FILE_MNG: 該函數(shù)可
7、以打開(kāi)、關(guān)閉或者刪除硬盤上的文件。無(wú)需用戶干預(yù) ENVI_GET_FILE_IDS:該函數(shù)返回所有當(dāng)前打開(kāi)的文件的FID,ENVI /IDL二次開(kāi)發(fā)介紹,打開(kāi)外部文件格式 ENVI_OPEN_DATA_FILE: 該函數(shù)打開(kāi)ENVI所支持的外部文件(無(wú)ENVI頭文件)并返回FID獲取數(shù)據(jù) ENVI_GET_DATA:該函數(shù)從一個(gè)打開(kāi)的文件中獲取影像數(shù)據(jù)。它每次只返回某一波段的數(shù)據(jù),數(shù)據(jù)的范圍由DIMS關(guān)鍵字控制。
8、ENVI_GET_SLICE:該函數(shù)從一個(gè)打開(kāi)的文件中獲取波譜影像數(shù)據(jù),它返回影像某一行所有波段的數(shù)據(jù)值。結(jié)果以BIP或BIL的格式返回,ENVI /IDL二次開(kāi)發(fā)介紹,將數(shù)據(jù)輸入到ENVIENVI_ENTER_DATA:該函數(shù)將IDL數(shù)組中的數(shù)據(jù)輸入到內(nèi)存中,并通過(guò)可用波段列表進(jìn)行管理。將影像數(shù)據(jù)存入硬盤 使用IDL的WRITEU函數(shù)寫入數(shù)據(jù) ENVI_SETUP_HEAD:使用該函數(shù)寫某個(gè)影像數(shù)據(jù)的頭文件,波段、波譜運(yùn)算
9、,波段運(yùn)算,Function bm_func,b1,[b2,…,bn, parameters and keywords] processing steps return,result end,波段、波譜運(yùn)算,波譜運(yùn)算,ENVI批處理模式,批處理模式簡(jiǎn)介批處理模式的ENVI和正常模式下沒(méi)有什么區(qū)別,只是通過(guò)一系列的特定的函數(shù)庫(kù)來(lái)執(zhí)行ENVI的功能。為了使用這些函數(shù),必須首先將它們恢復(fù)到IDL內(nèi)存中。
10、因此為了正確獲取這些函數(shù),有必要了解一下ENVI程序的結(jié)構(gòu)。ENVI功能文件由大約50多個(gè)小的IDL save文件組成,這些文件是包括數(shù)據(jù)和編譯后的程序的二進(jìn)制文件。這些save文件存放在ENVI安裝目錄下的Save目錄下。ENVI的核心save文件包括ENVI的基本功能函數(shù),動(dòng)態(tài)運(yùn)行函數(shù)以及ENVI運(yùn)行所需的內(nèi)部變量。,ENVI批處理模式,如何開(kāi)始批處理模式 恢復(fù)ENVI sav文件 envi, /restore_bas
11、e_save_files 開(kāi)始批處理模式 envi_batch_init, log_file=’batch.txt’ 退出批處理模式 envi_batch_eixt批處理的例子,用戶函數(shù),用戶函數(shù)簡(jiǎn)介用戶函數(shù)允許用戶為ENVI添加新的功能并通過(guò)ENVI的菜單進(jìn)行訪問(wèn)。用戶能夠添加任意數(shù)量的用戶函數(shù),并且每個(gè)函數(shù)都可以獲得它自己的菜單選項(xiàng)。用戶函數(shù)是事件的處理程序。因此,所有的ENVI用戶函數(shù)必須遵循事件處理
12、的基本規(guī)則,即用戶函數(shù)定義時(shí)必須要加上一個(gè)附加的變量來(lái)接受事件結(jié)構(gòu)。,用戶函數(shù),ENVI菜單修改使用任何文本編輯器就可以打開(kāi)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}每一行開(kāi)始的數(shù)據(jù)定義了菜單項(xiàng)的層次。0表示最頂層,1表示一級(jí)子菜單,2表示二級(jí)子菜單,依次類推。,用戶函數(shù),{Open External File}第一個(gè)大括號(hào)括起來(lái)的部分定義了顯示在菜單上的內(nèi)容。{open envi file}第二個(gè)大括號(hào)括起來(lái)的部分定義了為菜單項(xiàng)所賦給的用戶值。用戶值在同一用戶函數(shù)處理多個(gè)菜單項(xiàng)時(shí)非常有用,可以區(qū)別那個(gè)菜單項(xiàng)被選擇。{envi_m
15、enu_event}第三個(gè)定義了菜單項(xiàng)事件處理程序的名稱,即編寫的用戶函數(shù)名。此處使用的是用戶函數(shù)名,而不是用戶函數(shù)所在的文件名,所以沒(méi)有后綴。需要注意的部分:用戶值在大多數(shù)ENVI的程序中是需要的,要保持用戶值的唯一性。但當(dāng)編寫用戶函數(shù)時(shí),大多數(shù)情況下,用戶值部分是沒(méi)有用的,這時(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_開(kāi)頭。ENVI_PICKFILE:用于從硬盤上選擇一個(gè)文件??梢杂脕?lái)收集任意類型的文件名。ENVI_SELECT:ENVI標(biāo)準(zhǔn)的文件選擇對(duì)話框,用來(lái)選擇一個(gè)打開(kāi)的文件,確定空間和光譜子區(qū),以及掩模波段。它也包括了一個(gè)打開(kāi)按鈕,能夠允
17、許用戶從硬盤上打開(kāi)一個(gè)新的文件。WIDGET_EDIT:提供了一個(gè)部件從列表中選擇項(xiàng)目。,用戶函數(shù),WIDGET_EDIT:提供了一個(gè)部件從列表中選擇項(xiàng)目WIDGET_GEO:用于提示用戶選擇經(jīng)緯度值。,用戶函數(shù),WIDGET_MAP:用于編輯地圖坐標(biāo)和投影WIDGET_MENU,用戶函數(shù),WIDGET_MULTI:用于多項(xiàng)選擇WIDGET_OUTF 用于選擇一個(gè)輸出文件名,用戶函數(shù),WI
18、DGET_OUTFM:用于選擇一個(gè)輸出文件名或是輸入到內(nèi)存WIDGET_PARAM,用戶函數(shù),WIDGET_PMENU:提供下拉菜單WIDGET_RGB:用于修改RGB顏色值,用戶函數(shù),WIDGET_SLABEL:用于顯示文本信息WIDGET_STRING,用戶函數(shù),Widget部件自動(dòng)事件管理程序WIDGET_AUTO_BASE 如果要?jiǎng)?chuàng)建事件自動(dòng)管理的部件構(gòu)架,必須通過(guò)WIDGET_AUTO_
19、BASE創(chuàng)建頂級(jí)BASE,在構(gòu)建GUI的過(guò)程中使用的其它BASE使用原來(lái)的WIDGET_BASE函數(shù)創(chuàng)建。AUTO_WID_MNG 調(diào)用AUTO_WID_MNG函數(shù)進(jìn)行部件的注冊(cè),檢測(cè)事件,并以結(jié)構(gòu)的形式返回用戶輸入的值,用戶函數(shù),用戶函數(shù)中錯(cuò)誤的捕獲 使用Catch函數(shù)進(jìn)錯(cuò)誤的捕獲Catch, errorIF (error NE 0) THEN BEGINok = DIALOG_MESSAGE(!error_state.
20、msg, /cancel)IF (STRUPCASE(ok) EQ ’CANCEL’) THEN returnENDIF,用戶函數(shù),用戶函數(shù)與顯示組交互ENVI中每一個(gè)三窗口的顯示組都能夠通過(guò)一個(gè)唯一數(shù)字標(biāo)識(shí)DN進(jìn)行區(qū)別。一旦獲得某一顯示組的DN值,ENVI提供了幾個(gè)函數(shù)能夠提供顯示組的有用信息,并能夠控制Zoom窗口的移動(dòng)位置ENVI_DISP_QUERY:該函數(shù)體能夠了獲取當(dāng)前顯示影像的基本信息,包括影像文件的FID,空間分
21、辨率,影像的顯示類型(RGB,灰度或分類),顯示的波段位置,以及三個(gè)窗口的大小,用戶函數(shù),ENVI_GET_IMAGE:該函數(shù)類似于ENVI_GET_DATA函數(shù),但它用于從顯示窗口中返回?cái)?shù)據(jù)。給定波段位置,維度,以及DN值,ENVI_GET_IMAGE函數(shù)能夠返回拉伸后的灰度值DISP_GET_LOCATION,該函數(shù)返回當(dāng)前選定的像素的位置DISP_GOTO,該函數(shù)移動(dòng)Zoom窗口到一個(gè)指定的位置,并在必要的情況下更新Image
22、和Scroll窗口,用戶函數(shù),在用戶函數(shù)中使用影像分塊技術(shù)所有的ENVI用戶函數(shù)也能夠通過(guò)ENVI內(nèi)建的分塊函數(shù)獲取數(shù)據(jù)。這確保了用戶函數(shù)也能夠處理任意大小的數(shù)據(jù)文件。ENVI的分塊來(lái)自于三種格式:BSQ格式,BIL格式以及BIP格式。ENVI還提供了進(jìn)度條部件來(lái)顯示分塊的處理情況。,用戶函數(shù),ENVI分塊處理將輸入數(shù)據(jù)分成同樣大小的單元,可以是空間方式也可以是波譜方式,以確保所有大小的影像都能被處理。一個(gè)空間分塊的大小是n行*所有列
23、 ,而波譜分塊的大小是Sample*band。,用戶函數(shù),空間分塊近似等于按輸入波段對(duì)影像進(jìn)行分塊,因此可以不用考慮文件的存儲(chǔ)方式而進(jìn)行空間處理。但訪問(wèn)單一文件的多個(gè)波段,所有波段將擁有同樣數(shù)目的空間分塊。通常進(jìn)行空間分塊的都是BSQ文件,而進(jìn)行波譜分塊的是BIL或BIP文件。使用和輸入文件同樣的存儲(chǔ)方式非常有效。當(dāng)進(jìn)行鄰域處理時(shí),空間分塊也可以設(shè)定重疊的行數(shù)。重疊行僅加在每個(gè)分塊的頂部,在整個(gè)波段作為一個(gè)分塊時(shí),沒(méi)有重疊行。例如:進(jìn)
24、行3x3卷積時(shí),需要一行重疊來(lái)處理上一個(gè)分塊的最后一行。,用戶函數(shù),分塊處理的步驟如下: 初始化空間或波譜分塊需求,使用 ENVI_INIT_TILE 獲取分塊輸入數(shù)據(jù),ENVI_GET_TILE 當(dāng)所有的分塊數(shù)據(jù)都處理完畢,釋放分塊需求,ENVI_TILE_DONE,用戶函數(shù),保存結(jié)果 輸出文件通過(guò)使用IDL程序OPENW寫入,在調(diào)用OPENW程序前,需要通過(guò)GET_LUN函數(shù)獲得文件單元號(hào)。通過(guò)IDL程序WRI
25、TEU函數(shù)將處理后的分塊數(shù)據(jù)寫入文件。在所有分塊數(shù)據(jù)都寫入后,文件被關(guān)閉,文件單元號(hào)通過(guò)IDL程序FREE_LUN釋放。 一旦文件被寫入硬盤,可以使用ENVI函數(shù)ENVI_SETUP_HEAD進(jìn)行ENVI頭文件的寫入。下列文件信息必須寫入頭文件:文件名,采樣數(shù),行數(shù),波段數(shù),偏移,存儲(chǔ)方式,以及數(shù)據(jù)類型。此外還有一些可選的關(guān)鍵字。如X、Y的起始位置,文本描述,波段名稱等等。,用戶函數(shù),對(duì)于內(nèi)存輸出,結(jié)果存儲(chǔ)在內(nèi)存中分配的數(shù)組中。
26、處理后的數(shù)據(jù)塊插入合適的存儲(chǔ)位置。內(nèi)存數(shù)組的大小為NS*NL*NB,IDL函數(shù)BYTARR,INTARR,LONARR,F(xiàn)LTARR,DBLARR,以及MAKE_ARRAY用來(lái)創(chuàng)建相對(duì)應(yīng)的比特類型、整型、長(zhǎng)整型、浮點(diǎn)、雙精度浮點(diǎn)以及任意類型的內(nèi)存數(shù)組。當(dāng)處理結(jié)果完成后,包含處理結(jié)果的內(nèi)存數(shù)組可以使用ENVI_ENTER_DATA傳遞給ENVI。在最簡(jiǎn)單的情況下,僅僅內(nèi)存數(shù)組是必須的。同樣有一些額外的信息可以提供,如XY的起始位置以及文
27、字描述和波段名稱。,用戶函數(shù),非分塊處理程序ENVI_GET_DATA 該函數(shù)從文件中獲取數(shù)據(jù),一次只能對(duì)單一波段操作,范圍由DIMS關(guān)鍵字指定。該函數(shù)提供了xfactor和yfactor兩個(gè)參數(shù)能夠產(chǎn)生放大和縮小的影像。ENVI_GET_SLICE 該函數(shù)從文件中獲取波譜數(shù)據(jù),以BIP或BIL的格式返回。,用戶函數(shù),使用處理進(jìn)度報(bào)告 處理進(jìn)度報(bào)告顯示了當(dāng)前處理的完成程度。使用ENVI提供的處理進(jìn)度報(bào)告,開(kāi)
28、發(fā)人員只需控制增量大小和更新頻率??蛇x的關(guān)鍵字Cancel用來(lái)在下次增量更新時(shí)終止處理進(jìn)程。處理進(jìn)度報(bào)告由三個(gè)程序控制,分別為初始化、設(shè)置增量、更新?tīng)顟B(tài)。這些函數(shù)列在下面: ENVI_REPORT_INC 設(shè)置報(bào)告的增量 ENVI_REPORT_INIT 初始化報(bào)告對(duì)話框 ENVI_REPORT_STAT 更新完成的百分?jǐn)?shù)并檢查用戶
29、是否執(zhí)行了Cancel 注:只有在處理進(jìn)程小于100%時(shí),用戶才可以取消處理,如果處理進(jìn)度已達(dá)到100%,Cancel將被忽略。,用戶函數(shù),用戶函數(shù)編譯由于IDL編譯器不能識(shí)別ENVI庫(kù)函數(shù),因此用戶程序在編譯的時(shí)候通常會(huì)報(bào)錯(cuò)。同時(shí)為了向下兼容,IDL編譯器將()作為數(shù)組的定義,當(dāng)IDL編譯器不能識(shí)別函數(shù)時(shí),它會(huì)將它當(dāng)作是數(shù)組定義,從而導(dǎo)致編譯錯(cuò)誤。FORWARD_FUNCTION可以告訴編譯器,哪些變量是函數(shù),而非數(shù)組定
30、義。COMPILE_OPT STRICTARR則強(qiáng)制編譯器以[]作為數(shù)組的定義。,用戶函數(shù),RESOLVE_ALL在IDL程序中,用到許多IDL內(nèi)置的函數(shù),都是以源碼的形式提供的。在IDL編譯器中,它們被自動(dòng)編譯。但是在ENVI中,ENVI不能編譯這些函數(shù),因此要想將用戶函數(shù)打包,必須要找到所有依賴的函數(shù),而IDL提供了一個(gè)工具函數(shù)就是RESOLVE_ALL,該函數(shù)可以自動(dòng)尋找和編譯用戶程序所依賴的所有函數(shù)。在使用RESOLVE_
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二次開(kāi)發(fā)20120621
- cad二次開(kāi)發(fā)
- dedecms二次開(kāi)發(fā)手冊(cè)
- 二次開(kāi)發(fā)服務(wù)承諾
- 二次開(kāi)發(fā)論(1)
- 網(wǎng)站二次開(kāi)發(fā)合同
- cad二次開(kāi)發(fā)ppt
- 二次開(kāi)發(fā)論.pdf
- 產(chǎn)品-dede二次開(kāi)發(fā)
- cad二次開(kāi)發(fā)教程
- 二次開(kāi)發(fā)及autolisp
- excel二次開(kāi)發(fā)教程
- autocad二次開(kāi)發(fā)(vba)
- excel二次開(kāi)發(fā)教程
- 基于ecshop的二次開(kāi)發(fā)
- 二次開(kāi)發(fā)論文正文.doc
- PDM的二次開(kāi)發(fā).pdf
- abaqus_fortran二次開(kāi)發(fā)
- autocad二次開(kāi)發(fā)實(shí)驗(yàn)一
- 金蝶庫(kù)存查詢二次開(kāi)發(fā)
評(píng)論
0/150
提交評(píng)論