Как изменить пиксели изображения в файлах DICOM с помощью библиотеки Imebra?

0

Я использую библиотеку Imerba для чтения файлов DICOM. Мне нужно получить доступ к пикселям, чтобы я мог изменять их на низком уровне. Документация гласит: "Чтобы получить доступ к пикселям изображения, вы должны получить обработчик данных", и есть пример:

imbxUint32 rowSize, channelPixelSize, channelsNumber;
ptr<imebra::handlers::dataHandlerNumericBase> myHandler = presentationImage->getDataHandler(true, &rowSize, &channelPixelSize, &channelsNumber);

// Retrieve the image size in pixels
imbxUint32 sizeX, sizeY;
presentationImage->getSize(&sizeX, &sizeY);

// Scan all the rows
imbxUint32 index(0);
for(imbxUint32 scanY = 0; scanY < sizeY; ++scanY)
{
    // Scan all the columns
    for(imbxUint32 scanX = 0; scanX < sizeX; ++scanX)
    {
            // Scan all the channels
            for(imbxUint32 scanChannel = 0; scanChannel < channelsNumber; ++scanChannel)
            {
            imbxInt32 channelValue = myHandler->getSignedLong(index++);

                    // Do something with the channel value
                    //--------------------------------------
            }
    }

} Мне нужно, чтобы пиксели объекта presentationImage были изменены. Я попытался изменить его так:

myHandler->setSignedLong(index,255);

но он не меняет объект presentationImage, и теперь я уверен. Документация Imebra имеет только три примера, а описание классов и методов немного грубо. Google ничего не знает. Как изменить значения пикселей в этом объекте?

  • 0
    Я не знаю библиотеку, но быстрое изучение документов, кажется, указывает на то, что вы должны передать true в функцию getDataHandler . Из документов - true if the application wants to write into the buffer, false otherwise. Вы пробовали, чтобы это звучало true в этом звонке?
  • 0
    Да жаль. Я сделал это, но передача правды ничего не меняет. неправильная копия здесь. исправлено сейчас.
Теги:
image-processing
dicom
imebra

1 ответ

1

Когда вы изменяете буфер, вы изменяете несжатое изображение: исходная структура dicom все еще содержит сжатое изображение.

Чтобы заменить изображение в файле Dicom, вы должны вернуть изображение в набор данных с помощью dataset::setImage после того, как dataHandler выходит из области видимости (данные записываются в изображение только при уничтожении dataHandler)

  • 0
    но как изменить пиксели в изображении объекта presentationImage ? why myHandler->setSignedLong(index,255); не меняет presentationImage ?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню