如何使用Imebra库修改DICOM文件中的图像像素?

时间:2014-11-13 21:54:53

标签: c++ image-processing dicom imebra

我使用Imerba库来读取DICOM文件。 我需要访问像素,所以我可以在低级别修改它们。 文档说:"为了访问图像的像素,您必须检索数据处理程序" 还有一个例子:

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

// Retrieve the image's 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's value
                    //--------------------------------------
            }
    }

} 我需要更改presentationImage对象像素。我试图像以下那样改变它:

myHandler->setSignedLong(index,255);

但它并没有改变presentationImage对象,我现在肯定了。 Imebra文档只有三个示例,类和方法描述有点原始。谷歌一无所知。 如何更改此对象中的像素值?

1 个答案:

答案 0 :(得分:1)

当你修改缓冲区时,你正在修改未压缩的图像:原始的dicom结构仍包含压缩的图像。

为了替换Dicom文件中的图像,您必须在dataset::setImage超出范围后使用dataHandler将图像放回数据集中(仅当数据写入图像时dataHandler被销毁了)