Hi all,<br><br>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.<br>
Maybe one of you finds the problem. I highlight the code I changed:<br><br>------------------------------------------------------------------------------<br><br>#ifndef __myEdgeDetectionImageFilter_h<br>#define __myEdgeDetectionImageFilter_h<br>
<br>#include &quot;itkImageToImageFilter.h&quot;<br><b>#include &quot;itkGradientRecursiveGaussianImageFilter.h&quot; <br>#include &quot;itkGradientToMagnitudeImageFilter.h&quot; </b>   <br>#include &quot;itkThresholdImageFilter.h&quot;<br>
#include &quot;itkRescaleIntensityImageFilter.h&quot;<br><br><b>#include &quot;itkCovariantVector.h&quot;</b><br>#include &quot;itkNumericTraits.h&quot;<br><br><br>namespace itk {<br><br>template &lt;class TImageType&gt;<br>
class ITK_EXPORT MelEdgeDetectionImageFilter :<br>    public ImageToImageFilter&lt;TImageType, TImageType&gt;<br>{<br>public:<br><br>  typedef MelEdgeDetectionImageFilter               Self;<br>  typedef ImageToImageFilter&lt;TImageType,TImageType&gt; Superclass;<br>
  typedef SmartPointer&lt;Self&gt;                        Pointer;<br>  typedef SmartPointer&lt;const Self&gt;                  ConstPointer;<br><br>  /** Method for creation through object factory */<br>  itkNewMacro(Self);<br>
<br>  /** Run-time type information */<br>  itkTypeMacro(MelEdgeDetectionImageFilter, ImageToImageFilter);<br><br>  /** Display */<br>  void PrintSelf( std::ostream&amp; os, Indent indent ) const;<br><br>  /** ImageDimension constant    */<br>
  itkStaticConstMacro(ImageDimension, unsigned int,<br>                      TImageType::ImageDimension);<br><br>    /** Define pixel types. */<br>  typedef typename TImageType::PixelType PixelType;<br> <b> typedef typename float   ComponentType;<br>
  typedef typename itk::CovariantVector&lt; ComponentType, <br>                        ImageDimension  &gt;      VectorPixelType;</b><br>  <br><br>  itkGetMacro( Threshold, PixelType);<br>  itkSetMacro( Threshold, PixelType);<br>
<br><b>  itkGetMacro( Sigma, PixelType);<br>  itkSetMacro( Sigma, PixelType);</b><br><br>protected:<br><br>  MelEdgeDetectionImageFilter();<br><br>protected:<br><br>  typedef ThresholdImageFilter&lt; TImageType &gt;     ThresholdType;<br>
 <b> typedef GradientRecursiveGaussianImageFilter&lt; TImageType, VectorPixelType &gt;    GradientType;<br>  typedef GradientToMagnitudeImageFilter&lt; VectorPixelType, TImageType &gt; MagnitudeType;</b><br>  typedef RescaleIntensityImageFilter&lt; TImageType, TImageType &gt;  RescalerType;<br>
<br>  void GenerateData();<br><br>private:<br><br>  MelEdgeDetectionImageFilter(Self&amp;);   // intentionally not implemented<br>  void operator=(const Self&amp;);          // intentionally not implemented<br><br><br><b>  typename GradientType::Pointer     m_GradientFilter;<br>
  typename MagnitudeType::Pointer    m_MagnitudeFilter;</b><br>  typename ThresholdType::Pointer    m_ThresholdFilter;<br>  typename RescalerType::Pointer     m_RescaleFilter;<br><br>  PixelType m_Threshold;<br><br> <b> PixelType m_Sigma;</b><br>
};<br><br>} /* namespace itk */<br><br>#ifndef ITK_MANUAL_INSTANTIATION<br>#include &quot;myEdgeDetectionImageFilter.txx&quot;<br>#endif<br><br>#endif<br><br><br>
------------------------------------------------------------------------------<br><br>#ifndef __myEdgeDetectionImageFilter_txx<br>#define __myEdgeDetectionImageFilter_txx<br><br>#include &quot;myEdgeDetectionImageFilter.h&quot;<br>
<br>namespace itk <br>{<br><br>template &lt;class TImageType&gt;<br>MelEdgeDetectionImageFilter&lt;TImageType&gt;<br>::MelEdgeDetectionImageFilter()<br>{<br>  <b>m_GradientFilter = GradientType::New();<br>  m_MagnitudeFilter = MagnitudeType::New();</b><br>
  m_ThresholdFilter = ThresholdType::New();<br>  m_RescaleFilter = RescalerType::New();<br><br> <b> m_MagnitudeFilter-&gt;SetInput(m_GradientFilter-&gt;GetOutput() );<br>  m_ThresholdFilter-&gt;SetInput( m_MagnitudeFilter-&gt;GetOutput() );</b><br>
  m_RescaleFilter-&gt;SetInput( m_ThresholdFilter-&gt;GetOutput() );<br><br>  m_Threshold = 1;<br> <b> m_Sigma = 1;</b><br><br>  m_RescaleFilter-&gt;SetOutputMinimum(<b>NumericTraits&lt;PixelType&gt;::Zero</b>);<br>  m_RescaleFilter-&gt;SetOutputMaximum(NumericTraits&lt;PixelType&gt;::max());<br>
}<br><br>template &lt;class TImageType&gt;<br>void<br>MelEdgeDetectionImageFilter&lt;TImageType&gt;::<br>GenerateData()<br>{<br> <b> m_GradientFilter-&gt;SetInput( this-&gt;GetInput() );</b><br><br>  m_ThresholdFilter-&gt;ThresholdBelow( this-&gt;m_Threshold );<br>
<br>  m_RescaleFilter-&gt;GraftOutput( this-&gt;GetOutput() );<br>  m_RescaleFilter-&gt;Update();<br>  this-&gt;GraftOutput( m_RescaleFilter-&gt;GetOutput() );<br>}<br><br>template &lt;class TImageType&gt;<br>void<br>MelEdgeDetectionImageFilter&lt;TImageType&gt;::<br>
PrintSelf( std::ostream&amp; os, Indent indent ) const<br>{<br>  Superclass::PrintSelf(os,indent);<br><br>  os<br>    &lt;&lt; indent &lt;&lt; &quot;Threshold:&quot; &lt;&lt; this-&gt;m_Threshold<br>    &lt;&lt; std::endl;<br>
<b>  os<br>    &lt;&lt; indent &lt;&lt; &quot;Sigma:&quot; &lt;&lt; this-&gt;m_Sigma<br>    &lt;&lt; std::endl;</b><br>}<br><br>} /* end namespace itk */<br><br>#endif<br><br><br>Thanks a lot for your help!<br><br>