在我的DICOM应用程序中,我正在尝试使用FJCore类库以压缩的C#传输语法解码DICOM图像。
DICOM图像通常以12位精度压缩。当尝试使用原始FJCore源代码解码这样的图像时,我得到了一个异常,提示“不支持编解码器类型”,因为在原始FJCore实现中,只支持SOF0 (基线DCT)和SOF2 (渐进式DCT)帧开始标记。如果我将实现更改为也接受SOF1标记(扩展的Sequential DCT),并以与SOF0帧相同的方式处理SOF1帧,则图像将被解码,但只占8位。
使用修改后的FJCore库解码后,一个典型的12位精度图像现在如下所示:
理想情况下,图像应如下所示:
就我从FJCore实现中所能看出的,图像精度记录在JpegFrame类中,但从未使用过。最初的FJCore实现似乎只完全支持8位精度的灰度图像。
我计划“迎难而上”,并尝试自己扩展FJCore以支持12位精度的灰度图像。但在此之前,我想我应该在StackOverflow中提出这个问题,看看以前是否有人遇到并解决了这个问题?那样的话,我会很高兴知道你是如何解决这个问题的。
首先要感谢大家!
地址: Anders @ Cureos
发布于 2012-01-06 01:20:38
我刚刚更新了我自己的JPEG解码器来处理扩展模式,我需要改变的是我的逆DCT。在更改代码之前,输出看起来与上面的示例图像类似。我一直存储来自熵解码的16位系数值,但我的DCT计算破坏了较大的值,因为在进行数学计算时,使用16位整数来保存临时值。我将DCT代码更改为使用32位整数进行计算,这解决了问题。
https://stackoverflow.com/questions/7505630
复制相似问题