gpt4 book ai didi

c++ - 如何使用 Imebra 库将压缩像素(用我自己的编码器压缩)保存回 DICOM 图像文件?

转载 作者:行者123 更新时间:2023-11-30 05:14:03 29 4
gpt4 key购买 nike

我有自己的图像编码器和解码器。我想要的是读取 DICOM 图像,提取未压缩的图像像素,使用我的编码器压缩它们,然后将这些压缩像素写回到 DICOM 文件中以代替未压缩像素。解码器会做相反的事情。这可以在 Imebra 中完成吗?我可以读取标签和像素,但在我压缩它们之后,我不确定如何将它们放回去(它们目前在 char* 缓冲区中),或者这是否可能。我在 C++ 中使用 Imebra。

或者,如果我可以创建全新的 DICOM 文件也可以,但在那种情况下我需要轻松地从旧文件传输所有 DICOM 标签。

如果这在 Imebra 中是不可能的,是否有其他一些 C++ 库允许这样做?

编辑:感谢您的回答,保罗。然而,原始 DICOM 图像仍然保持不变(使用第二个选项)。你能说我在这里做错了什么吗?

std::unique_ptr<imebra::DataSet> loadedDataSet(imebra::CodecFactory::load(imgNameM));
imebra::WritingDataHandlerNumeric* dataHandler = loadedDataSet->getWritingDataHandlerRaw(imebra::TagId(imebra::tagId_t::PixelData_7FE0_0010), 0);
dataHandler->assign(buffer, size);
delete dataHandler;

loadedDataSet 不为空,我检查了 bufferExists。

编辑 2:是的,我没有保存它。现在我添加了该行并设法修改了 PixelData 元素,这解决了我原来的问题。谢谢。但是,文件的其他一些部分现在也会自动更改。在文件的开头添加了 100 多个空字节,尽管这并没有给我带来太大的困扰。令我困扰的是,现在添加了 (0008,0005) 特定字符集标签,但未设置其值(它为空),然后在尝试读取该修改文件的标签时导致 CharsetConversionNoTableError。如果我手动删除该标签并修复组长度,我可以正常读取标签。是否有可能避免这种行为?

最佳答案

Imebra 已经为无损 jpeg、基线和扩展 jpeg、RLE 提供了编码器/解码器。

有几种方法可以将您自己的编解码器添加到 Imebra:

  • 从 imebra::implementation::codecs::imageCodec 派生一个类
  • 或将图像编码到字符缓冲区中,然后使用 imebra::DataSet::getWritingDataHandlerRaw 将其作为原始内容添加这允许您编写标签原始内容。 getWritingDataHandlerRaw 返回一个 WritingDataHandlerNumeric。使用 WritingDataHandlerNumeric::assign将字节缓冲区移动到数据处理程序中,然后删除数据处理程序以使其将其内容提交到数据集中。
  • 库附带的示例 changeTransferSyntax 展示了如何使用源数据集中的所有相同标签但使用不同的传输语法(包括不同的图像压缩)创建新数据集

关于c++ - 如何使用 Imebra 库将压缩像素(用我自己的编码器压缩)保存回 DICOM 图像文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43613526/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com