【问题标题】:Convert from byte array to DICOM using ImageJ API使用 ImageJ API 从字节数组转换为 DICOM
【发布时间】:2014-07-07 22:45:13
【问题描述】:

我正在开发一个 Hadoop 应用程序来处理 DICOM 文件。 这些文件分布在 HDFS 上。

我正在使用修改后的 RecordReader,它读取整个文件并将其内容作为键值对发出。记录阅读器工作正常。

文件的所有文件数据都在ByteWritable值中。 我已经检查过了,数据完全等于原始文件。 因此,inputContent 具有与原始文件相同的值。

将 ByteWritable 转换为字节数组后,我无法将其转换为流并生成新的 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)
        {

        }

    }
}

【问题讨论】:

    标签: java hadoop dicom imagej


    【解决方案1】:

    其实我最终解决了这个问题。

    问题是,DICOM 类的构造函数实际上并没有用 inputStream 构造图像。只是保存了 inputStream 有它的属性之一。

    为此,您需要使用 run 方法,并为其指定文件名。

    所以,只需要添加以下行:

    image.run("DICOM Test");
    

    就在该行之后

    image = new DICOM(is);
    

    【讨论】:

      【解决方案2】:

      我建议使用 DICOM 工具包。

      DCM4CHE2 是一个很好的、成熟的、开源的、基于 Java 的选项。在您的情况下,您将使用 DicomInputStream 来获取所需的 DICOM 属性。

      【讨论】:

      • 对不起。所有的图像处理应用程序都已经用 ImageJ 编写了,我只是在制作一个 Hadoop 端口。这就是为什么我问指定 ImageJ API 的问题。
      • 抱歉,错过了。我不熟悉 ImageJ。
      猜你喜欢
      • 2012-01-17
      • 2010-10-08
      • 2015-08-04
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      相关资源
      最近更新 更多