【问题标题】:C#: Decoding JPEG images with 12-bit precision using Silverlight FJCore library?C#:使用 Silverlight FJCore 库以 12 位精度解码 JPEG 图像?
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 感谢比特银行的建议。我会尽快审核 FJCore 代码,看看是否可以按照您建议的方式进行调整。
  • 我已经尝试过了,但到目前为止还没有成功。当我有时间时,我会再尝试几次。
  • 请随时给我写信了解更多详情,如果可以的话,我会为您提供帮助 (bitbank@pobox.com)
  • 如果你把你的图片发给我,我可以帮助你解码一个特定的 MCU 并向你发送我要与你的比较的值,这样你就可以追踪问题发生在哪里。
  • 我还没有完全到那里,但我觉得我已经收到了足够的信息来解决这个问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 2021-02-14
相关资源
最近更新 更多