Применение знака к изображению dicom для 16 бит
Я пытаюсь разработать средство просмотра изображений DICOM. Я успешно расшифровал буфер изображения. Я храню все значения пикселей изображения в unsigned char
буфер в C++.
Теперь, когда я отображаю изображение, оно работает нормально для изображений с пиксельным представлением (0028,0103) =0. Может кто-нибудь показать мне, как применить это преобразование со знаком в эти декодированные буфера. Я не знаю, как преобразовать этот бит со знаком в бит без знака (я думаю, что обычное преобразование с использованием typecast не работает). Пожалуйста, опубликуйте реплей для 16-битного изображения, это то, что мне действительно нужно сейчас.
Я пытаюсь создать зрителя с нуля, который просто выводит изображение на экран. Я успешно завершил декодирование и отображение изображения dicom. Но когда я пытаюсь открыть изображение с пиксельным представлением (тег 0028,0103) =1, изображение отображается неправильно. Преобразование из 16-битного в 8-битное выполняется вместе с применением уровня и ширины окна (значение находится внутри изображения dicom), преобразование просто линейное.
1 ответ
Убедитесь, что правильно считывает данные пикселей в короткий массив со знаком, принимая во внимание TransferSyntax (endianess). Затем примените оконное уравнение из стандарта DICOM. При настройке ymin=0 достигается ymax = 255 с масштабированием до 8 бит.
В целом, при обработке данных пикселей DICOM необходимо учитывать еще больше:
- Фотометрическая интерпретация
- Биты хранятся, старший бит
- Модальность LUT (изменение масштаба наклона / перехвата или таблицы поиска, хранящейся в заголовке DICOM)
Я предполагаю, что фотометрическая интерпретация имеет вид MONOCRHOME2, High Bit = Bits Stored - 1, Модальность LUT - преобразование идентичности (Slope = 1, Intercept = 0).
Другие SO сообщения, связанные с этой темой: