如何在Python中使用ITK类

2024-09-29 19:28:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我用CPP中的ITK编写了一个类,它读取目录中的所有文件,然后对它们进行平均。我希望在使用Python构建的管道中使用这个类。在

我以前尝试过使用Swig包装模板代码,但是根据swig documenation,它不支持模板,需要显式指定类型名。但是当我使用ITK in Python时,接口与我期望的Swig生成的模板代码非常不同(类型名根本没有在函数/类名中指定,这与Swig文档所说的相反)。在

下面显示了我的代码片段,其中说明了类的用法:

typedef unsigned char PixelType;
typedef itk::Image<PixelType, 2> ImageType;
typedef itk::NaryMeanImageFilter< ImageType, ImageType > FilterType; // custom class
typedef itk::ImageFileReader<ImageType> ReaderType;
typedef itk::ImageFileWriter<ImageType> WriterType;

ImageType::Pointer image = ImageType::New();
ReaderType::Pointer reader = ReaderType::New();
WriterType::Pointer writer = WriterType::New();
FilterType::Pointer filter = FilterType::New(); // custom class

for (unsigned int i = 0; i< fileNames.size(); ++i)
{
  reader->SetFileName(fileNames[i]);
  filter->SetInput(i, reader->GetOutput()); // custom class
}

writer->SetFileName(outName);
writer->SetInput(filter->GetOutput());
writer->Update();

类的代码可以在Git repository中看到。我对使用Boost::Python增加项目的依赖性没有问题,但是我需要一个起点来继续。任何帮助都将不胜感激。在

谢谢。在

更新:

Python中的预期用法是

^{pr2}$

Tags: 代码模板newcustomclassreaderswigwriter
2条回答

在Itk软件指南第1卷(http://itk.org/ITKSoftwareGuide/html/Book1/ITKSoftwareGuide-Book1ch3.html#x34-410003.7)中,他们解释说他们使用自己的包装,包括:

  1. GCXML,它从C++程序
  2. 生成XML文件
  3. 一个叫做igenerator.py,它为swig生成.i文件
  4. 痛饮

我以前从来没有这样做过,但是您可以尝试查看他们的包装管道,看看生成的*.I文件是什么样子的(或者甚至可以在您的本地ITK存储库中包含您的过滤器,看看包装是否自动起作用)

主要思想是使用WrapITK模块。它基本上使用内部的ITK封装和解析机制(使用GCXML进行C++解析到XML解析,将来移动到CastXML),生成SWIG文件,SWIG使用这些文件来生成Python包装代码。在

基本思路:

  • 假设您有一个ITK过滤器'itkDummy.h',它想从Python脚本中使用
  • 写一个文件'itkDummy.wrap'提供有关像素类型和模板初始化的信息。在
  • 使用WrapITK模块(与ITK Python绑定一起使用)需要验证,因为每次我尝试时,都会得到一个错误
  • 很高兴可以从Python调用itkDummy

参考号:http://www.itk.org/Wiki/ITK/Release_4/Wrapping/BuildProcess

这就是我要找的。在

相关问题 更多 >

    热门问题