簡體   English   中英

如何從DICOM圖像的原始數據創建圖像

[英]How to create an image from a raw data of DICOM image

我有來自DICOM圖像的byte[]的原始像素數據。 現在,我想將此byte[]轉換為Image對象。

我試過了:

Image img = Image.FromStream(new MemoryStream(byteArray));

但這對我不起作用。 我還應該使用什么?

要注意的一件事是,dicom“圖像”不一定只是圖像數據。 dicom文件格式包含的內容遠遠超出原始圖像數據。 這可能是您掛斷電話的地方。 考慮檢查dicom文件標准,您應該能夠在Wikipedia文章上找到dicom的鏈接。 這應該可以幫助您弄清楚如何解析您實際感興趣的信息。

您應該使用GDCM。

草根DiCoM是用於DICOM醫療文件的C ++庫。 它會自動包裝到python / C#/ Java(使用swig)。 它支持RAW,JPEG 8/12/16位(有損/無損),JPEG 2000,JPEG-LS,RLE和放氣(zlib)。

它是可移植的,並且已知可以在大多數系統(Win32,Linux,MacOSX)上運行。

參見例如:

像素數據通常(如果不是始終)以DICOM數據結尾。 如果您可以弄清楚寬度,高度,步幅和顏色深度,則應該可以跳到(7FE0,0010)數據元素值,而只是獲取后續字節。 這是大多數普通圖像查看器在顯示DICOM圖像時使用的技巧。

有一個名為EvilDicom( http://rexcardan.com/evildicom/ )的C#庫,可用於將圖像從DICOM文件中拉出。 它在網站上提供了有關如何操作的教程。

您必須執行以下操作

  1. 從文件中識別PIXEL DATA標簽。 您可以使用FileStream逐字節讀取。
  2. 讀取像素數據
  3. 轉換為RGB
  4. 從RGB創建一個BitMap對象
  5. 使用Graphics類在面板上繪制BitMap。

DICOM是一個荒謬的規范,我衷心希望它會在不久的將來得到徹底修改。 也就是說,Offis擁有一個軟件套件“ DCMTK”,該套件非常擅長用各種流行的編碼轉換dicom。 僅嘗試跳過文件的x字節可能對於單個文件來說會很好,但是如果您有一個或多個卷,則可以采用更可靠的策略。 我使用了DCMTK的轉換代碼,只是在圖像位進入pnm之前就對其進行了抓取。 您將在DCMTK中尋找的文件是dcm2pnm或可能是dcmj2pnm,具體取決於編碼方案。

我用運行時標志之一修復的縮放窗口有問題。 DCMTK是開源的,並帶有相當簡單的構建說明。

您正在使用純標准的 DICOM文件嗎? 我一直在維護DICOM解析器兩年多了,但遇到了一些真正的奇怪DICOM文件,這些文件並沒有完全滿足標准(公司實現了“自己的”扭曲標准DICOM文件)。 將字節數組刷新到文件中,然后測試圖像查看器(irfanview,picassa或其他任何對象)是否可以顯示它。 如果您的代碼使用的是正常的JPEG流,那么根據我的經驗,有99.9999%的機會是因為文件以某種奇怪的方式破壞了標准(並且相信我,醫療公司做了很多事情)

另請注意,DICOM標准支持JPEG標准的多種變體。 可能是Bitmap類不支持您從DICOM文件獲取的數據。 您能寫下傳輸語法嗎?

歡迎您將文件發送給我(如果不大)yossi1981@gmail.com,我可以檢查一下,有一段時間我一直在對DICOM文件進行十六進制編輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM