Ошибочные результаты расчета градиента изображения с помощью ITK - PullRequest
1 голос
/ 28 сентября 2011

В заголовочном файле я объявляю все эти типы: «Gradient ImageFilter» предназначен для вычисления градиента 2D-изображения, а «VectorIndexSelectionCastImageFilter» предназначен для выбора компонента «x» и «y» градиента. вычисление, в связи с тем, что результатом вычисления th градиента является векторное изображение.

typedef double      operatorValueType;
typedef double      outputValueType;
typedef double      InputPixelType;
typedef  itk::Image<InputPixelType, 2> InputImageType;
typedef  itk::GradientImageFilter< InputImageType, operatorValueType, outputValueType>     GradientFilterType;
//for extracting a scalar from the vector image
typedef double       OutputPixelTypeImage;
typedef double       ComponentType;
typedef  itk::CovariantVector<ComponentType,2> OutputPixelType;
typedef  itk::Image <OutputPixelType, 2> OutputImageType;
typedef  itk::VectorIndexSelectionCastImageFilter<OutputImageType,InputImageType> SelectionFilterType; // < intputType , outputType>

После декларации основная часть кода интереса приведена ниже:

GradientFilterType::Pointer gradientFilter = GradientFilterType::New();
gradientFilter->SetInput(T_g->GetOutput());  // From T_g (is a reader) comes the image
gradientFilter->Update();

SelectionFilterType::Pointer componentExtractor_x = SelectionFilterType::New();
SelectionFilterType::Pointer componentExtractor_y = SelectionFilterType::New();

componentExtractor_x->SetIndex(0);// x component of the gradient
componentExtractor_y->SetIndex(1);// y component of the gradient

componentExtractor_x->SetInput(gradientFilter->GetOutput());
componentExtractor_y->SetInput(gradientFilter->GetOutput());

componentExtractor_x->Update();
componentExtractor_y->Update();

Кажется, что все работает нормально, но проблема в том, что когда я читаю изображение и сравниваю его с вычислением градиента в Matlab (что я предполагаю, чтобы быть правильным), результаты совершенно разные ... Кто-то использовал раньше VectorIndexSelectionCastImageFilter и видите что-то странное? Или в процессе расчета градиента?

Большое спасибо!

Antonio

Ответы [ 2 ]

2 голосов
/ 29 сентября 2011

ITK должен учитывать интервал вокселей в вычислениях. У ваших изображений есть изотропный интервал?

Это может объяснить разницу с matlab.

1 голос
/ 05 октября 2011

Проблема была в интервале изображения, просто добавив эту строку:

gradientFilter->SetUseImageSpacingOff(); // for derivation in isotropic pixel space

проблема была решена, и вывод был сделан в изотропном пространстве

...