Я пытаюсь повернуть необработанные данные пикселей из файла DICOM на 180 градусов (или перевернуть). Однако я успешно перевернул изображение после записи пиксельных данных обратно в файл (в данном случае это файл DICOM) и его отображения. Окончательный вывод изображения неверен.
Ниже приведен образец изображения, которое я пытаюсь перевернуть на 180 / зеркало.
Вот код, который я использую для переворачивания:
string file = @"adicomfile.dcm";
DicomFile df = new DicomFile();
df.Load(file);
// Get the amount of bits per pixel from the DICOM header.
int bitsPerPixel = df.DataSet[DicomTags.BitsAllocated].GetInt32(0, 0);
// Get the raw pixel data from the DICOM file.
byte[] bytes = df.DataSet[DicomTags.PixelData].Values as byte[];
// Get the width and height of the image.
int width = df.DataSet[DicomTags.Columns].GetInt32(0, 0);
int height = df.DataSet[DicomTags.Rows].GetInt32(0, 0);
byte[] original = bytes;
byte[] mirroredPixels = new byte[width * height * (bitsPerPixel / 8)];
width *= (bitsPerPixel / 8);
// The mirroring / image flipping.
for (int i = 0; i < original.Length; i++)
{
int mod = i % width;
int x = ((width - mod - 1) + i) - mod;
mirroredPixels[i] = original[x];
}
df.DataSet[DicomTags.PixelData].Values = mirroredPixels;
df.Save(@"flippedicom.dcm", DicomWriteOptions.Default);
И вот мой вывод (неверный). Белый цвет и искажения не являются желаемым результатом.
Я использую библиотеку ClearCanvas DICOM, однако это не имеет значения, поскольку я пытаюсь манипулировать необработанными данными пикселей, содержащимися в самом файле.
Желательно, чтобы результат был похож на оригинал, но перевернут на 180 / зеркально.
Некоторая помощь будет принята с благодарностью. Я старался изо всех сил искать ТАК, но безрезультатно.
bitsPerPixel
(и какова фотометрическая интерпретация изображения)? Если он больше 8, вам понадобится массив int вместо массива байтов. - person Chris O   schedule 01.05.2014