Разница между dcm2pnm, dcmj2pnm и dcml2pnm

Название говорит само за себя. В чем разница между dcm2pnm (http://support.dcmtk.org/docs/dcm2pnm.html), dcmj2pnm (http://support.dcmtk.org/docs/dcmj2pnm.html) и dcml2pnm (http://support.dcmtk.org/docs/dcml2pnm.html) команды набора инструментов dcmtk (http://support.dcmtk.org/docs/pages.html)? Все они, кажется, конвертируют изображения dicom в другие форматы. Существуют ли какие-либо особые ситуации, когда следует предпочесть один из них другим?

Изменить: кажется, что dcml2pnm поддерживает больше форматов. Почему бы не использовать это для всех целей? Каковы преимущества других команд?


person rnso    schedule 11.04.2017    source источник


Ответы (2)


Я разработчик DCMTK.

Различие между тремя инструментами командной строки DCMTK заключается в следующем: поддержка сжатых изображений DICOM и выходных форматов.

  • dcm2pnm был оригинальным инструментом, который был разработан более 20 лет назад и изначально поддерживал только формат изображений PNM/PGM для вывода (поэтому инструмент называется dcm2pnm, а не dcm2img или тому подобное) . А поскольку в то время DCMTK не поддерживал никаких синтаксисов инкапсулированной передачи (т. е. сжатия), можно было читать только несжатые изображения DICOM.
  • dcmj2pnm находится в подмодуле DCMTK dcmjpeg и добавляет поддержку изображений DICOM, сжатых в формате JPEG (на основе библиотеки IJG), а также формат изображения JPEG для вывода.
  • dcml2pnm находится в подмодуле DCMTK dcmjpls и добавляет поддержку изображений DICOM, сжатых в формате JPEG-LS (на основе библиотеки CharLS). Он не поддерживает обычный JPEG.

Все это, вероятно, более очевидно из пакета с исходным кодом, чем из бинарного пакета, но это также упоминается в упомянутой выше документации (см. раздел «Описание»).

Если вы спросите, почему существует три разных инструмента (на самом деле, есть еще четвертый для поддержки JPEG-2000, но он не является частью общедоступного DCMTK), мой ответ будет таким: это в основном по историческим причинам, но также и для Причина сохранения зависимостей между различными модулями DCMTK как можно более простыми. Кроме того, мы рассматриваем инструменты командной строки как своего рода примеры приложений базовой библиотеки классов C++. Итак, если вам нужен инструмент, поддерживающий все схемы сжатия изображений, доступные в DCMTK, написать такой инструмент будет несложно.

person J. Riesmeier    schedule 12.04.2017
comment
Очень хорошо объяснил. Возвращают ли эти функции значение true/false или 1/0 и т. д., чтобы указать, можно ли правильно открыть и преобразовать файл dicom? - person rnso; 12.04.2017
comment
@rnso Да, они возвращают эти коды выхода. Также планируется использовать разные коды выхода для разных типов ошибок и документировать их на справочной странице, но это все еще в нашем списке дел (конечно, для всех инструментов командной строки DCMTK). - person J. Riesmeier; 12.04.2017

dcmj2pnm добавляет кодеки JPEG к функциональным возможностям dcm2pnm. Таким образом, он может обрабатывать данные DICOM, сжатые в формате JPEG, и создавать выходные изображения в формате JPEG. Так что это расширенный набор функций dcm2pnm. Я думаю, что это так, потому что dcmtk предлагает разные варианты компиляции, которые позволяют включать/исключать libjpeg. Просто отражает параметры набора инструментов для сопутствующих инструментов командной строки. Подтверждается списком форматов файлов при запуске с опцией -h

Для dcml2pnm я не уверен, но это хорошее предположение: то же, что и для JPEG, но включает кодировщик JPEG-LS, который является еще одним необязательным сторонним набором инструментов для dcmtk.

person kritzel_sw    schedule 11.04.2017