[Insight-users] Use of GradientRecursiveGaussianImageFilter in own CompositeFilter
robert tamburo
robert.tamburo at gmail.com
Wed Jun 22 06:21:48 EDT 2011
Glad to hear you got it working!
FYI, putting typename before *GradientType::OutputImageType *would remedy
the error.
On Wed, Jun 22, 2011 at 4:11 AM, Melanie Uks <meluks2010 at googlemail.com>wrote:
> Hi Robert,
>
> thanks for your help. By following your instructions I received some
> errors:
>
> warning C4346:
> 'itk::GradientRecursiveGaussianImageFilter<TImageType>::OutputImageType' :
> dependent name is not a type
> 1> prefix with 'typename' to indicate a type
> 1> ...\myEdgeDetectionImageFilter.h(80) : see reference to class
> template instantiation 'itk::MelEdgeDetectionImageFilter<TImageType>' being
> compiled
> 1>...\myEdgeDetectionImageFilter.h(61) : error C2923:
> 'itk::GradientToMagnitudeImageFilter' :
> 'itk::GradientRecursiveGaussianImageFilter<TImageType>::OutputImageType' is
> not a valid template type argument for parameter 'TInputImage'
>
> therefore I was defining
>
> * typedef typename
> itk::GradientRecursiveGaussianImageFilter<TImageType>::OutputImageType
> VectorImageType;
> *
> and replacing
>
>
> * typedef
> GradientToMagnitudeImageFilter< GradientType::OutputImageType, TImageType >
> MagnitudeType;*
>
> with
>
> *typedef GradientToMagnitudeImageFilter< VectorImageType, TImageType
> > MagnitudeType;
> *
> Now it is working!
>
> Thanks a lot!
>
> melanie
>
>
>
>
> 2011/6/21 robert tamburo <robert.tamburo at gmail.com>
>
>> Hi Melanie,
>>
>> GradientRecursiveGaussianImageFilter expects an output image type. You
>> are giving it an output pixel type. You can 'cheat' and use the default
>> template parameter by
>>
>> Replacing
>>
>> typedef GradientRecursiveGaussianImageFilter< TImageType,
>> VectorPixelType > GradientType;
>> typedef GradientToMagnitudeImageFilter< VectorPixelType, TImageType >
>> MagnitudeType;
>>
>> by
>>
>> typedef GradientRecursiveGaussianImageFilter< TImageType >
>> GradientType;
>> typedef GradientToMagnitudeImageFilter< GradientType::OutputImageType,
>> TImageType > MagnitudeType;
>> *
>> *
>> and consequently removing ComponentType and VectorPixelType.
>>
>> *
>> *
>> On Tue, Jun 21, 2011 at 10:51 AM, Melanie Uks <meluks2010 at googlemail.com>wrote:
>>
>>> Hi all,
>>>
>>> I try to write my own filter starting with the CompositeFilterExample
>>> (Software Guide). I could run the example filter and then I wanted to modify
>>> the filter by removing the GaussianFilter and adding a
>>> GradientRecursiveGaussianImageFilter and a GradientToMagnitudeImageFilter. I
>>> was not able to run the code again. I guess I made a mistake with the
>>> component vector type. The errors (more than 50 :-( ) do not help to solve
>>> the problem.
>>> Maybe one of you finds the problem. I highlight the code I changed:
>>>
>>>
>>> ------------------------------------------------------------------------------
>>>
>>> #ifndef __myEdgeDetectionImageFilter_h
>>> #define __myEdgeDetectionImageFilter_h
>>>
>>> #include "itkImageToImageFilter.h"
>>> *#include "itkGradientRecursiveGaussianImageFilter.h"
>>> #include "itkGradientToMagnitudeImageFilter.h" *
>>> #include "itkThresholdImageFilter.h"
>>> #include "itkRescaleIntensityImageFilter.h"
>>>
>>> *#include "itkCovariantVector.h"*
>>> #include "itkNumericTraits.h"
>>>
>>>
>>> namespace itk {
>>>
>>> template <class TImageType>
>>> class ITK_EXPORT MelEdgeDetectionImageFilter :
>>> public ImageToImageFilter<TImageType, TImageType>
>>> {
>>> public:
>>>
>>> typedef MelEdgeDetectionImageFilter Self;
>>> typedef ImageToImageFilter<TImageType,TImageType> Superclass;
>>> typedef SmartPointer<Self> Pointer;
>>> typedef SmartPointer<const Self> ConstPointer;
>>>
>>> /** Method for creation through object factory */
>>> itkNewMacro(Self);
>>>
>>> /** Run-time type information */
>>> itkTypeMacro(MelEdgeDetectionImageFilter, ImageToImageFilter);
>>>
>>> /** Display */
>>> void PrintSelf( std::ostream& os, Indent indent ) const;
>>>
>>> /** ImageDimension constant */
>>> itkStaticConstMacro(ImageDimension, unsigned int,
>>> TImageType::ImageDimension);
>>>
>>> /** Define pixel types. */
>>> typedef typename TImageType::PixelType PixelType;
>>> * typedef typename float ComponentType;
>>> typedef typename itk::CovariantVector< ComponentType,
>>> ImageDimension > VectorPixelType;*
>>>
>>>
>>> itkGetMacro( Threshold, PixelType);
>>> itkSetMacro( Threshold, PixelType);
>>>
>>> * itkGetMacro( Sigma, PixelType);
>>> itkSetMacro( Sigma, PixelType);*
>>>
>>> protected:
>>>
>>> MelEdgeDetectionImageFilter();
>>>
>>> protected:
>>>
>>> typedef ThresholdImageFilter< TImageType > ThresholdType;
>>> * typedef GradientRecursiveGaussianImageFilter< TImageType,
>>> VectorPixelType > GradientType;
>>> typedef GradientToMagnitudeImageFilter< VectorPixelType, TImageType >
>>> MagnitudeType;*
>>> typedef RescaleIntensityImageFilter< TImageType, TImageType >
>>> RescalerType;
>>>
>>> void GenerateData();
>>>
>>> private:
>>>
>>> MelEdgeDetectionImageFilter(Self&); // intentionally not implemented
>>> void operator=(const Self&); // intentionally not implemented
>>>
>>>
>>> * typename GradientType::Pointer m_GradientFilter;
>>> typename MagnitudeType::Pointer m_MagnitudeFilter;*
>>> typename ThresholdType::Pointer m_ThresholdFilter;
>>> typename RescalerType::Pointer m_RescaleFilter;
>>>
>>> PixelType m_Threshold;
>>>
>>> * PixelType m_Sigma;*
>>> };
>>>
>>> } /* namespace itk */
>>>
>>> #ifndef ITK_MANUAL_INSTANTIATION
>>> #include "myEdgeDetectionImageFilter.txx"
>>> #endif
>>>
>>> #endif
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>>
>>> #ifndef __myEdgeDetectionImageFilter_txx
>>> #define __myEdgeDetectionImageFilter_txx
>>>
>>> #include "myEdgeDetectionImageFilter.h"
>>>
>>> namespace itk
>>> {
>>>
>>> template <class TImageType>
>>> MelEdgeDetectionImageFilter<TImageType>
>>> ::MelEdgeDetectionImageFilter()
>>> {
>>> *m_GradientFilter = GradientType::New();
>>> m_MagnitudeFilter = MagnitudeType::New();*
>>> m_ThresholdFilter = ThresholdType::New();
>>> m_RescaleFilter = RescalerType::New();
>>>
>>> * m_MagnitudeFilter->SetInput(m_GradientFilter->GetOutput() );
>>> m_ThresholdFilter->SetInput( m_MagnitudeFilter->GetOutput() );*
>>> m_RescaleFilter->SetInput( m_ThresholdFilter->GetOutput() );
>>>
>>> m_Threshold = 1;
>>> * m_Sigma = 1;*
>>>
>>> m_RescaleFilter->SetOutputMinimum(*NumericTraits<PixelType>::Zero*);
>>> m_RescaleFilter->SetOutputMaximum(NumericTraits<PixelType>::max());
>>> }
>>>
>>> template <class TImageType>
>>> void
>>> MelEdgeDetectionImageFilter<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() );
>>> }
>>>
>>> template <class TImageType>
>>> void
>>> MelEdgeDetectionImageFilter<TImageType>::
>>> PrintSelf( std::ostream& os, Indent indent ) const
>>> {
>>> Superclass::PrintSelf(os,indent);
>>>
>>> os
>>> << indent << "Threshold:" << this->m_Threshold
>>> << std::endl;
>>> * os
>>> << indent << "Sigma:" << this->m_Sigma
>>> << std::endl;*
>>> }
>>>
>>> } /* end namespace itk */
>>>
>>> #endif
>>>
>>>
>>> Thanks a lot for your help!
>>>
>>>
>>> _____________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Kitware offers ITK Training Courses, for more information visit:
>>> http://www.kitware.com/products/protraining.html
>>>
>>> Please keep messages on-topic and check the ITK FAQ at:
>>> http://www.itk.org/Wiki/ITK_FAQ
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.itk.org/mailman/listinfo/insight-users
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20110622/6fcbea4a/attachment.htm>
More information about the Insight-users
mailing list