[英]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文件中拉出。 它在網站上提供了有關如何操作的教程。
您必須執行以下操作
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.