2016-01-28 3 views
4

Я работаю с файлами DICOM с нескольких дней, используя FO-DICOM.Понимание BPP внутри изображений DICOM

Я использую набор файлов dicom для своих тестов, и я печатал значения «Фотометрическая интерпретация» и «Пример на пиксель», чтобы лучше понять, какие изображения я работать с.

Результат был «MONOCHROME2» для фотометрической интерпретации и «1» для образца на пиксель.

То, что я понял, прочитав часть 3 стандарта, состоит в том, что MONOCHROME2 представляет собой шкалу серого, начиная с черного для ее минимальных значений.

Но какой именно пример на пиксель? Я думал, что это было, представляющим число байт (а не бит) на пиксель (что было бы логично, чтобы иметь 8 битого на пиксель для шкалы серого права?)

Но моя проблема в том, что на самом деле , у моих изображений, похоже, 32 бит/с. Я работаю с 512 * 512 пикселями изображений, и я преобразовал их в массивы байтов. Поэтому я ожидал массивы 512 * 512 = 262144 байт. Но я получаю массивы 1048630 байт (что немного больше 4 * 262144)

У кого-нибудь есть объяснение?

EDIT:

Вот некоторые из моих DATAS:

PhotometricInterpretation=MONOCHROME2 
SamplePerPixel=1 
BitsAllocated=16 
BitsStored=12 
HighBit=11 
PixelRepresentation=0 
NumberOfFrames=0 
+0

О образцах данных: Беззнаковые 12-разрядные данные, закодированные с 16-битным выравниванием, нижние 12-байтовые значения пикселя. 0 - черный, 4096 - белый. Если это CT, я ожидаю, что у него будет атрибут RescaleSlope около -1000, который отображает значения пикселей в единицы hounsfield. Когда Rows = Cols = 512, pixeldata должен быть 0,5 МБ (512 * 512 * 2 байта), иначе набор данных неправильно кодируется. NumberOfFrames = 0 - это ошибка кодирования. –

+0

... предположил, что набор данных несжатый –

+0

Спасибо, я буду манипулировать этими данными, чтобы тренироваться и, возможно, вернуться позже, если еще что-то неясно :) – Charrette

ответ

5

Атрибут (0028,0002) SamplesPerPixel относится только цветные изображения и сообщает вам количество самолетов, которые присутствуют в изображение (например, 3 для RGB), так что у вас есть

PhotometricInterpretation=RGB 
SamplesPerPixel=3 

С 8 бит на пиксель (я вновь BPP ниже). Пока у вас есть PhotometricInterpretation = MONOCHROME1 или MONOCHROME2, вы можете ожидать, что SamplesPerPixel будет 1 и больше ничего.

Что вы должны принять во внимание, является количество бит на пиксель:

BitsAllocated (0028,0100) 
BitsStored (0028,0101) 
HighBit (0028,0102) 

Они показывают, сколько битов используются для кодирования значения пикселя (BitsAllocated) и какие из этих битов действительно содержат оттенки серого (BitsStored, HighBit). HighBit является нулевым и обычно, но не обязательно = BitsStored-1

Пример для иллюстрации: Для изображений с КТ очень часто выражаются серые значения в единицах hounsfield, которые варьируются от -1000 до +3000. Они представлены 12 битами, которые хранятся с 2-байтового выравнивания, так что

BitsAllocated (0028,0100) = 16 
BitsStored (0028,0101) = 12 
HighBit (0028,0102) = 11 

Еще одна степень свободы PixelRepresentation, который говорит вам, если данные пикселей кодируется без знака (0) или в 2s дополнения (1). Я видел оба изображения CT, однако подписанные пиксельные данные довольно необычны для типов изображений, отличных от CT.

В вашем примере я бы предположил, что Bits Allocated == 32 или (не очень вероятно), что у вас есть набор данных, содержащий несколько изображений ('frames'), поэтому NumberOfFrames (0028,0008)> 1. Если количество кадров отсутствует, вы можно смело предположить наличие только одного кадра.

Я немного упростил здесь, особенно о цветных изображениях, но я думаю, что это достаточно сложно ;-). В принципе, DICOM предлагает любую мыслимую степень свободы кодирования пиксельных данных и описания кодировки в заголовке.

Я думаю, что я рекомендовал вам взглянуть на DCMTK в недавнем сообщении. Класс DicomImage имеет приятный интерфейс (getInterData()), который заботится обо всех этих вещах и предоставляет данные пикселов, считанные из файла DICOM в нормализованном формате.

[EDIT]: Не стесняйтесь публиковать дамп DICOM вашего набора данных здесь, я бы посмотрел на него и рассказал вам, как интерпретировать данные пикселей.

+0

Спасибо за ваш ответ, я все еще пытаюсь использовать fo-dicom, я позже посмотрю на DCMTK, возможно, на данный момент я пытаюсь понять, как это работает! Я отредактировал мой пост – Charrette

+0

Не хочу говорить вам об использовании DCMTK, но я не знаю FO-DICOM –

+0

Если Sample Per Pixel (0028: 0002) имеет значение больше 1 (3 для изображения RGB), Planar Configuration (0028: 0006), имеющее значение 0, означает поэтапный (RBG, RGB, RGB), а 1 означает цвет по плоскости (красная плоскость, зеленая плоскость и красная плоскость). –

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