Good after-noon itk users!!<br><br>I am trying to use CompositeFilterExample (the compilation has been satisfactory) but the output image is not well built. Have anybody had the same problem?<br><br>By the way, I have constructed another filter using as base CompositeFilterExample. I want that my filter get an image, reescale its intensity and, after that, make an automatic adaptation of the histogram. In the same way, I have obtained an executable, but it doesn&#39;t work. What is the problem with that?<br>
<br>This is my code.<br><br>#if defined(_MSC_VER)<br>#pragma warning ( disable : 4786 )<br>#endif<br><br>#ifdef __BORLANDC__<br>#define ITK_LEAN_AND_MEAN<br>#endif<br><br>#include &quot;itkImageToImageFilter.h&quot;<br><br>
<br>#include &quot;itkRescaleIntensityImageFilter.h&quot;<br>#include &quot;itkAdaptiveHistogramEqualizationImageFilter.h&quot;<br><br>#include &quot;itkNumericTraits.h&quot;<br><br>namespace itk {<br><br>template &lt;class TImageType&gt;<br>
class ITK_EXPORT CompositeExampleImageFilter :<br>&nbsp;&nbsp;&nbsp; public ImageToImageFilter&lt;TImageType, TImageType&gt;<br>{<br>public:<br><br>&nbsp; typedef CompositeExampleImageFilter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Self;<br>&nbsp; typedef ImageToImageFilter&lt;TImageType,TImageType&gt; Superclass;<br>
&nbsp; typedef SmartPointer&lt;Self&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pointer;<br>&nbsp; typedef SmartPointer&lt;const Self&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ConstPointer;<br><br>&nbsp; itkNewMacro(Self);<br>&nbsp; <br>&nbsp; itkTypeMacro(CompositeExampleImageFilter, ImageToImageFilter);<br>
<br><br><br>&nbsp; typedef typename TImageType::PixelType PixelType;<br><br>&nbsp; <br><br>protected:<br><br>&nbsp; CompositeExampleImageFilter();<br><br><br>protected:<br><br>&nbsp; typedef RescaleIntensityImageFilter&lt; TImageType, TImageType &gt; RescalerType;<br>
&nbsp; typedef AdaptiveHistogramEqualizationImageFilter&lt; TImageType &gt; EqualizerType;<br><br><br>&nbsp;&nbsp;&nbsp; void GenerateData();<br><br>private:<br><br>&nbsp; CompositeExampleImageFilter(Self&amp;);&nbsp;&nbsp; // intentionally not implemented<br>
&nbsp; void operator=(const Self&amp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // intentionally not implemented<br><br>&nbsp; <br>&nbsp; typename RescalerType::Pointer&nbsp;&nbsp;&nbsp;&nbsp; m_RescaleFilter;<br>&nbsp; typename EqualizerType::Pointer&nbsp;&nbsp;&nbsp; m_EqualizeFilter;<br><br>&nbsp; <br>};<br>
<br>} <br><br>namespace itk <br>{<br><br>//&nbsp; Software Guide : BeginCodeSnippet<br>template &lt;class TImageType&gt;<br>CompositeExampleImageFilter&lt;TImageType&gt;<br>::CompositeExampleImageFilter()<br>{<br>&nbsp; <br>&nbsp; m_RescaleFilter = RescalerType::New();<br>
&nbsp; m_EqualizeFilter = EqualizerType::New();<br><br>&nbsp; m_RescaleFilter-&gt;SetOutputMinimum(NumericTraits&lt;PixelType&gt;::NonpositiveMin());<br>&nbsp; m_RescaleFilter-&gt;SetOutputMaximum(NumericTraits&lt;PixelType&gt;::max());<br>
<br>&nbsp; m_EqualizeFilter-&gt;SetInput( m_RescaleFilter-&gt;GetOutput() );<br><br>&nbsp; <br>}<br><br>template &lt;class TImageType&gt;<br>void<br>CompositeExampleImageFilter&lt;TImageType&gt;::<br>GenerateData()<br>{<br>&nbsp; <br>&nbsp; m_RescaleFilter-&gt;SetInput( this-&gt;GetInput() );<br>
&nbsp; m_RescaleFilter-&gt;Update();<br>&nbsp; m_EqualizeFilter-&gt;SetInput( this-&gt;GetOutput() );<br>&nbsp; m_EqualizeFilter-&gt;Update();<br>&nbsp; <br>}<br><br>}<br><br><br>#include &quot;itkImageFileReader.h&quot;<br>#include &quot;itkImageFileWriter.h&quot;<br>
<br>int main( int argc, char* argv[] )<br>{<br>&nbsp; if( argc &lt; 3 ) <br>&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Usage: &quot; &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; argv[0] &lt;&lt; &quot;&nbsp; inputImageFile&nbsp; outputImageFile&quot; &lt;&lt; std::endl;<br>
&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp; typedef itk::Image&lt;short, 2&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ImageType;<br>&nbsp; typedef itk::ImageFileReader&lt;ImageType&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ReaderType;<br>&nbsp; typedef itk::ImageFileWriter&lt;ImageType&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WriterType;<br>
<br>&nbsp; typedef itk::CompositeExampleImageFilter&lt;ImageType&gt; FilterType;<br><br>&nbsp; ReaderType::Pointer reader = ReaderType::New();<br>&nbsp; WriterType::Pointer writer = WriterType::New();<br>&nbsp; FilterType::Pointer filter = FilterType::New();<br>
<br>&nbsp; reader-&gt;SetFileName( argv[1] );<br>&nbsp; filter-&gt;SetInput( reader-&gt;GetOutput() );<br>&nbsp; writer-&gt;SetInput( filter-&gt;GetOutput() );<br>&nbsp; writer-&gt;SetFileName( argv[2] );<br><br>&nbsp; try<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; writer-&gt;Update();<br>
&nbsp;&nbsp;&nbsp; }<br>&nbsp; catch ( itk::ExceptionObject e )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; std::cerr &lt;&lt; &quot;Error: &quot; &lt;&lt; e &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp; return 0;<br>}<br><br><br>Thank you very much!!!<br clear="all"><br>-- <br>
Ignacio García Fenoll<br>Grupo de Imágenes Médicas<br>Departamento de Teoría de la Señal y Comunicaciones<br>Universidad de Sevilla<br>e-mail: <a href="mailto:igfenoll@gmail.com">igfenoll@gmail.com</a><br><br>