版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Dicom格式文件解析器學(xué)數(shù)字圖像與通訊,這里講的暫不涉及通訊那方面的問(wèn)題只講*.dcm也就是diocm格式文件的讀取,讀取本身是沒(méi)啥難度的無(wú)非就是字節(jié)碼流處理。只不過(guò)確實(shí)比較繁瑣。分析整體結(jié)構(gòu)先是128字節(jié)所謂的導(dǎo)言部分,說(shuō)俗點(diǎn)就是沒(méi)啥意義的破數(shù)據(jù)跳過(guò)就是了,然后是dataElement依次排列的方式就是一個(gè)dataElement接一個(gè)dataElement的方式排到文件結(jié)尾通俗的講dataElement就是指tag就是破Dicom標(biāo)準(zhǔn)里定義的數(shù)據(jù)字典。tag是4個(gè)字節(jié)表示的前兩字節(jié)是組號(hào)后兩字節(jié)是偏移號(hào)比如0008,0018。所有dataElement在文件中都是按 tag排序的 比如00
2、02,0001 0002,00020003,0011文件整體結(jié)構(gòu)如下:導(dǎo)言(pivainbl)(prefix) 心數(shù)據(jù)長(zhǎng)度額據(jù)值(VF)又把論文里的這圖貼上來(lái)總結(jié)的很好。單個(gè)dataElement的結(jié)構(gòu)如下:顯示VR VR為OBOWOFUTSQUN素結(jié)構(gòu)組號(hào)元素號(hào)VR預(yù)留值長(zhǎng)度數(shù)據(jù)元素值2222(0x00,0x00 )4由數(shù)據(jù)長(zhǎng)度決定顯示VR VR為普通類型時(shí)元素結(jié)構(gòu)(少了預(yù)留那一行)組號(hào)元素號(hào)VR值長(zhǎng)度數(shù)據(jù)元素值2224由數(shù)據(jù)長(zhǎng)度決定隱式VR時(shí)元素結(jié)構(gòu)組號(hào)元素號(hào)值長(zhǎng)度數(shù)據(jù)元素值224由數(shù)據(jù)長(zhǎng)度決定要問(wèn)VR是啥東東,值表示法 啥叫值表示法啊 俺不懂int string short ushort
3、 懂不 就是這個(gè)意思,Dicom標(biāo)準(zhǔn)真坑爹 非要整個(gè)怪怪的 概念。VR總共27個(gè) 跟c#值類型對(duì)應(yīng)關(guān)系我都寫(xiě)好了:string getVF( string VR, byte VF)string VFStr = ;switch (VR)case "SS" :VFStr = (VF,0).ToString();break ;case "US":VFStr = (VF,0).ToString();break ;case "SL" :VFStr = (VF,0).ToString();break ;case "UL" :V
4、FStr = (VF,0).ToString();break ;12345678910111213141516171819202122case "AT" :break ;case "FL" :VFStr = (VF,break ;case "FD" :VFStr = (VF,break ;case "OB":VFStr = (VF,break ;case "OW":VFStr = (VF,break ;case "SQ":VFStr = (VF,break ;case &qu
5、ot;OF":VFStr = (VF,0).ToString();0).ToString();0);0);0);0);break ;2324252627282930313233343536373839404142434445case "UT":46 VFStr = (VF,0);47break;48case "UN":49VFStr =break;51default :52VFStr =break;5455 return VFStr;56 找個(gè)dicom文件在十六進(jìn)制編輯器下瞧瞧給你整明白:uuaooooo00 0。SU Q0 09ua900&
6、#187;09 00UUOdQOSOI 00000000900OQ9QOD0900(100000»02900OR09nsR9003000nsnoO9flM03Q0000000900009000090900oao0ino09000093do009000OS0000OS9SSK0000(1OUa»uo(109900OQ(IO090Q0Q6flaoB00009OSOSOQS80809DIC00909070OQ00的觸09四9990的090900900099岫49434I>呢的6。99554C仙owwo020001GO4F42909002as09OmODaO能095547OS
7、312E3?2E3BO090OOb930麗38ZE35ZE312F34ZE31osaMticfl屹A003眥554928000002.OQtD fer000000(19313133373034ZE39£_1_ UFUP uOO90O9eO312E312E323030393237398(1009091維00mt匕i.n1bH««口.ZPoooamoo31的«3»3S?E31ZE32ZE31000881 $55491C31ZE32ZE3Z3T360000312033303。3130NE332ES92E330990913902fl(113OQS348
8、10904FU646on 99 soso0090SO90900000000000Ud 0000 nos白09QO掇展里800U90 QQ 皿BE 加9Q99 09 9001 02 GO2E 31 3EJZE 32 00?gl 30 ZE34 39 34過(guò)五£8 MH 苣宦耽ZE 302E 35心5300 12 OR2E 37 3Z2E 34 005F 44 43,瓦OHS 匚 t 1 - 1 Tat ¥E L滬 y, « . « JI ( 1 . 2停"H I 丁用卜口一113704.9.4021.3.1 .1UI . .1.2.84a/1 n
9、o(l8.1 .?.1UI.1.2.Z76.0.72 30910.3.0.3.S-4. ._-SH.OFFIS DC所有dataElement從前到后按tag又可簡(jiǎn)單分段:文件元dataElement不受傳輸語(yǔ)法影響總是以顯示VRT式表示 因?yàn)樗锩婢投x了傳輸語(yǔ)法普通 dataElement受傳輸語(yǔ)法影響 顯示VR表示方式還是隱式 VR表不方式像素?cái)?shù)據(jù)dataElement最重要也是最大的一個(gè)數(shù)據(jù)項(xiàng)其實(shí)存儲(chǔ)的就是圖像數(shù)據(jù)幾個(gè)特殊的tag很重要前面說(shuō)過(guò)了 tag就是dicom里定義的字典。文件 元dataElement和跟像素?cái)?shù)據(jù)相關(guān)的 dataElement都很重要,其他的很多 如果全部照顧
10、完的話估計(jì)得寫(xiě)上千行switch語(yǔ)句吧,所以沒(méi)有必要一般我們一般只關(guān)鍵的tag。并且在隱式語(yǔ)法下要確定VR也必須根據(jù)字典來(lái)確定關(guān)鍵的tag如下:1 string getVR( string tag)2 3 switch (tag)4 case "0002,0000")5960case ".jpg"61(filename,62break;63case ".bmp":64(filename,65break;66case ".png":67(filename,68break;69default :70break;7172
11、73public bool getImg( )ubstring( 5);82 cols = (tags"0028,0011" .Substring( 5);8384colors =(tags"0028,0002" .Substring(5);85dataLen=(tags"0028,0100" .Substring(5);86validLen=(tags"0028,0101" .Substring(5);88gdiImg =newBitmap(cols, rows);8990 BinaryReader dicomF
12、ile =newBinaryReader(fileName);9192;9394long reads = 0;95for ( inti =0; i < ; i+)9697for( int j =0; j < ; j+)9899if (reads >= pixDatalen)100break ;101byte pixData = (dataLen /colors);102reads += ;103104Color c = ;105if (colors =1)106107int grayGDI;109double gray = (pixData, 0);110oString(&q
13、uot;x4" ) +152().ToString("x4" );153154stringVR = ;155UInt32 Len =0;156/讀取VR跟Len157/對(duì)OB OW S趣做特殊處理先置兩個(gè)字節(jié)0然后 4 字節(jié)值長(zhǎng)度158/這些都是在讀取VR一步被阻斷的情況159if ( 0,4) = "0002" )/ 文件頭 特殊情況160161VR =new string ( 2);162163if(VR = "OB" | VR = "OW" | VR ="SQ" | VR = &
14、quot;OF" | VR ="UT" | VR ="UN")164165166Len = ();167168169170171"fffe,e00d"172173174175176況177178179180"SQ" | VR181182183184185elseLen = ();else if (tag ="fffe,e000"| tag =| tag = "fffe,e0dd" )/ 文件夾標(biāo)簽VR ="*" ;Len = ();else if
15、 (isExplicitVR = true) 有無(wú) VR 的情VR =new string ( 2);if (VR = "OB" | VR = "OW" | VR = "OF" | VR = "UT" | VR ="UN");Len = ();else186Len = ();else if (isExplicitVR = false )VR = getVR(tag);/ 無(wú)顯示 VR 時(shí)根據(jù) tag 一真煩啊。Len = ();/ 判斷是否應(yīng)該讀取VF 以何種方式讀取VF/這些都是在讀取VF 一
16、步被阻斷的情況byte VF = 0x00 ;if (tag ="7fe0,0010" )/ 圖像數(shù)據(jù)開(kāi)始了pixDatalen = Len;pixDataOffset =;VR ="UL" ;VF = (Len);else if (VR = "SQ" && Len = | (tag =187188189190個(gè)一個(gè)去191192193194195196197198199200202203204205"fffe,e000"206&& Len = ) / 靠 遇到文件夾開(kāi)始標(biāo)簽了207
17、208209210211212213214215216217218(tag =219220221222223224225226227if (enDir = false )enDir =true ;(0, ;folderTag = tag;elseleve+;/VF 不賦值else if (tag = "fffe,e00d" && Len = |"fffe,e0dd" && Len = ) / 文件夾結(jié)束標(biāo)簽if (enDir = true )enDir =false ;elseleve-;229else230VF = (i
18、nt )Len);231232string VFStr;233234VFStr = getVF(VR, VF);235236/ 針對(duì)特殊的tag 的值的處理237/特別針對(duì)文件頭信息處理238if(tag ="0002,0000" )239240fileHeadLen = Len;241fileHeadOffset =243else if (tag ="0002,0010" )/ 傳輸語(yǔ)法關(guān)系到后面的數(shù)據(jù)讀取244245switch (VFStr)246247case "0" : / 顯示 little248isLitteEndian
19、 =true ;249250251252253254255256257258259260261262263264265搜集代266"fffe,e000"267268isExplicitVR =true ;break;case "0" : / 顯示 bigisLitteEndian =falseisExplicitVR =true ;break;case "" : / 隱式 littleisLitteEndian =true ;isExplicitVR =false ;break;default :break;for ( int i =
20、1; i <= leve; i+)tag ="-" + tag;數(shù)據(jù)/if (VR = "SQ" && Len = | (tag =&& Len = | leve >0) / 文件夾標(biāo)簽代(tag +"(" + VR + ") : " + VFStr);270else if (tag = "fffe,e00d" && Len = |(tag = "fffe,e0dd" && Len = ) && leve =0)/ 文件夾結(jié)束標(biāo)簽272(tag +273(folderTag +274275else276(tag,277278271279 "(" + VR + ") : " + VFStr)"SQ", ();"(" + VR + "):" + VFStr);好了收工。測(cè)試下成果1 if () !=2 return ;34 string fileName = ;56 handler = newDicom
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024綜合崗位勞動(dòng)協(xié)議模板版B版
- 2024年版城市出租車租賃協(xié)議樣式版B版
- 2025年消防安全管理咨詢及標(biāo)準(zhǔn)制定合同2篇
- 2024-2025學(xué)年高中歷史第七單元復(fù)雜多樣的當(dāng)代世界第24課兩極對(duì)峙格局的形成學(xué)案含解析岳麓版必修1
- 2024-2025學(xué)年高中語(yǔ)文課時(shí)分層作業(yè)4歸去來(lái)兮辭并序含解析新人教版必修5
- 二零二四年度時(shí)尚傳媒廣告投放及制作合同
- 2025年度道路照明燈具批發(fā)合同范本3篇
- 2025年酒店客房銷售渠道建設(shè)與維護(hù)合同3篇
- 2025年度綠色生態(tài)農(nóng)業(yè)種植承包合同范本3篇
- 2025年蔬菜種植戶與農(nóng)產(chǎn)品電商平臺(tái)合作合同范本3篇
- GB/T 8005.2-2011鋁及鋁合金術(shù)語(yǔ)第2部分:化學(xué)分析
- GB/T 37234-2018文件鑒定通用規(guī)范
- GB/T 31888-2015中小學(xué)生校服
- 質(zhì)量檢查考核辦法
- 不動(dòng)產(chǎn)登記實(shí)務(wù)培訓(xùn)教程課件
- 云南省普通初中學(xué)生成長(zhǎng)記錄-基本素質(zhì)發(fā)展初一-初三
- 2023年系統(tǒng)性硬化病診斷及診療指南
- 外科醫(yī)師手術(shù)技能評(píng)分標(biāo)準(zhǔn)
- 《英語(yǔ)教師職業(yè)技能訓(xùn)練簡(jiǎn)明教程》全冊(cè)配套優(yōu)質(zhì)教學(xué)課件
- 采購(gòu)控制程序
- 六年級(jí)上冊(cè)數(shù)學(xué)簡(jiǎn)便計(jì)算題200題專項(xiàng)練習(xí)
評(píng)論
0/150
提交評(píng)論