Все необходимые теги и длины выглядят правильными, но DCMTK Dicomimage всегда не удается декодировать изображение ICON и отчеты: < /p>
. /> генерация палитры и хранение LUT: < /strong> < /h3>
1. GenerateFixedPalette < /strong> < /h4>
[list]
[*] Эта функция создает фиксированную палитру < /strong> из 256 цветов: < /p>
216 из них-«safe-safe» (r, g, b от 0–255 в шагов 51). Оставшиеся 40 сочетаются с черным (0,0,0), поэтому палитра имеет ровно 256 цветов (требуется для 8-битных изображений). < /li>
< /ul>
< /li>
< /ul>
2. Quantizetopalette [/b]
Здесь алгоритм отображает каждый пиксель из вашего измененного изображения к ближайшему цвето в этой фиксированной палитре: для каждого изображения. Выбирает самый близкий, и хранит свой палитра. palettodicomlut < /strong> < /h4>
После квантования эта функция преобразует палитру в три таблицы поиска < /strong> (по одному для R, G и B), как требуется в формате палеты DICOM. 16-битная запись LUT (просто умножается на 256). < /Li>
< /ul>
< /li>
< /ul>
Как все работает вместе: < /strong> < /h5>
.GenerateFixedPalette).
[*] Тогда вы квантов пиксели изображения в этой палитре (QuantizeToPalette).
[*] Наконец, вы подготовите , соответствующие DICOM, таблицы поиска цветов из палитра (PaletteToDicomlut).
[/list]
so: [/b]
Палитра определяет , какая может быть использовано. /> Генерация LUT адаптирует эту палитру для хранения DICOM. < /li>
< /ul>
Это гарантирует, что ваша икона использует только ограниченный набор из 256 палитровых цветов и хранится в том смысле, как формат Dicom понимает.// Insert into DICOM icon item (all other required tags present)
iconItem->putAndInsertUint16Array(DCM_RedPaletteColorLookupTableData, &outRed[0], 256);
iconItem->putAndInsertUint16Array(DCM_GreenPaletteColorLookupTableData, &outGreen[0], 256);
iconItem->putAndInsertUint16Array(DCM_BluePaletteColorLookupTableData, &outBlue[0], 256);
constexpr Uint16 lutDesc[3] = {256, 0, 8};
iconItem->putAndInsertUint16Array(DCM_RedPaletteColorLookupTableDescriptor, lutDesc, 3);
// ... repeat for green/blue descriptors ...
Извлечение значков:
DcmItem* iconItem = nullptr;
dataset->findAndGetSequenceItem(DCM_IconImageSequence, iconItem);
DicomImage dcmImg(iconItem, EXS_Unknown);
if (dcmImg.getStatus() != EIS_Normal) {
std::cerr
(0088,0200) SQ (Sequence with undefined length #=1) # u/l, 1 IconImageSequence
(fffe,e000) na (Item with undefined length #=14) # u/l, 1 Item
(0028,0002) US 1 # 2, 1 SamplesPerPixel
(0028,0004) CS [PALETTE COLOR] # 14, 1 PhotometricInterpretation
(0028,0010) US 72 # 2, 1 Rows
(0028,0011) US 128 # 2, 1 Columns
(0028,0100) US 8 # 2, 1 BitsAllocated
(0028,0101) US 8 # 2, 1 BitsStored
(0028,0102) US 7 # 2, 1 HighBit
(0028,1101) US 256\0\8 # 6, 3 RedPaletteColorLookupTableDescriptor
(0028,1102) US 256\0\8 # 6, 3 GreenPaletteColorLookupTableDescriptor
(0028,1103) US 256\0\8 # 6, 3 BluePaletteColorLookupTableDescriptor
(0028,1201) OW 0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000\0000... # 512, 1 RedPaletteColorLookupTableData
(0028,1202) OW 0000\0000\0000\0000\0000\0000\0033\0033\0033\0033\0033\0033\0066... # 512, 1 GreenPaletteColorLookupTableData
(0028,1203) OW 0000\0033\0066\0099\00cc\00ff\0000\0033\0066\0099\00cc\00ff\0000... # 512, 1 BluePaletteColorLookupTableData
(7fe0,0010) OB 2b\81\56\56\56\56\56\56\56\56\56\56\56\56\56\57\5b\5a\5a\5a\5a\5a... # 9216, 1 PixelData
(fffe,e00d) na (ItemDelimitationItem) # 0, 0 ItemDelimitationItem
(fffe,e0dd) na (SequenceDelimitationItem) # 0, 0 SequenceDelimitationItem
(7fe0,0010) OW e7e9\e9ea\eae7\e7e9\e9ea\eae7\e7e9\e9ea\eae7\e7e9\e9ea\eae7\e7e9... # 6220800, 1 PixelData
Подробнее здесь: https://stackoverflow.com/questions/797 ... -color-lut
Мобильная версия