Чтение значений пикселей изображения

Я пытаюсь прочитать значения пикселей изображения, содержащегося в файле DICOM, в моем простом приложении на языке c ++ с использованием библиотеки Grassroots DICOM (GDCM). При чтении метаданных файла я получаю следующую информацию о картинке:

Bits allocated: 16
Bits Stored: 16
High Bit: 15
Unsigned or signed: 1
Samples pr pixel: 1
Dimensions: 2
Dimension values: 256x256
Pixel Representation: 1
SamplesPerPixel: 1
ScalarType: INT16
PhotometricInterpretation: MONOCHROME2
Pixel buffer length: 131072

Учитывая, что изображение имеет разрешение 256×256 и имеет тип MONOCHROME2, я ожидал, что длина пиксельного буфера составит 256×256 = 65536 элементов, но на самом деле это 131072 элемента.

Если я вместо этого использую MATLAB для импорта данных пикселей, я получу ровно 65536 значений в диапазоне от 0 до 850, где 0 — черный, а 850 — белый.

Когда я смотрю на пиксельный буфер, который я получаю из показаний GDCM в моем приложении c ++, пиксельный буфер составляет 131072 элемента, где каждый четный индексированный элемент находится в диапазоне от -128 до +127, а каждый нечетный индексированный элемент находится в диапазоне 0-3. как это:

Exerpt:

PixelBuffer[120] = -35
PixelBuffer[121] = 0
PixelBuffer[122] = 51
PixelBuffer[123] = 2
PixelBuffer[124] = 71
PixelBuffer[125] = 2
PixelBuffer[126] = 9
PixelBuffer[127] = 2
PixelBuffer[128] = -80
PixelBuffer[129] = 2
PixelBuffer[130] = 87
PixelBuffer[131] = 3
PixelBuffer[132] = 121
PixelBuffer[133] = 3
PixelBuffer[134] = -27
PixelBuffer[135] = 2
PixelBuffer[136] = 27
PixelBuffer[137] = 2
PixelBuffer[138] = -111
PixelBuffer[139] = 1
PixelBuffer[140] = 75
PixelBuffer[141] = 1
PixelBuffer[142] = 103

Что означает это расположение ценностей? Это какое-то типичное пиксельное представление для монохромных изображений? Я был «пиксельной структурой гуглинового изображения» и подобным, но не могу найти то, что я ищу. Есть ли какой-нибудь ресурс, который может помочь мне понять это расположение значений и как они соотносятся с каждым пикселем?

4

Решение

Я использую этот код для чтения 16-битного файла MONOCHROME2 Dicom:

byte[] signedData = new byte[2];
List<int> tempInt = new List<int>();
List<ushort> returnValue = new List<ushort>();

for (i = 0; i < PixelBuffer.Length; ++i)
{
i1 = i * 2;
signedData[0] = PixelBuffer[i1];
signedData[1] = PixelBuffer[i1 + 1];
short sVal = System.BitConverter.ToInt16(signedData, 0);

int pixVal = (int)(sVal * rescaleSlope + rescaleIntercept);

tempInt.Add(pixVal);
}

int minPixVal = tempInt.Min();
SignedImage = false;
if (minPixVal < 0) SignedImage = true;

foreach (int pixel in tempInt)
{
ushort val;
if (SignedImage)
val = (ushort)(pixel - short.MinValue);
else
{
if (pixel > ushort.MaxValue) val = ushort.MaxValue;
else val = (ushort)(pixel);
}

returnValue.Add(val);
}
1

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

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

По вопросам рекламы [email protected]