2017-11-30 5 views
-1

浮動小数点ピクセルタイプを持つikt :: Imageにフィルタを表示または適用しようとすると、のセグメント化エラーが発生します。 符号なしのchar型のイメージを開くために同じコード(ピクセルタイプを交換する)を使うことができ、それはちょうど良いで動作します。 私が言及した画像(floatピクセルのものとunsigned charのもの)はどちらもNiftiタイプです。FloatTypeイメージのセグメンテーションフォルトITK

また、ImageIOBaseで画像を開いて、ピクセルタイプとその浮動小数点数を確認しました。

#include "itkImage.h" 
#include "itkImageFileReader.h" 
#include "itkExtractImageFilter.h" 
#include "itkImageToVTKImageFilter.h" 
#include "vtkImageViewer.h" 
#include "vtkImageMapper3D.h" 
#include "vtkRenderWindowInteractor.h" 
#include "vtkSmartPointer.h" 
#include "vtkImageActor.h" 
#include "vtkInteractorStyleImage.h" 
#include "vtkRenderer.h" 
#include "itkRGBPixel.h" 
#include <unistd.h> 
#include "QuickView.h" 
#include <armadillo> 
#include "itkBinaryThresholdImageFilter.h" 
#include "itkMedianImageFilter.h" 



typedef float FloatPixelType; 
typedef itk::Image<FloatPixelType, 3> Input3DFloatImageType; 
typedef itk::Image<FloatPixelType, 2> FloatImageType; 
typedef itk::ImageFileReader< Input3DFloatImageType> Float3DReaderType; 
typedef itk::ImageToVTKImageFilter<FloatImageType> FloatConnectorType; 
typedef itk::ExtractImageFilter< Input3DFloatImageType, FloatImageType > FloatFilterType; 

int main(int argc, char *argv[]){ 

const char * grayMatterFile = "../../I3T/I3TGM.img"; 
Float3DReaderType::Pointer floatReader = Float3DReaderType::New(); 
floatReader->SetFileName(grayMatterFile); 

FloatFilterType::Pointer floatFilter = FloatFilterType::New(); 
floatFilter->SetDirectionCollapseToSubmatrix(); 
floatFilter->InPlaceOn(); 
floatReader->UpdateOutputInformation(); 
Input3DFloatImageType::RegionType floatRegion = floatReader->GetOutput()->GetLargestPossibleRegion(); 

Input3DFloatImageType::SizeType floatSize = floatRegion.GetSize(); 
floatSize[1] = 0; 
Input3DFloatImageType::IndexType floatIndexStart = floatRegion.GetIndex(); 

for(int i = 0; floatRegion.GetSize()[1]; i++){ 

     floatIndexStart[1] = i; 
     Input3DFloatImageType::RegionType floatDesiredRegion; 

     floatDesiredRegion.SetSize(floatSize); 
     floatDesiredRegion.SetIndex(floatIndexStart); 

     // Float image 
     floatFilter->SetInput(floatReader->GetOutput()); 
     floatFilter->SetExtractionRegion(floatDesiredRegion); 
     floatFilter->Update(); 
     ShowImage<FloatImageType>(floatFilter->GetOutput()); 


    } 
} 

template<typename TImageType> 
void ShowImage(typename TImageType::Pointer image){ 

    typedef itk::ImageToVTKImageFilter<TImageType> ThisConnectorType; 
    typename ThisConnectorType::Pointer connector = ThisConnectorType::New(); 
    connector->SetInput(image); 

    try{ 
     connector->Update(); 
    } catch(itk::ExceptionObject & error) { 
     std::cerr << "Error: " << error << std::endl; 
     return; 
    } 


    vtkSmartPointer<vtkImageActor> actor = vtkSmartPointer<vtkImageActor>::New(); 

    actor->GetMapper()->SetInputData(connector->GetOutput()); 

    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); 
    renderer->AddActor(actor); 
    renderer->ResetCamera(); 

    vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); 
    renderWindow->AddRenderer(renderer); 

    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); 
    vtkSmartPointer<vtkInteractorStyleImage> style = vtkSmartPointer<vtkInteractorStyleImage>::New(); 

    renderWindowInteractor->SetInteractorStyle(style); 

    renderWindowInteractor->SetRenderWindow(renderWindow); 
    renderWindowInteractor->Initialize(); 

    renderWindowInteractor->Start(); 

} 

セグメンテーション障害が線で発生:floatFilter->更新();

ありがとうございました!

答えて

1

ShowImageの直前にfloatFilter->Update();がありません。

編集:(軽微な変更で)

更新されたコードを自分のコンピュータ上で実行されます。 ITKまたはVTKのインストールが壊れている可能性があります。 IDEを使用してデバッグモードで実行してみてください。これにより、どこに障害が発生しているかがわかります。

+0

ありがとうございました!しかし、エラーは持続するようになりました。実際には、追加した行にセグメンテーション違反が発生しました。他のアイデア? –

+1

エラーメッセージは何ですか? ITKはちょうどクラッシュすることはほとんどありませんが、通常はエラーメッセージを出力します。また、コードはコンパイルされません。インクルードと欠落した定義を追加して、問題をコピー&ペーストして再現できますか? –

+0

これはセグメンテーションフォルトとしか言いません。私は、この質問にクラッシュの一部であるコードを追加しました。しかし、以下のリンクで完全なファイルを見ることができます。当時私は多くの異なるものをテストして以来、非常に面倒なコードです。あなたがそれを見ることができるように、単にレポを公開しました。そして、本当にありがとう! https://github.com/bonisthegreat/GrayMatter/blob/master/m0/m0.cxx –

関連する問題