的简单显示我试图读取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