Почему я должен вычитать мои значения пикселей изображения dicom из 2 ^ 15, когда я использую dcmtk?

Я использую dcmtk для чтения изображений dicom, и у меня есть следующий атрибут с новыми образцами:

(0028,0004) Photometric Interpretation: MONOCHROME2
(0028,0010) Rows: 512
(0028,0011) Columns: 512
(0028,0030) Pixel Spacing: 0.4688\0.4688
(0028,0100) Bits Allocated: 16
(0028,0101) Bits Stored: 16
(0028,0102) High Bit: 15
(0028,0103) Pixel Representation: 1
(0028,0106) Smallest Image Pixel Value: 0
(0028,0107) Largest Image Pixel Value: 2732
(0028,1050) Window Center: 1366
(0028,1051) Window Width: 2732

Я использую getOutputData (16) для чтения данных int16_t. Это меня удивило, потому что значения отрицательны вблизи -1 * (2 ^ 16), и когда я вычитал значения на 2 ^ 15, все кажется нормальным, и я могу видеть изображения! 🙁

Теперь у меня есть два вопроса:

  1. Почему я должен вычесть значение 2 ^ 15, и все идет хорошо? Здесь нет значение заполнения доступно на изображении!
  2. В документе getOutputData, речь идет о Представленные данные пикселей всегда без знака.. Что это означает, особенно, когда данные моего изображения подписаны, потому что атрибут (0028,0103) говорит это мне? Если этот метод не подходит, могу ли я получить реальные данные с помощью dcmtk?

2

Решение

Ключ является Пиксельное представление (0028,0106) элемент данных.

PixelRepresentation = 0 -> unsigned
PixelRepresentation = 1 -> signed

В вашем случае у вас есть значение «1», поэтому вы должны прочитать и интерпретировать значения как целые числа со знаком.

Вы можете найти дополнительную информацию Вот.

5

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

Никогда не использовал dcmtk, но похоже, что вы должны применить параметры наклона / пересечения модальности VOI, чтобы получить правильные числа.

Увидеть изменить масштаб наклона и изменить масштаб а также Ширина окна и центр расчета изображения DICOM.

2

Согласно документации getOutputData применяет VOI презентации перед рендерингом, поэтому вы всегда получаете неподписанные данные.
Итак, если вы запросите 16-битные данные, вы получите пиксели в диапазоне от 0 до 65535, независимо от минимальных и максимальных значений, указанных в наборе данных; это потому, что возвращаемые данные предназначены для отображения, это не исходные данные, хранящиеся в изображении.
Я думаю, что вы должны просто сдвинуть значения на 8 бит или просто запросить 8-битные данные (даже если изображение 16-битное): я не думаю, что ваша графическая карта в любом случае может обрабатывать 16-битную шкалу серого.

0

заголовок DICOM говорит, что данные хранятся в файле DICOM как значение со знаком, но похоже, что документация говорит, что getOutputData преобразует их в значение без знака. Итак, попробуйте прочитать вывод getOutputData как uint16_t вместо int16_t.

0

Я нашел ответ. Это объяснили Вот хорошими официальными разработчиками. См. Страницу 2. Это полностью связано с инструментарием DCMTK.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector