2011-11-29 70 views
2

我想讀取一系列DICOM圖像以使用ITK將它們轉換爲3D圖像。我遵循文檔中的示例:「Examples/IO/DicomSeriesReadImageWrite2.cxx」。但我仍然有問題,我解決了一些問題,但我想聽到任何提示,請!不能正確讀取DICOM圖像系列與ITK

問題出在代碼行下劃線,代碼就在這裏,並沒有那麼長。它編譯,變量'seriesItr'的值=「1.2.392.200036.9116.2.6.1.48.1214834239.1284941923.42443543.0512512」。但變量'seriesEnd'是一個空指針!我究竟做錯了什麼?感謝您的高級幫助!

// Reading a 2D DICOM Series and Writing a Volume 
    ReaderType::Pointer reader = ReaderType::New(); 

    ImageIOType::Pointer dicomIO = ImageIOType::New(); 
    reader->SetImageIO(dicomIO); 
    NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New(); 
    nameGenerator->SetUseSeriesDetails(true); 

    std::string folder; 
    folder = "C:\\Documents and Settings\\GTTS\\Mis documentos\\Visual Studio 2008\\Projects\\Reg_mono3D\\Reg_mono3D\\DICOM_SERIES\\T\\"; 
    nameGenerator->SetDirectory(folder); 

    const SeriesIdContainer & seriesUID = nameGenerator->GetSeriesUIDs(); 
    SeriesIdContainer::const_iterator seriesItr = seriesUID.begin(); 
    ***SeriesIdContainer::const_iterator seriesEnd = seriesUID.end();*** 
    while(seriesItr != seriesEnd) 
    { 
     std::cout << seriesItr->c_str() << std::endl; 
     seriesItr++; 
    } 

    std::string seriesIdentifier; 
    seriesIdentifier = seriesUID.begin()->c_str(); 
    FileNamesContainer fileNames; 
    fileNames = nameGenerator->GetFileNames(seriesIdentifier); 

    reader->SetFileNames(fileNames); 

    try 
    { 
     reader->Update(); 
    } 
    catch (itk::ExceptionObject &ex) 
    { 
     cout << ex << std::endl; 
    } 
+1

有什麼問題的話'seriesEnd'是'NULL'? – Asha

+0

我有82個dicom圖像,我想閱讀整個系列...然後'while'循環必須通過整個圖像,而不僅僅是第一個圖像的第一部分 – Antonio

+0

我正在運行此代碼,它的工作原理精細。你需要雙倍分隔符嗎?我正在使用/我也有nameGenerator-> AddSeriesRestriction(「0008 | 0021」); 之後的 – 2011-11-30 04:11:38

回答

4

圖像不是100%兼容嗎?許多工具包都不是很容錯,而且似乎有90%的供應商不是100%兼容的。我會嘗試通過DCMtk工具dcmconv運行圖像以「轉換」文件。我在引號中使用convert,因爲我經常通過它運行文件,它們與它們當前具有的完全相同的設置,因爲dcmconv將以100%兼容的方式導出副本。

信息上dcmconv可以在這裏找到:http://support.dcmtk.org/docs/dcmconv.html

威爾