在ITK

2015-10-07 39 views
1

的新模板類中創建ITK類的對象我嘗試通過插入現有類 (GradientImageFilter)的對象來擴展ITK中的現有類(特別是NormalizedMutualInformation),以正確研究圖像註冊處理。問題是我不知道如何從模板訪問圖像數據,以便將它們插入到過濾器中。我所做的就是申報NormalizedMutualInformation類中的類型定義變量:在ITK

的typedef typename的ITK :: GradientImageFilter FixedGradient;

這對定影圖像的濾波器。但在.HXX文件(特別是在評估方法)當我試圖設置輸入數據爲GradientImageFilter對象的類的,我使用的NormalizedMutualInformation類的模板參數作爲setInput設置()方法的參數。它沒有工作,但我不知道我應該插入什麼論點。我怎麼解決這個問題?

+0

嘿,如果在您插入'Gradien tImageFilter',考慮製作一個管道。 –

回答

0

我想你可以寫一個複合過濾實現這一目標。你可以有更多的相關信息的ITK軟件指南:http://www.itk.org/ItkSoftwareGuide.pdf

閱讀第8章,第6節

基本上,你必須創建一個新的過濾器類,則必須建立在構造函數中的管道您過濾。在你的情況下,它將是一個由GradientImageFilter和NormalizedMutualInformation組成的管道。輸入到這個新的過濾器應被傳遞到梯度過濾器,並從normalizedmutual取作手冊輸出表示:所需要的複合材料過濾器的「的輸入和輸出上要被接枝到頭部和尾部(分別)的 組件過濾器「。

下面是一個完整的代碼示例:http://www.itk.org/Doxygen46/html/Filtering_2CompositeFilterExample_8cxx-example.html

例子的有趣的部分是複合濾波器的構造,其中所述管道的組件參與:

template <class TImageType> 
CompositeExampleImageFilter<TImageType> 
::CompositeExampleImageFilter() 
{ 
    m_Threshold = 1; 
    m_GradientFilter = GradientType::New(); 
    m_ThresholdFilter = ThresholdType::New(); 
    m_ThresholdFilter->SetInput(m_GradientFilter->GetOutput()); 
    m_RescaleFilter = RescalerType::New(); 
    m_RescaleFilter->SetInput(m_ThresholdFilter->GetOutput()); 
    m_RescaleFilter->SetOutputMinimum(
            NumericTraits<PixelType>::NonpositiveMin()); 
    m_RescaleFilter->SetOutputMaximum(NumericTraits<PixelType>::max()); 
} 

然後GenerateData方法,其中該魔術發生:

template <class TImageType> 
void 
CompositeExampleImageFilter<TImageType>:: 
GenerateData() 
{ 
    m_GradientFilter->SetInput(this->GetInput()); 
    m_ThresholdFilter->ThresholdBelow(this->m_Threshold); 
    m_RescaleFilter->GraftOutput(this->GetOutput()); 
    m_RescaleFilter->Update(); 
    this->GraftOutput(m_RescaleFilter->GetOutput()); 
}