【发布时间】:2011-09-21 19:37:50
【问题描述】:
在我的 C# Silverlight 应用程序中,我尝试使用 FJCore 类库以压缩的 JPEG 传输语法解码 DICOM 图像。
DICOM 图像通常以 12 位精度压缩。当尝试使用原始 FJCore 源代码解码这样的图像时,我得到一个异常说“不支持的编解码器类型”,因为在原始 FJCore 实现中只有 SOF0(基线 DCT)和 SOF2(渐进式 DCT)帧开始标记是支持的。如果我将实现更改为也接受 SOF1 标记(扩展序列 DCT)并将 SOF1 帧以与 SOF0 帧相同的方式处理,则图像会被解码,但只考虑 8 位。
使用修改后的 FJCore 库解码后,典型的 12 位精度图像现在如下所示:
理想情况下,图像应如下所示:
据我从 FJCore 实现中得知,图像精度记录在 JpegFrame 类中,但从未使用过。最初的 FJCore 实现似乎只完全支持 8 位精度的灰度图像。
我计划“不顾一切”并尝试自己扩展 FJCore 以支持灰度图像的 12 位精度。但在我这样做之前,我想我应该在 StackOverflow 中提出这个问题,看看有没有人遇到过并解决过这个问题?在这种情况下,我很高兴知道您是如何解决问题的。
提前非常感谢!
安德斯@Cureos
【问题讨论】:
-
@Hans,很抱歉您不喜欢我向 SO 发布问题的方式。在最好的情况下,FJCore 将拥有一个活跃而充满活力的用户或开发者论坛,但不幸的是,自 2009 年初以来,没有任何开发或开发者互动的迹象。我注意到 FJCore 已经在 SO 上讨论过几次(甚至有它的自己的标签)所以我借此机会在这里发布我的问题。我并不是要找人来做这项工作,但如果有人知道 12 位精度问题的开源解决方案,这将对我(以及可能的其他开发人员)有很大帮助。
-
快速查看源代码后,编解码器似乎能够读取 12 位图像。查看上面的图像,我会说必须将 VOI/LUT 变换应用于 FJCore 返回的帧编辑:我再次查看图像,现在它看起来不再像 VOI/LUT 问题了。高位被简单截断
-
感谢 Paolo 抽出宝贵时间调查此事。我怀疑有截断错误;很高兴您能够确认这一点。
标签: c# silverlight jpeg dicom fjcore