Ошибочные результаты расчета градиента изображения с помощью ITK
В заголовочном файле я объявляю все эти типы. "Gradient ImageFilter" предназначен для вычисления градиента 2D-изображения, а "VectorIndexSelectionCastImageFilter" предназначен для выбора компонентов "x" и "y" вычисления градиента, так как к тому, что результатом вычисления й градиента является векторное изображение.
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" И увидеть что-то странное? Или в процессе расчета градиента?
Спасибо!
Антонио
2 ответа
ITK должен соблюдать интервал вокселей в вычислениях. У ваших изображений есть изотропное расстояние?
Это может объяснить различия с Matlab.
Проблема была в расстоянии изображения, просто добавив эту строку:
gradientFilter->SetUseImageSpacingOff(); // for derivation in isotropic pixel space
проблема была решена, и вывод был сделан в изотропном пространстве