在 ITK 中实例化 ImageToPathFilter

instantiating ImageToPathFilter in ITK

我正在尝试在 ITK 中使用 ImageToPathFilter,但我无法使用正常的 ClassName::Pointer = ClassName::New(); 例程实例化它。

这是我的代码

typedef itk::Image<unsigned int, 3>  LabelImageType;
typedef itk::ChainCodePath<2> PathType;
typedef itk::ImageToPathFilter<LabelImageType, PathType> ImageToPathType;
ImageToPathType::Pointer filter = ImageToPathType::New();

最后一行导致以下错误

cannot convert from 'itk::SmartPointer<itk::PathSource<TOutputPath>>' to 'itk::SmartPointer<itk::ImageToPathFilter<LabelImageType,PathType>>'

此 class 被宣传为过滤器,但它继承自 PathSource,因此使用 PathSource<PathType> 而不是 ImageToPathFilter 可以,但我不能将 SetInput() 用作我会用 ITK 过滤器。

我认为解决方案可能涉及一些铸造魔法,但我在这方面非常无知。

谢谢

事实证明,itk::ImageToPathFilter class 是一个 Base class,并不意味着要被实例化。

ITK class 使用智能指针的 es 在它们的定义中有 itkNewMacro,但是这个 class 没有,在这个 [=18= 上调用 New() ] 最终会调用父级的 New(),即 itk::PathSource。这解释了错误消息。