使用imagejapi将字节数组转换为dicom

eoxn13cs  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(584)

我正在开发一个hadoop应用程序来处理dicom文件。这些文件分布在hdfs上。
我使用的是一个修改过的recordreader,它读取整个文件并将其内容作为键值对发送。录音机工作正常。
文件的所有文件数据都是字节可写值。我已经检查过了,数据和原始文件完全相同。因此,inputcontent具有与原始文件相同的值。
在将字节可写转换为字节数组之后,我无法将其转换为流并生成一个新的dicom图像(使用imagej api)及其内容。
如何使用此api执行此操作?
下面是代码示例:

public void inputTester()
    {
        DICOM image;
        Configuration testConf = new Configuration(false);

        /* Reads the local file system */
        testConf.set("fs.default.name", "file:///");

        File testFile = new File("path/to/dicom/file");

        Path path = new Path(testFile.getAbsoluteFile().toURI());
        FileSplit split = new FileSplit(path, 0, testFile.length(), null);

        InputFormat inputFormat = ReflectionUtils.newInstance(WholeFileInputFormat.class, testConf);
        TaskAttemptContext context = new TaskAttemptContextImpl(testConf, new TaskAttemptID());

        try
        {
            RecordReader reader = inputFormat.createRecordReader(split, context);
            while (reader.nextKeyValue())
            {
                /* get the bytes array */
                BytesWritable inputBytesWritable = (BytesWritable) reader.getCurrentValue();
                byte[] inputContent = inputBytesWritable.getBytes();

                InputStream is = new ByteArrayInputStream(inputContent);
                image = new DICOM(is);
            }
        }
        catch (Exception e)
        {

        }

    }
}
1szpjjfi

1szpjjfi1#

实际上我最终解决了这个问题。
问题是,dicom类的构造函数实际上并不使用inputstream构造图像。只是保存inputstream的一个属性。
为此,需要使用run方法,并为其指定一个文件名。
因此,只需添加以下行:

image.run("DICOM Test");

就在队伍后面

image = new DICOM(is);
trnvg8h3

trnvg8h32#

我建议用dicom工具包。
dcm4che2是一个好的、成熟的、开源的、基于java的选项。在您的例子中,可以使用dicominputstream来获取所需的dicom属性。
http://dcm4che.org/
http://sourceforge.net/projects/dcm4che/files/dcm4che2/

相关问题