版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、編程實(shí)現(xiàn)BIP、BSQ、BIL三種格式轉(zhuǎn)換一、實(shí)驗(yàn)?zāi)康睦斫膺b感圖像BIP、BIL、BSQ三種格式數(shù)據(jù)的組織方式,以及它們互相轉(zhuǎn)換原理 和方法。二、實(shí)驗(yàn)原理ENVI柵格圖像文件,是以字節(jié)數(shù)據(jù)為單位,再按照指定順序組織、排列而成,具 體有如下三種方式:1. BIP(像元波段交叉式):以一對(duì)像元為基本單位進(jìn)行記錄;2. BIL(波段按行交叉格式):按照掃描行為單位各波段同一掃描行數(shù)據(jù)依次記錄 圖像按順序第一個(gè)像元所有的波段,接著是第二個(gè)像元的所有波段,然后是第三個(gè)像 元的所有波段,等等,直到像元總數(shù)為止;3. BSQ(波段順序格式):以波段為單位,每波段所有掃描行依次記錄,每行數(shù)據(jù)后 面緊接著同一波
2、譜波段的下一行數(shù)據(jù)。所以實(shí)現(xiàn)三種格式的轉(zhuǎn)換,實(shí)際上是對(duì)圖像字節(jié)進(jìn)行重新排序。三、實(shí)驗(yàn)思路獲取圖像相關(guān)信息(可通過(guò)讀取頭文件)V根據(jù)圖像格式讀取字節(jié)數(shù)據(jù)對(duì)獲取的字節(jié)數(shù)據(jù)按照目標(biāo)文件格式順序?qū)懭?、保存四、?shí)驗(yàn)步驟1. 新建項(xiàng)目文件:本實(shí)驗(yàn)選用的語(yǔ)言是 C#,開(kāi)發(fā)工具是 VisualStudio2010 ,通 過(guò)“文件一新建一項(xiàng)目一 C#Windows窗體應(yīng)用程序”,命名“格式轉(zhuǎn)換”即 可;2. 編寫代碼:通過(guò)實(shí)驗(yàn)思路的流程圖,我們確定代碼也應(yīng)該分這三個(gè)功能來(lái)寫, 對(duì)應(yīng)可以組織為三個(gè)大方法,再細(xì)分,調(diào)用即可。(1).編寫讀取頭文件代碼:ENVI中柵格圖像被分為兩個(gè)文件存儲(chǔ),一個(gè)“.HDR ”頭文件和
3、一個(gè)數(shù)據(jù)文件,頭文件存儲(chǔ)了圖像描述信息,它是一個(gè)文本文件,我們可以用 System.lO.SreamReader字符讀取流按行讀取,再用字符串匹配方法,以讀取字段的方式獲取圖像的行數(shù)、列數(shù)、波段數(shù)、基本數(shù)據(jù)類 型,即可,具體代碼可見(jiàn)后文代碼附錄;(2) .編寫數(shù)據(jù)讀取數(shù)據(jù)文件代碼:圖像數(shù)據(jù)組織方式有 BIP、BIL、BSQ三種,那么對(duì)應(yīng)的也應(yīng)該有三個(gè)方法按照行、列、波段交叉順序?qū)D像字節(jié)數(shù)據(jù)進(jìn)行讀取,具體代碼見(jiàn)后文;(3) .編寫字節(jié)數(shù)據(jù)重排列存儲(chǔ)代碼:在讀取了圖像數(shù)據(jù)文件后,可以通過(guò)FileStream類按照目標(biāo)類型格式文件組織順序,把字節(jié)數(shù)據(jù)寫入到文件中保存 即可,具體代碼見(jiàn)后文。3. 編
4、譯與調(diào)試:通過(guò)用預(yù)先知道內(nèi)部字節(jié)數(shù)據(jù)的實(shí)驗(yàn)文件,進(jìn)行測(cè)試,輔助斷 點(diǎn)調(diào)試,可排除一般問(wèn)題,接著編譯生成目標(biāo)程序;4. 運(yùn)行程序查看結(jié)果:通過(guò)對(duì)多種格式、多種基本數(shù)據(jù)類型、多種像素大小的文件進(jìn)行多種方式轉(zhuǎn)換,再利用ENVI打開(kāi)兩個(gè)圖像查看是否一樣,再輔以“Link ”功能看同一像素點(diǎn)值是否相同,這樣可以深層確定轉(zhuǎn)換的正確性。五、結(jié)果與分析1.結(jié)果回圖像數(shù)據(jù)基本 類型代碼, 如:”1”為1字 節(jié) byte, ”2” 為 2字節(jié)short等程序運(yùn)行界面轉(zhuǎn)換2息EinhaME Tools Windowe叫梧式塔換=回源格式(BSQ)(BIL)轉(zhuǎn)換后結(jié)杲分析總結(jié)(1) 讀取頭文件時(shí),不能通過(guò)各字段的現(xiàn)有
5、位,按位讀取,應(yīng)該按行讀取, 再利用字符串匹配方式,找到指定字段,這樣避免字段位變化時(shí)讀取出錯(cuò)誤信(2).再讀取數(shù)據(jù)文件和寫入存儲(chǔ)時(shí),應(yīng)該要以基本數(shù)據(jù)類型長(zhǎng)度個(gè)字節(jié)為 單位進(jìn)行,不能單純的以一個(gè)字節(jié)操作,不然會(huì)不具有普遍性,遇到以“int、float ”為基本類型的文件時(shí),就會(huì)出錯(cuò);(3) 要想節(jié)省代碼,可先將各種格式數(shù)據(jù)讀取存儲(chǔ)為一種格式字節(jié)數(shù)組中, 再?gòu)倪@個(gè)格式往其他格式進(jìn)行轉(zhuǎn)換,這樣可以節(jié)省不少工作量,但是引入了中 間數(shù)組,耗費(fèi)了內(nèi)存。目標(biāo)格式LinK確定相同位置數(shù)據(jù)一致2 TM Band 1:TMB$Q=!TMBandlTMBJLFie Ovday Enbante Tools Wind
6、ow輸入頭文件D: EN VIIDLIDL80p rod u ct5en vi48data 選擇輸入數(shù)據(jù)文件 D: EN VIIDLIDL80p rod u ct5en vi48data 蘇文件信息像素列數(shù)640波段個(gè)數(shù)&數(shù)據(jù)種類1像素行數(shù)400數(shù)據(jù)格式bsq解譯格式 b=q六、源代碼附錄1讀取頭文件信息/III讀取頭文件信息/vparamn ame=strFileNamex/param頭文件路徑和名稱/vparamn ame=iColu mn sCou ntx/param像素列數(shù)/vparamn ame=iL in esCou ntx/param像素行數(shù)/vparamn ame=iBa nd
7、sCou ntx/param波段數(shù)/vparamname=iTypev/param基本數(shù)據(jù)類型代碼/vparamn ame=strI nterLeavex/param文件組織格式/vretur nsv/retur ns返回是否讀取成功publicstaticboolReadHDRStri ngstrFileName, outiLin esCou nt,out intiBandsCount, outint iType, outout intStr ingstrI nterLeint iColu mn sCou nt.ave)boolbln Successfalse ;iColum nsCou n
8、t-1;iLin esCou nt-1;iBan dsCou nt-1;iType-1;strl nterLeaveIII!/初始化各個(gè)變量StreamReader hdrfile= null ;tryhdrfile = new StreamReader (strFileName); string content=;while (hdrfile.EndOfStream!=true )/獲取像素列數(shù)exOf( = )+1,exOf( = )+1,content = hdrfile.ReadLi ne();if (content.Contains(samples)String samples =
9、conten t.Substr in g(c onten t.I nd content.Length-content.IndexOf(= )-1).Trim();iColu mn sCou nt= Con vert .ToI nt32(samples);System. Con sole .WriteLi ne(samples);break ;while(hdrfile.EndOfStream!= true )/獲取像素行數(shù)content = hdrfile.ReadL in e();exOf( = )+1,ifconten t.Le ngth(conten t.C ontains(li nes
10、)Stri ng lines = conten t.Substr in g(c onten t. Ind -content.IndexOf(= )-1).Trim();iLin esCou nt = Con vert .ToI nt32(li nes);System. Con sole .WriteL in e(l in es);break ;while(hdrfile.EndOfStream!= true ) /獲取波段個(gè)數(shù)content = hdrfile.ReadLi ne();if(content.Contains(bands)Stri ng bands = conten t.Subs
11、tr in g(c onten t. Ind content.Length- content.IndexOf(= )-1).Trim();iBa ndsCou nt = Con vert .ToI nt32(ba nds);System. Con sole .WriteL in e(ba nds);break ;while(hdrfile.EndOfStream!= true )/獲取數(shù)據(jù)種類content = hdrfile.ReadLi ne();if(content.Contains(data type)dexOf( =)+1,conten t.Le ngthString type =
12、conten t.Substri ng(c onten t.I n -content.dexOf(=)-1).Trim();iType = Con vert .ToI nt32(type);System. Con sole .WriteLi ne(type);break ;while (hdrfile.EndOfStream!= true )/獲取數(shù)據(jù)解譯方式content = hdrfile.ReadLi ne();if(conten t.C ontains(in terleave)String in terleve = conten t.Substri ng(c onten t.I nde
13、xOf(=)+ 1,content.Lengthcontent.IndexOf(= )-1).Trim();strI nterLeave= in terleve;System. Con sole .WriteLi ne(i nterleve); bln Success= true ;break ;catch/讀取失敗hdrfile.Close();hdrfile.Dispose();return false ;hdrfile.Close();hdrfile.Dispose();/關(guān)閉文件流,釋放內(nèi)存retur nbln Success;2讀取數(shù)據(jù)文件進(jìn)行轉(zhuǎn)換存儲(chǔ)/bip轉(zhuǎn)換為bsq/源文件名稱
14、與路徑/目標(biāo)文件名稱與路徑/像素行數(shù)/像素列數(shù)/ 波段數(shù)/基本數(shù)據(jù)類型代碼/v/retur ns是否轉(zhuǎn)換成功public staticle, intpixComCounts, intstrOutputFibool BipToBsq( string strlnputFile, string pixL in eCou nts, int ban ds, int type)boolbln Success= true ;FileStream inputF = new FileStream (strInputFile,FileMode .Ope n);FileStream outputF = new Fi
15、leStream (strOutputFile,FileMode.CreateNew);int totalsize = pixComCou nts *pixL in eCou nts* bands *type; /計(jì)算輸入文件總字節(jié)數(shù)if (totalsize!=in putF.Le ngth)return false ;byte bts = new byte totalsize;int num = 0, bt;while (bt = in putF.ReadByte() -1)/讀取出全部字節(jié)數(shù)據(jù),存儲(chǔ)在數(shù)組中btsnum= (byte )bt;n um+;ban ds;bandn um+)
16、pixL in eCou nts;row+)for (intbandnum = 0;bandnum /讀取波段寫入for (introw = 0; row/按行寫入forCoun ts; colu mn um+) /* bands * row+ colum num *typetype;type num+)+type num);(int colu mnum =0; colum num pixCom讀取列寫入int startpos = pixComCou nts * type* bands + bandnum * type;for (int type num =0; type num /讀取數(shù)據(jù)
17、基本單元類型輸入數(shù)據(jù)outputF.WriteByte(btsstartposoutputF.Flush();/保存緩存文件outputF.Close();/關(guān)閉撤銷變量文件outputF.Dispose();Ope n);e.CreateNew);in putF.CIose();in putF.Dispose(); retur nbln Success;/bsq轉(zhuǎn)換為bil/源文件名稱與路徑/目標(biāo)文件名稱與路徑/像素行數(shù)/像素列數(shù)/ 波段數(shù)/基本數(shù)據(jù)類型代碼/v/retur ns是否轉(zhuǎn)換成功publicstaticbool BsqToBil( stringstrInputFile,stri
18、ngpixComCou pixL in eCou nts,intban ds, inttype)File, intboolbln Success= true ;FileStreaminputF= new FileStream (strInputFile,FileStream outputF = new FileStream (strOutputFile,int totalsize=pixComCou nts * pixL in eCou ntsstrOutputFileMode .FileModbands *type; /計(jì)算輸入文件總字節(jié)數(shù)if (totalsize!=inpu
19、tF.Length)return false ;byte bts = new byte totalsize;int num = 0,bt;while (bt=inputF.ReadByte()-1)/讀取出全部字節(jié)數(shù)據(jù),存儲(chǔ)在數(shù)組中btsnum =(byte )bt;n um+;for (introw =0; rowpixLineCounts; row+)/按行寫入數(shù)據(jù)for(intbandnum=0; bandnum bands;bandnum+)/按波段寫入數(shù)據(jù)int startpos = pixComCou nts * pixL in eCou nts * type * bandn um
20、+row*pixComCou nts*type;for (intcolu mnum = 0; colum num pixComCoun ts;colu mn um+)/寫入沒(méi)一列數(shù)據(jù)for (int type num =0; type num type;type num+)/按數(shù)據(jù)基本單元類型輸入數(shù)據(jù)outputF.WriteByte(btsstartpos+ colum num*type+type num);outputF.Flush();/保存緩存文件outputF.Close();/關(guān)閉撤銷變量文件outputF.Dispose();in putF.Close();in putF.Dis
21、pose();retur nbln Success;Ope n);e.CreateNew);/bil轉(zhuǎn)換為bip/源文件名稱與路徑/目標(biāo)文件名稱與路徑/像素行數(shù)/像素列數(shù)/ 波段數(shù)/基本數(shù)據(jù)類型代碼/v/retur ns是否轉(zhuǎn)換成功publicstaticbool BilToBip( stri ngstrI nputFile,stri ngpixComCou pixL in eCou nts,intban ds, inttype)File, intboolbln SuccessFileStreamFileStreamint totalsizetrue ;in putFoutputFnewnewFileStream (strInputFile,FileStream (strOutputFile,pixComCou nts *pixL in eCou ntss
溫馨提示
- 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ù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 系統(tǒng)規(guī)劃課程設(shè)計(jì)
- 椅子美背課程設(shè)計(jì)
- 電動(dòng)車課程設(shè)計(jì)摘要
- 2025年中考道德與法治一輪復(fù)習(xí)之走進(jìn)社會(huì)生活
- 幼兒園工作總結(jié)用心灌溉綻放微笑
- 【八年級(jí)下冊(cè)歷史】第18課 科技文化成就 同步練習(xí)
- 畢業(yè)論文開(kāi)題報(bào)告登記表
- 2024年班組長(zhǎng)個(gè)人總結(jié)(35篇)
- 黃金卷6-【贏在中考·黃金八卷】(原卷版)
- 【期末測(cè)試】滿分預(yù)測(cè)押題卷(B卷·能力提升練)(解析版)
- 張家爺爺?shù)男』ü?
- 高中思想政治-高三一輪復(fù)習(xí)講評(píng)課教學(xué)課件設(shè)計(jì)
- 自動(dòng)噴水滅火系統(tǒng)的設(shè)計(jì)計(jì)算
- 教師評(píng)職稱個(gè)人綜述
- 旅游景區(qū)組織機(jī)構(gòu)
- LSI-陣列卡操作手冊(cè)
- 漢字文化解密(華中師范大學(xué))超星爾雅學(xué)習(xí)通網(wǎng)課章節(jié)測(cè)試答案
- 黑龍江省哈爾濱市八年級(jí)上學(xué)期物理期末考試試卷及答案
- 商業(yè)綜合體設(shè)計(jì)說(shuō)明書
- GB/T 19587-2017氣體吸附BET法測(cè)定固態(tài)物質(zhì)比表面積
- 比賽車門凹陷修復(fù)
評(píng)論
0/150
提交評(píng)論