【轉帖】醫療數位影像傳輸協定(DICOM)編程簡介

來源:互聯網
上載者:User

剛開接觸dicom時網上可查的資料真是太少了。  
  在此寫出一些心得和經驗和大家分享,希望罈子裡做dicom的網友能夠得到一些啟發。  
  目錄:  
  一   dicom是什嗎?  
  二   dicom檔案結構  
  三   如何編寫dicom程式  
  四   利用開發包開發dicom程式  
  五   dcmtk使用介紹  
  一   dicom是什嗎?  
        dicom全名是醫療數位影像傳輸協定。它是個編碼和資料轉送協議。醫院裡的ct機出來的x光膠片就是遵從這個協議編碼的。當然其他儀器比如核磁共振等等也是如此。平時看到的膠片只是列印出來的dicom檔案的部分資料。ct機所有的操作包括列印、組建檔案、傳輸都要遵從dicom協議。  
        dicom官方網站在這裡   http://medical.nema.org   。dicom英文協議可以在這裡下載。  
        中國PACS論壇   http://www.cnpacs.org   這裡有一個專門討論dicom的板塊裡面有很多資料其中有網友翻譯的dicom中文協議。(本文大部分資料都出自這個論壇)  
  二   dicom檔案結構  
        就是dicom檔案的結構。  
        圖中所用軟體是“jdicom”這是一個用java編寫的免費軟體,這個軟體是我作dicom開發不可缺少的參考。它的網址是   http://www.tiani.com   進入網站在菜單research裡面有“jdicom”一項。由於是java軟體需要下載一個“j2re-1_3_1_14-windows-i586-i.exe”網址在這裡   http://java.sun.com/products/archive/index.html   當然“www.tiani.com”也會有相關聯結。  
   
   
  下面引用pacs論壇上總版主JB的一片文章忘記了。  
  來簡要介紹dicom檔案結構。相信有了上面軟體“jdicom”直接對dicom的觀察和這篇pacs上的文章再加對dicom協議的閱讀後相信對dicom檔案的結構會有一個清晰的瞭解。  
  以下是文章內容:  
          DICOM   檔案格式  
  DICOM   檔案內容在   Part   3   DICOM   IOD   裡定義。CT,   MR,   CR,   DR,   US,   NM,   PET,   XA   等各有自己的內容定義,由共同的專有的部分   (IE   和   Modules)   組成。  
  DICOM   檔案內容由兩個部分組成:存參數的   header   和圖點資料   (pixel   data)。  
  header   只描述映像的基本參數:如病人基本資料、檢驗基本資料、系列資料、位置資料等等。  
  DICOM   的   4   個內容層次:  
  1.   Patient   (病人)  
  2.   Study   (檢驗)  
  3.   Series   (系列)  
  4.   Image   (映像)  
  儘管頭幾層的內容在很多映像裡是相同的,它們在每個影像檔裡都要有。  
  每一層叫一個   Information   Entity,或   IE   (從   relational   database   schema   設計引用而來)。每一層又細分成   Module。每個   Module   裡面的最小單元叫做一個   attribute   或   element。  
  現在舉個例子:CR   映像   (DICOM   Part   3,   A.2.3,   Table   A.2-1    
  1.   Patient   IE:  
  a.   Patient   Module   (參考   C.7.1.1)  
  2.   Study   IE:  
  a.   Study   Module   (參考   C.7.2.1)  
  b.   Patient   Study   Module   (參考   C.7.2.2)  
  3.   Series   IE:  
  a.   General   Series   (參考   C.7.3.1)  
  b.   CR   Series   (參考   C.8.1..1)  
  c.   General   Equipment   (參考   C.7.5.1)  
  4.   Image   IE:  
  a.   Genrral   Image   (C.7.6.1)  
  b.   Image   Pixel   (C.7.6.3)  
  c.   Contrast/bolus   (C.7.6.4)  
  d.   CR   Image   (C.8.1.2)  
  ...  
  i.   SOP   Common   (C.12.1)  
  將這些   modules   (tables)   裡的所有   elements   都找出來就做成了一個   CR   映像的架構。  
  要注意的是這些   module   有些是一定要的   (modatory)   有些是使用者選用的   (user)。  
  到了每個   module   裡   attribute/element   表又有分五類   Type   1,   1C,   2,   2C   和   3。   Type   1   是一定要的,2   也是一定要的但是內容可以是空的。Type   3   則可要可不要。  
  所以濃縮一下,一個   CR   映像裡的元素   (elements)   也不是太多。  
  把這些表格展開後,這些   elements   組成一個   dataset。    
  那麼寫到一個檔案裡或通過網路傳送又是個什麼格式呢?這就要看   Part   5。  
  一個元素   (element)   的結構是:  
  1.   group   tag:   16-bit  
  2.   element   tag:   16-bit  
  3.   length   (or   VR/length):   32-bit  
  4.   data   (bytes   of   length)  
  對應每一個用到的   element   DICOM   標準   Part   6   都定義了一個   group   tag   和   element   tag。比如說:  
  patient   name:   0x0010,   0x0010  
  patient   ID:   0x0010,   0x0020  
  ...  
  VR   說的是   element   格式,比如說   patinet   name   的   VR   是   PN。格式是   last_name^first_name^middle_name^prefix^surfix。那麼我的英文名字就是:   Wang^JB^^Dr.^  
   
  往外寫時要做幾個事情:  
  1.   要把所有元素按   group   tage   和   element   tag   理一遍   (sort)。從小排到大。  
  2.   如果是寫   DICOM   介質的   DICOM   file   還先寫   128   bytes   preamble   (一般是空白),加   "DICM",   加   group   2   Meta   header。(講到   Part   10   時再細說)  
  3.   如果   dataset   裡面含有   Sequence   elements,   sequence   裡面每一個   Item   又是一個   dataset。  
  [注意]:dicom協議共有15章,其中第三章是“資訊對象定義”,第五章是“資料結構和編碼”,第六章是“資料字典”這幾張比較重要。  
  img:http://www.vchelp.net/ASP/cdf_pic/200410/reply_1_746525.jpg  
  三   如何編寫dicom程式  
  自己編寫dicom很困難,編出來的程式經常會有相容性的問題。  
  本人提倡用開發包進行dicom程式編寫,但是為了加深對dicom協議的瞭解還是應該嘗試一下至少看一看別人的代碼。  
  這裡提供兩個程式。這兩個程式都存在相容性的問題,有的dicom檔案會讀不出來。但是作為初學者的參考還是值得一看的。  
  第一個程式是pacs論壇上的總版主JB所寫(對!還是那個人),“DcmBmp轉換程式.rar”主要是把dicom檔案中的像素資訊轉換成bmp檔案。  
  第二個程式是一個pacs論壇上的一個網友wakyrei所寫(由於伺服器資料庫檔案以外遭到破壞這個人在pacs論壇上的所有資訊都已經消失的無影無蹤了),“dcm”此程式相當粗燥讀起來需要一定耐心,作者好像根本不懂怎樣使用mfc,不過其中的dicom類還是值得推敲的。  
  file:http://www.vchelp.net/ASP/cdf_pic/200410/reply_1_746526.rar  
  四   利用開發包開發dicom程式  
        開發dicom的工具包有很多,這裡要說的是dcmtk這個開發包是免費全部開發原始碼。  
        dcmtk開發包的官方網站是   http://www.dcmtk.org   。在左面的DICOM   Software中點擊DCMTK一項就進入了dcmtk下載項。這裡有很多連結。只需要下載兩項:  
  1.DCMTK   3.5.3   -   source   code   and   documentation   (2004-05-27)  
  2.DCMTK   3.5.3   -   support   libraries   for   Windows  
        先別忙著解壓,還需要另外一個軟體來產生工程檔案。這個軟體叫cmake。官方網站是這個   http://www.cmake.org   很多醫學相關的開發包像vtk/itk都需要這個軟體來產生工程檔案。  
  就是cmake開啟dcmtk開發包的樣子。      
  需要說明的是幾個WITH_*選項就是“2.DCMTK   3.5.3   -   support   libraries   for   Windows”解壓出來的東西。點擊兩次configure之後就可以點ok產生工程檔案了。  
        工程檔案編譯好之後程式會產生很多例子程式可以用來參考。舉個例子:運行dcmdata\apps\Debug\dcmdump.exe這個程式。這是一個解析dicom檔案的程式。如果想開發dicom檔案可以參照這個程式。  
        調用庫的時候要注意幾個問題:  
        1.工程設定/cc++/preprocessor/附加元件封裝含路徑。這裡設定標頭檔  
        2.工程設定/link/input/物件程式庫模組。這裡設定庫檔案。  
        3.工程設定/link/project   option/。這裡設定庫檔案路徑。  
        4.工程設定/cc++/code   generation/Use   run-time   library。  
        5.以上幾項需要和例子程式中的設定保持一致。  
  img:http://www.vchelp.net/ASP/cdf_pic/200410/reply_1_746527.jpg  
  五   dcmtk使用介紹  
        由於dcmtk荒茉趍fc下使用。所以需要產生庫之後再調用。  
        這裡給出兩個程式。  
        1.利用dcmtk產生的靜態庫。  
        2.調用靜態庫產生了一個讀dicom目錄檔案的程式。  
  整個程式都是參考dcmtk裡的例子dcmdump.exe做的  
  http://www.vchelp.net/ASP/cdf_pic/200410/reply_1_747225.rar

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.