小编kor*_*jwa的帖子

在nema.org DICOM文件中解码无损jpeg

几年前我写了一个jpeg压缩器/解压缩器,它可以处理无损和有损的jpeg文件.它运行良好,但并不总是正确解码DICOM文件中的jpeg流.

我很了解jpeg,但我对DICOM知之甚少.DICOM中的无损jpeg不可能符合jpeg ISO标准.必须进行一些修改,硬编码,或者通过jpeg文件流之外的DICOM文件中的某个参数进行修改.

我的代码在大多数示例DICOM文件(compsamples_jpeg.tar)上都失败了:ftp: //medical.nema.org/MEDICAL/Dicom/DataSets/WG04/

这是当我解码这个集合中的第一个无损jpeg(IMAGES\JPLL\CT1_JPLL)时会发生什么:

dicom解码图像

左图像是从我的代码渲染的,右边是由在线DICOM阅读器呈现的:www(点)ofoct(点)com(斜杠)查看器(斜杠)dicom-viewer-online(点)html

(x)MedCon是一个开源的DICOM读取器,它与我的代码完全相同,所以我不是唯一有这个问题的人.xmedcon dot sourceforge dot net

我已经逐字节地阅读了这个jpeg流,绘制了霍夫曼树并用铅笔和纸计算了霍夫曼代码,我的代码完全按照它应该做的去做.这是霍夫曼代码:

  • 0 00
  • 4 01
  • 3 100
  • 5 101
  • 1 1100
  • 2 1101
  • 6 1110
  • 7 11110
  • 8 111110
  • 9 1111110
  • 12 11111110
  • 11 111111110
  • 10 1111111110
  • 15 11111111110

这是SOS标记之后的压缩数据:

  • ff 00 de 0c 00(ff为填充字节后的00)
  • 11111111 11011110 00001100 00000000
  • 11111111110 si = 15
  • 111100000110000 diff = 30768

在线查看器说第一个像素值是-3024.如果这是正确的,第一个diff值应该是-3024,但事实并非如此.

在此之后,我的代码正确地解码了大约2/5的图像,但随后解码了一个非常不准确的diff值:

  • d2 a1 fe ff 00 e0(ff为填充字节后的00)
  • 1010111 10100001 11111110 11111111 11100000

  • 101 si = 5

  • 01111 …

jpeg dicom

6
推荐指数
2
解决办法
445
查看次数

标签 统计

dicom ×1

jpeg ×1