2016-07-15 16 views
2

У меня есть вопрос о стандарте DICOM и библиотеке libjpeg. В стандарте DICOM, есть, в частности, передача Синтаксис:libjpeg и lossless JPEG

JPEG Lossless, неиерархические, первого порядка Предсказание (Процессы 14 [Значение Выбор 1]): По умолчанию Передача Синтаксис Lossless JPEG Сжатие изображения

Насколько я знаю, этот Синтаксис перевода соответствует формату JPEG-1 Lossles. я начал исследовать libjpeg библиотеки, и я обнаружил, что он не поддерживает Lossless JPEG, как указано здесь (?): JPEG Lossless in DICOM

Кроме того, в libjpeg документации есть часть, говоря:

Неподдерживаемого вариант ISO включают: * иерархическое хранение * Lossless JPEG * DNL маркерных * нецелых коэффициентов подвыборки

Однако в коде библиотеки, в параметрах сжатия структуры jpeg_compress_struct есть поле:

boolean lossless;  /* TRUE=lossless encoding, FALSE=lossy */ 

Что все это значит есть? Я действительно смущен. Может ли кто-нибудь описать, какие стандарты JPEG поддерживаются библиотекой? Кроме того, как установить параметры сжатия для совместимости с стандартом DICOM JPEG Lossless?

+0

Оказывается, что libjpeg поддерживает режим без потерь (JPEG-LS), которая отличается из JPEG без потерь, с которым вы работаете. Я не видел никаких реализаций этого кодека, кроме как в библиотеках DICOM. Я написал свой собственный, и на самом деле он очень упрощен. – BitBank

+0

Вы уверены, что libjpeg поддерживает JPEG-LS? Я думаю, что это более поздняя модификация JPEG и libjpeg - насколько я знаю - поддерживает «базовый» – Artyshan

+0

Я не уверен на 100%, но я не видел ничего похожего на то, что это вам поможет. Дело в том, что для декодирования DICOM без потерь JPEG требуется около 100 строк кода C (для конкретного алгоритма без потерь). Он похож на PNG с фильтром и значениями дельты, закодированными с макс. Длиной 16 кодов Хаффмана. – BitBank

ответ

1

Давайте сначала сделаем некоторые разъяснения. Начнем с знаменитого выпуска JPEG 6b (aka 62). Начните с чтения кода с here. Вы обнаружите, что не упоминается ваш boolean lossless. libjpeg 6b является эталонным кодовая, который служил две вилки:

  • Guido Vollbeding (IJG сопровождающего): libjpeg 7 и выше с известным SmartScale расширением
  • dcommander libjpeg-турбо, в частности, говорится в комментарии here.

Итак, если это libjpeg, о котором вы говорили, тогда да, он не поддерживает режим без потерь, указанный в стандарте. Патч без потерь был создан Кеном Мерчисоном, и вы все равно сможете его найти (например, here). Он должен применяться непосредственно к libjpeg 6b. Если вы не хотите исправлять lib самостоятельно, посмотрите на GDCM или DCMTK, так как они оба используют удобную копию libjpeg + знаменитого патча без потерь (с некоторыми исправлениями, благодаря команде DCMTK).

На этом этапе это должно ответить на ваш вопрос.

Для получения более подробной информации о libjpeg (IJG) и libjpeg-турбо информаций я предлагаю вам прочитать информацию от:


В случае, если вы все еще читаете , Я стараюсь, чтобы вы также быстро посмотрели на другую библиотеку (специально), также называемую libjpeg, см. Здесь, в.. В частности, перейдите по файлу README (here). И вы обнаружите, что этот libjpeg представляет собой полную реализацию ITU 81 (с потерями, без потерь, 8/12/16 бит и даже иерархическое все в одном коде без необходимости делать несколько компиляций!).

И для полноты картины, я обнаружил, что следующие ссылки были очень полезными:

+0

Спасибо, вы прояснили это очень хорошо :) – Artyshan

 Смежные вопросы

  • Нет связанных вопросов^_^