Перезаписать данные изображения / пикселя в файле dicom, используя dcmtk

Я использую dcmtk, чтобы прочитать файл dicom и извлечь изображение в формате .tiff. После некоторой обработки изображений у меня есть изображение, которое я хотел бы сохранить в исходном файле dicom. Это перезаписывает старые данные изображения / пикселя новыми, сохраняя остальные данные (uid, имя пациента и т. Д.) так же.

Я использую следующий код для чтения DICOM

OFCondition status = src_fileformat.loadFile(src_path);

if (status.good())
{
Sint32 instanceNumber = 0;
if (src_fileformat.getDataset()->findAndGetSint32(DCM_InstanceNumber, instanceNumber).good())
{
cout << "instance Number N: " << instanceNumber << endl;
sprintf(instanceNum, "%d", instanceNumber);
printf("%s\n", instanceNum);
}

else
cerr << "Error: cannot access Instance Number!" << endl;
}
else
cerr << "Error: cannot read DICOM file (" << status.text() << ")" << endl;

src_dcm = new DicomImage(src_path);
if (src_dcm != NULL)
{
if (src_dcm->getStatus() == EIS_Normal)
{
if (src_dcm->isMonochrome())
{
src_dcm->setMinMaxWindow();
Uint8 *pixelData = (Uint8 *)(src_dcm->getOutputData(16 /* bits */));
if (pixelData != NULL)
{
src_dcm->writeBMP("source.tiff", 24);  /* do something useful with the pixel data */
}
}
}
else
cerr << "Error: cannot load DICOM image (" << DicomImage::getString(src_dcm->getStatus()) << ")" << endl;
}

После обработки изображения у меня есть изображение, которое я хочу перезаписать в этот исходный файл dicom. Я посмотрел на image2dcm, но не смог найти правильный синтаксис / метод. любой выручит меня .. 🙂

Edit-1

Image2Dcm i2d;
I2DOutputPlug *outPlug = new I2DOutputPlugSC();
I2DImgSource *inputPlug = new I2DJpegSource();
E_TransferSyntax writeXfer;
inputPlug->setImageFile(jpgFile);
DcmDataset *dataset = NULL;
OFCondition result = i2d.convert(inputPlug, outPlug, dataset, writeXfer);

// Saving output DICOM image
if (result.good())
{
dataset->putAndInsertString(DCM_PhotometricInterpretation,"RGB");

DcmFileFormat dcmff(dataset);
result = dcmff.saveFile(dcmFile, writeXfer);
}

Я попробовал приведенный выше синтаксис, но не смог его точно понять

Это обработанное изображение

Это обработанное изображение (выше)

Оригинальное изображение dicom

Это оригинальное изображение dicom, которое я хочу перезаписать. Ребята, есть идеи или помощь ??

1

Решение

Основной подход должен быть:

  1. загрузить набор данных DICOM из файла
  2. заменить данные пикселей в наборе данных
  3. изменить различные другие значения элемента (например, UID экземпляра SOP)
  4. сохранить измененный набор данных DICOM в новый файл

В случае несжатых изображений второй шаг может быть выполнен таким же образом, как и третий шаг, то есть путем соответствующего вызова метода putAndInsertXXX () для набора данных. Конечно, значение элемента атрибута Pixel Data должно быть в правильном формате DICOM. Увидеть Стандарт DICOM часть 3 и 5 для деталей.

0

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

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

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