Ошибка сегментации на изображениях FloatType ITK

Я получаю ошибка сегментации при попытке отобразить или применить любой фильтр к ikt :: Изображение с плавающими типами пикселей.
Я могу использовать этот же код (поменять местами типы пикселей), чтобы открыть изображение с тип пикселя без знака, и он работает просто отлично.
Оба упомянутых мною изображения (пиксельные и плавающие) имеют тип Nifti.

Я также открыл изображение с помощью 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-> Update ();

Есть идеи? Заранее спасибо!

-1

Решение

Вам не хватает floatFilter->Update(); прямо перед ShowImage,

Редактировать:

Ваш обновленный код (с небольшими изменениями) работает на моем компьютере. Ваша установка ITK или VTK может быть повреждена. Попробуйте запустить его в режиме отладки, используя IDE, который покажет вам, где произошла ошибка.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]