1

DICOM シリーズを生の形式で読み込んで保存しようとしています。実行時にプログラムがクラッシュし、次のエラーが生成されます。

DICOMParser は解析できませんでした。

これが私のコードです:

int main(int argc, char* argv[])
{
    // Verify input arguments
    std::string folder = "C:/dicom decompress/GM_23/2801/0";

    //std::string folder = "C:\\VTK\\vtkdata-5.8.0\\Data\\DicomTestImages";

    // Read all the DICOM files in the specified directory.
    vtkSmartPointer<vtkDICOMImageReader> reader =
    vtkSmartPointer<vtkDICOMImageReader>::New();
    reader->SetDirectoryName(folder.c_str());
    reader->Update();
    vtkSmartPointer<vtkImageWriter> writer =  vtkSmartPointer<vtkImageWriter>::New();

    writer->SetInputConnection(reader->GetOutputPort());
    //  writer->SetFilePrefix(folder.c_str());
    writer->SetFilePattern("3d.raw");
    writer->Write();
    writer->Update();

    return EXIT_SUCCESS;
}
4

1 に答える 1

1

おそらく、アプリケーションはそのディレクトリで DICOM ではないファイルを見つけます (Mac で作業している場合、ディレクトリには「.DS_Store」などの隠しファイルも含まれている可能性があることを考慮してください。

私が考えることができる最善の方法は、ファイルの解析に関する例外を処理することです。クラスvtkDicomImageReaderを見ると、 CanReadFileというメソッドがあり、このスニペットを通して、そのエラーのハンドラーのようです:

  bool canRead = this->Parser->IsDICOMFile();
  if (canRead)
    {
    return 1;
    }
  else
    {
    vtkErrorMacro("DICOMParser couldn't parse : " << fname);
    return 0;
    }

メソッドは保護されていますが、そのクラスを派生させて、好みの方法で例外を処理できます。

追加の注意として、VTK 警告ウィンドウを回避することもできることを考慮してください。

vtkImageData::GlobalWarningDisplayOff();

(少なくとも、最終的なユーザーはそれを視覚化することはありません)が、例外を処理することは常に最優先事項です。

これが役立つかどうか教えてください。

于 2013-08-05T07:34:05.987 に答える