1

SimpleITK for C#でRAWファイルを読み取るにはどうすればよいですか?

Windows(64ビット)でSimpleITK C#バージョン0.5.1を使用しています

私のコードは次のとおりです。

String fileName = @"d:\Temp\MRI\t1_icbm_normal_1mm_pn3_rf20.rawb";
ImageFileReader reader = new ImageFileReader();
reader.SetFileName(fileName);
Image image = reader.Execute();

.pngや画像の分析などでは問題なく機能しますが、RAW画像では機能しません。

次のエラーが発生します。

System.ApplicationException : Exception thrown in SimpleITK ImageFileReader_Execute: ..\\..\\..\\..\\..\SimpleITK\Code\IO\src\sitkImageReaderBase.cxx:44:
sitk::ERROR: Unable to determine ImageIO reader for "d:\Temp\MRI\t1_icbm_normal_1mm_pn3_rf20.rawb"

ImageFileReaderがファイルタイプを認識できないことを理解しています。標準のITKテンプレートが非表示になっているため、SimpleITKで画像タイプと画像パラメーターを渡す方法はありますか?

4

2 に答える 2

4

Insight-Users グループのおかげで、この問題を解決する手がかりが得られました。問題は、ImageFileReader が RAW ファイルを読み込めないことです。解決策は、バイナリ データを手動で読み取り、ImportImageFilter を使用して Image オブジェクトを構築することです。コードは次のとおりです。

    [Test]
    public void ReadImageRAW()
    {
        String fileName = @"d:\Temp\MRI\t1_icbm_normal_1mm_pn3_rf20.rawb";

        Byte[] imageData = System.IO.File.ReadAllBytes(fileName);

        UInt32 width = 181;
        UInt32 height = 217;
        UInt32 depth = 181;

        ImportImageFilter importImageFilter = new ImportImageFilter();

        importImageFilter.SetSize(new VectorUInt32(new UInt32[] {width, height, depth}));

        importImageFilter.SetDirection(new VectorDouble(new Double[] {1, 0, 0, 
                                                                      0, 1, 0, 
                                                                      0, 0, 1}));

        importImageFilter.SetOrigin(new VectorDouble(new Double[] { 0, 0, 0 }));

        importImageFilter.SetSpacing(new VectorDouble(new Double[] {1, 1, 1}));

        GCHandle hObject = GCHandle.Alloc(imageData, GCHandleType.Pinned);
        IntPtr imageDataPtr = hObject.AddrOfPinnedObject();

        importImageFilter.SetBufferAsUInt8(imageDataPtr);

        Image importedImage = importImageFilter.Execute();
        SimpleITK.Show(importedImage);
    }
于 2012-10-28T10:41:38.990 に答える