применение знака к изображению dicom для 16 бит

Я пытаюсь разработать DICOM просмотрщик изображений. Я успешно расшифровал буфер изображения. Я храню все значения пикселей изображения в unsigned char буфер в C ++.

Теперь, когда я отображаю изображение, оно работает нормально для изображений с пиксельным представлением (0028,0103) = 0. Может кто-нибудь показать мне, как применить это преобразование со знаком в эти декодированные буфера. Я не знаю, как преобразовать этот бит со знаком в бит без знака (я думаю, что обычное преобразование с использованием typecast не работает). Пожалуйста, опубликуйте реплей для 16-битного изображения, это то, что мне действительно нужно сейчас.

Я пытаюсь создать зрителя с нуля, который просто выводит изображение на экран. Я успешно завершил декодирование и отображение изображения dicom. Но когда я пытаюсь открыть изображение с пиксельным представлением (тег 0028,0103) = 1, изображение отображается неправильно. Преобразование из 16-битного в 8-битное выполняется вместе с применением уровня и ширины окна (значение находится внутри изображения dicom), преобразование просто линейное.

3

Решение

Убедитесь, что правильно считывает данные пикселей в короткий массив со знаком, принимая во внимание TransferSyntax (endianess). Затем примените уравнение управления окнами из стандарта DICOM. При настройке ymin = 0 достигается ymax = 255 с масштабированием до 8 бит.

В целом, при обработке данных пикселей DICOM необходимо учитывать еще больше:

  • Фотометрическая интерпретация
  • Биты хранятся, старший бит
  • Модальность LUT (изменение масштаба наклона / перехвата или таблицы поиска, хранящейся в заголовке DICOM)

Я предполагаю, что фотометрическая интерпретация имеет вид MONOCRHOME2, High Bit = Bits Stored — 1, Модальность LUT — преобразование идентичности (Slope = 1, Intercept = 0).

Другие SO сообщения, связанные с этой темой:

Преобразование пиксельных данных в 8 бит

Пиксельная интерпретация данных

0

Другие решения

Других решений пока нет …