C#:使用Silverlight FJCore库以12位精度解码JPEG图像?

时间:2011-09-21 19:37:51

标签: c# silverlight jpeg dicom fjcore

在我的C#Silverlight应用程序中,我尝试使用FJCore类库以压缩JPEG传输语法解码DICOM图像。

DICOM图像通常以12位精度压缩。当尝试使用原始FJCore源代码解码这样的图像时,我得到一个异常,说“不支持的编解码器类型”,因为在原始的FJCore实现中,只有SOF0(基线DCT)和SOF2(渐进式DCT)帧开始标记是支持的。如果我改变实现也接受SOF1标记(扩展顺序DCT)并以与SOF0帧相同的方式处理SOF1帧,则图像被解码,但只占8位。

在使用修改后的FJCore库进行解码后,典型的12位精度图像现在看起来像这样:

12-bit precision JPEG image encoded to 8-bit precision by FJCore

理想情况下,图片应如下所示:

12-bit precision JPEG image encoded to full 12-bit precision

就我从FJCore实现中所知,图像精度记录在JpegFrame类中,但从未使用过。最初的FJCore实现似乎只支持8位精度的灰度图像。

我计划“以牛角”,并尝试自己扩展FJCore以支持灰度图像的12位精度。但在此之前,我认为我应该在StackOverflow中提出问题,看看是否有人遇到并解决过这个问题?在这种情况下,我很乐意了解你是如何解决这个问题的。

非常感谢提前! Anders @ Cureos

1 个答案:

答案 0 :(得分:2)

我刚刚更新了自己的JPEG解码器来处理扩展模式,我需要改变的是我的逆DCT。在更改代码之前,输出看起来与上面的示例图像类似。我总是存储来自熵解码的16位系数值,但我的DCT计算通过使用16位整数来保存临时值来破坏较大的值。我更改了DCT代码以使用32位整数进行计算,从而解决了这个问题。