
Untitled
By: a guest on
May 7th, 2012 | syntax:
None | size: 1.35 KB | hits: 15 | expires: Never
struct MyITKPipelineInterface
{
virtual void setParam(int param) = 0;
virtual void update() = 0;
};
template<typename TPixel, unsigned int VImageDimension>
struct MyITKPipeline : public MyITKPipelineInterface
{
typedef itk::Image<TPixel, VImageDimension> ImageType;
itk::Filter1<ImageType>::Pointer firstFilter;
...
itk::Filter5<ImageType>::Pointer lastFilter;
MyITKPipeline() { ... initialize stuff and connect pipeline ... }
void setParam(int param) {
firstFilter->setParam(param);
}
void update() {
lastFilter->Update();
}
};
class CalculateSomething
{
public:
void CreateSegmenation()
{
AccessByItk(mitkImage, InvokeITKPipeline)
}
private:
std::map<std::string, MyITKPipelineInterface*> typeToPipelineMap;
template<typename TPixel, unsigned int VImageDimension>
void InvokeITKPipeline(itk::Image<TPixel, VImageDimension>* itkImage)
{
std::stringstream key;
key << typeid(TPixel).name() << VImageDimension;
MyITKPipelineInterface* myPipeline = typeToPipelineMap[key];
if (myPipeline == 0)
{
MyITKPipeline<TPixel, VImageDimension>* pipeline = new MyITKPipeline<TPixel, VImageDimension>();
pipeline->firstFilter.SetInput(itkImage);
myPipeline = pipeline;
typeToPipelineMap[key] = myPipeline;
// get the output pointer and save it in some mitk::Image
}
myPipeline->setParam(4);
myPipeline->update();
}
};