的簡單顯示我試圖讀取http://www.barre.nom.fr/medical/samples/名爲「CR-MONO1-10胸」一個簡單的DICOM文件,該文件是一個440x440大小的圖像。DICOM格式的文件圖像
作爲上http://www.dclunie.com/medical-image-faq/html/part1.html expained,圖像數據是在文件的結尾:
換句話說,如果圖像是由256 256,未壓縮的,和12-16位 深(並因此通常,但並非總是存儲爲兩個字節 每像素),那麼我們都知道,該文件將包含 256 * 256 * 2 = 131072字節像素數據在文件的結尾。如果 文件是說145408個字節長,因爲所有的GE Signa的3X/4X文件是 例如,那麼你需要跳過14336個字節的報頭的你到 數據之前。假設逐行開始左上角光柵 順序,嘗試字節順序兩種選擇,處理16至8位 窗口的問題,很快你有 工作站的屏幕上的圖像。
http://people.cas.sc.edu/rorden/dicom/index.html上的數字還表明圖像數據位於文件的末尾。
我使用下面的代碼在這個文件中讀取並顯示圖像:
(define in (open-input-file "CR-MONO1-10-chest" #:mode 'binary))
(define size (* 2 440 440)) ; width and ht are 440
(define ignore (read-bytes (- 387976 size) in)) ; size of file is 387976
(define imgdata (read-bytes size in))
(close-input-port in)
(define img (make-object bitmap% imgdata 440 440))
img
但是,它只能顯示黑白像素的隨機搭配:
使用440 * 440而不是2 * 440 * 440也不起作用。
下面的代碼也不會讀取圖像:
(define img (make-object bitmap% in 'unknown))
這不顯示任何圖像的。
問題在哪裏,我該如何解決?
我對你使用的編碼語言並不熟悉,但你確定你是以16位顯示圖像嗎?也就是說,這是一個單通道16位圖像。還要注意,在這個圖像的頭部,它表示只有10位用於存儲數據 - 所以你應該掩蓋掉每個像素的其他6位 - 如果你忽略它,它可能仍然看起來很好,因爲額外的位可能(但不是保證)爲零。 – whiskeyspider
球拍本身不支持DICOM圖像格式,因此您必須對其進行解碼。編寫整個解碼器不在Stack Overflow的範圍內,所以這個問題太廣泛了。 –
我不想寫整個解碼器。我只是試圖顯示文件末尾的圖像數據。 – rnso