<DIV>Hi guys, </DIV>
<DIV>&nbsp;</DIV>
<DIV>I am trying to write my own filter taking 2 inputs of the same type. For the moment, to test my filter, I am just trying to compute the mean and variance of each input in the GenerateData() method. However, at execution, my filter doesn't return!!!!</DIV>
<DIV>&nbsp;</DIV>
<DIV>Could you tell me what I am missing? </DIV>
<DIV>&nbsp;</DIV>
<DIV>Isabelle</DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face="comic sans ms"><STRONG>/*=========================================================================</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp; Module:&nbsp;&nbsp;&nbsp; itkCorrelationCoefficientsImageFilter.txx<BR>&nbsp; Language:&nbsp; C++<BR>&nbsp; Date:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>=========================================================================*/<BR>#ifndef __itkCorrelationCoefficientsImageFilter_txx<BR>#define __itkCorrelationCoefficientsImageFilter_txx</STRONG></FONT></DIV>
<DIV><FONT face="Comic Sans MS"><STRONG></STRONG></FONT>&nbsp;</DIV>
<DIV><FONT face="comic sans ms"><STRONG>#include "itkCorrelationCoefficientsImageFilter.h"<BR>#include "itkProgressReporter.h"<BR>#include "itkImageRegionIterator.h"<BR>#include "itkImageRegionConstIterator.h"</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>#include "stdafx.h" //AfxMessageBox, CString</STRONG></FONT></DIV>
<DIV><FONT face="Comic Sans MS"><STRONG></STRONG></FONT>&nbsp;</DIV>
<DIV><FONT face="comic sans ms"><STRONG>namespace itk {</STRONG></FONT></DIV>
<DIV><FONT face="Comic Sans MS"><STRONG></STRONG></FONT>&nbsp;</DIV>
<DIV><FONT face="comic sans ms"><STRONG>template &lt;class TInputImage, class TOutputImage&gt;<BR>CorrelationCoefficientsImageFilter&lt;TInputImage, TOutputImage&gt;<BR>::CorrelationCoefficientsImageFilter()<BR>{<BR>&nbsp; this-&gt;SetNumberOfRequiredInputs(2);<BR>}</STRONG></FONT></DIV>
<DIV><BR><FONT face="comic sans ms"><STRONG>/* Connect the 1st input */<BR>template &lt;class TInputImage, class TOutputImage&gt;<BR>void<BR>CorrelationCoefficientsImageFilter&lt;TInputImage, TOutputImage&gt;<BR>::SetInput1( const TInputImage * image1 ) <BR>{<BR>&nbsp; // Process object is not const-correct so the const casting is required.<BR>&nbsp; SetNthInput(0, const_cast&lt;TInputImage *&gt;( image1 ));<BR>}</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>template &lt;class TInputImage, class TOutputImage&gt;<BR>const TInputImage *<BR>CorrelationCoefficientsImageFilter&lt;TInputImage, TOutputImage&gt;<BR>::GetInput1()<BR>{<BR>&nbsp; return this-&gt;GetInput(0);<BR>}</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>/* Connect the 2nd input */<BR>template &lt;class TInputImage, class TOutputImage&gt;<BR>void<BR>CorrelationCoefficientsImageFilter&lt;TInputImage, TOutputImage&gt;<BR>::SetInput2( const TInputImage * image2 ) <BR>{<BR>&nbsp; // Process object is not const-correct so the const casting is required.<BR>&nbsp; SetNthInput(1, const_cast&lt;TInputImage *&gt;( image2 ));<BR>}</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>template &lt;class TInputImage, class TOutputImage&gt;<BR>const TInputImage *<BR>CorrelationCoefficientsImageFilter&lt;TInputImage, TOutputImage&gt;<BR>::GetInput2()<BR>{<BR>&nbsp; return this-&gt;GetInput(1);<BR>}</STRONG></FONT></DIV>
<DIV><FONT face="Comic Sans MS"><STRONG></STRONG></FONT>&nbsp;</DIV>
<DIV><FONT face="comic sans ms"><STRONG>template &lt;class TInputImage, class TOutputImage&gt;<BR>void <BR>CorrelationCoefficientsImageFilter&lt;TInputImage, TOutputImage&gt;<BR>::GenerateInputRequestedRegion()<BR>{<BR>&nbsp; // call the superclass' implementation of this method<BR>&nbsp; Superclass::GenerateInputRequestedRegion();//ImageToImageFilter</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp; // get pointers to the inputs<BR>&nbsp; Input1ImagePointer inputPtr1<BR>&nbsp;&nbsp;&nbsp; = const_cast&lt; TInputImage*&gt;( this-&gt;GetInput(0) );</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp; Input2ImagePointer inputPtr2<BR>&nbsp;&nbsp;&nbsp; = const_cast&lt; TInputImage*&gt;( this-&gt;GetInput(1) );</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp; if ( !inputPtr1 || !inputPtr2 ) return;</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp; // We need to configure the inputs such that all the data is available.<BR>&nbsp; inputPtr1-&gt;SetRequestedRegion(inputPtr1-&gt;GetLargestPossibleRegion());<BR>&nbsp; inputPtr2-&gt;SetRequestedRegion(inputPtr2-&gt;GetLargestPossibleRegion());<BR>}</STRONG></FONT></DIV>
<DIV><BR><FONT face="comic sans ms"><STRONG>template &lt;class TInputImage, class TOutputImage&gt;<BR>void <BR>CorrelationCoefficientsImageFilter&lt;TInputImage, TOutputImage&gt;<BR>::EnlargeOutputRequestedRegion(DataObject *)<BR>{<BR>&nbsp; this-&gt;GetOutput()<BR>&nbsp;&nbsp;&nbsp; -&gt;SetRequestedRegion( this-&gt;GetOutput()-&gt;GetLargestPossibleRegion() );<BR>}</STRONG></FONT></DIV>
<DIV><FONT face="Comic Sans MS"><STRONG></STRONG></FONT>&nbsp;</DIV>
<DIV><FONT face="comic sans ms"><STRONG>template &lt;class TInputImage, class TOutputImage&gt;<BR>float<BR>CorrelationCoefficientsImageFilter&lt;TInputImage, TOutputImage&gt;<BR>::Mean(TInputImage* input) const<BR>{<BR>&nbsp;&nbsp;&nbsp; ImageRegionConstIteratorType it(input, input-&gt;GetRequestedRegion());<BR>&nbsp;&nbsp;&nbsp; it.GoToBegin();</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp;unsigned int NumberOfPixels = 0;<BR>&nbsp;float mean = 0.0;<BR>&nbsp;&nbsp;&nbsp; while( !it.IsAtEnd() ) <BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; mean += ((float)it.Get());<BR>&nbsp;NumberOfPixels++;<BR>&nbsp;&nbsp;&nbsp; ++it;<BR>&nbsp;&nbsp;&nbsp; }</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp;&nbsp;&nbsp; mean /= (float)NumberOfPixels;</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp;&nbsp;&nbsp; return mean;<BR>}</STRONG></FONT></DIV>
<DIV><FONT face="Comic Sans MS"><STRONG></STRONG></FONT>&nbsp;</DIV>
<DIV><FONT face="comic sans ms"><STRONG>template &lt;class TInputImage, class TOutputImage&gt;<BR>float<BR>CorrelationCoefficientsImageFilter&lt;TInputImage, TOutputImage&gt;<BR>::Variance(TInputImage* input, float mean) const<BR>{<BR>&nbsp;&nbsp;&nbsp; ImageRegionConstIteratorType it(input, input-&gt;GetRequestedRegion());<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; it.GoToBegin();<BR>&nbsp;float sum = 0.0;<BR>&nbsp;float tmp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; while( !it.IsAtEnd() ) <BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp; tmp = ((float)it.Get()) - mean;<BR>&nbsp;&nbsp; &nbsp;sum += (tmp)*(tmp);<BR>&nbsp;}</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp;return sum;<BR>}</STRONG></FONT></DIV>
<DIV><FONT face="Comic Sans MS"><STRONG></STRONG></FONT>&nbsp;</DIV>
<DIV><FONT face="comic sans ms"><STRONG>template &lt;class TInputImage, class TOutputImage&gt;<BR>void<BR>CorrelationCoefficientsImageFilter&lt;TInputImage, TOutputImage&gt;<BR>::GenerateData()<BR>{<BR>&nbsp; this-&gt;AllocateOutputs();</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp; // get pointers to the inputs<BR>&nbsp; Input1ImagePointer inputPtr1<BR>&nbsp;&nbsp;&nbsp; = const_cast&lt; TInputImage*&gt;( this-&gt;GetInput(0) );</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp; Input2ImagePointer inputPtr2<BR>&nbsp;&nbsp;&nbsp; = const_cast&lt; TInputImage*&gt;( this-&gt;GetInput(1) );</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp; OutputImagePointer outputPtr = this-&gt;GetOutput(0);&nbsp; <BR>&nbsp; <BR>&nbsp; // the inputs must have the same size<BR>&nbsp; if ( this-&gt;GetInput1()-&gt;GetRequestedRegion().GetSize() != this-&gt;GetInput2()-&gt;GetRequestedRegion().GetSize() )<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; AfxMessageBox("The two input images must have the same size.");<BR>&nbsp;&nbsp;&nbsp; }</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp; float meanX = this-&gt;Mean(inputPtr1);<BR>&nbsp; float meanY = this-&gt;Mean(inputPtr2);<BR>&nbsp; TRACE("means:%f, %f\n", meanX,meanY); //this is ok</STRONG></FONT></DIV>
<DIV><FONT face="Comic Sans MS"><STRONG></STRONG></FONT>&nbsp;</DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp; float varX = this-&gt;Variance(inputPtr1, meanX);<BR>&nbsp; float varY = this-&gt;Variance(inputPtr2, meanY);</STRONG></FONT></DIV>
<DIV><FONT face="Comic Sans MS"><STRONG></STRONG></FONT>&nbsp;</DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp;&nbsp; // iterator for the first input<BR>&nbsp; ImageRegionConstIteratorType inputIt1(this-&gt;GetInput1(), this-&gt;GetInput1()-&gt;GetRequestedRegion());<BR>&nbsp; <BR>&nbsp; // iterator for the 2nd input<BR>&nbsp; ImageRegionConstIteratorType inputIt2(this-&gt;GetInput2(), this-&gt;GetInput2()-&gt;GetRequestedRegion());<BR>&nbsp; <BR>&nbsp; // iterator for output image<BR>&nbsp; typedef ImageRegionIterator&lt; TOutputImage &gt; ImageRegionIteratorType;<BR>&nbsp; ImageRegionIteratorType outputIt( this-&gt;GetOutput(), this-&gt;GetOutput()-&gt;GetRequestedRegion() );<BR>&nbsp;<BR>&nbsp; inputIt1.GoToBegin();<BR>&nbsp; inputIt2.GoToBegin();<BR>&nbsp; outputIt.GoToBegin();</STRONG></FONT></DIV>
<DIV><BR><FONT face="comic sans ms"><STRONG>&nbsp; InputImagePixelType denom = sqrt( varX * varY );</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp; if( denom == 0.0) <BR>&nbsp;&nbsp; AfxMessageBox("Coefficient de Correlation non defini, variance nulle!\n");</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp; //else<BR>&nbsp; //{<BR>&nbsp;&nbsp; // Set up the progress reporter <BR>&nbsp;&nbsp; ProgressReporter progress(this, 0, this-&gt;GetInput1()-&gt;GetRequestedRegion().GetNumberOfPixels());</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp;&nbsp; while( !inputIt1.IsAtEnd() ) <BR>&nbsp;&nbsp; {<BR>&nbsp;&nbsp;++inputIt1;<BR>&nbsp;&nbsp;progress.CompletedPixel(); // potential exception thrown here<BR>&nbsp;&nbsp; }&nbsp; <BR>&nbsp; //}<BR>}</STRONG></FONT></DIV>
<DIV><FONT face="comic sans ms"><STRONG>&nbsp; <BR>}// end namespace itk<BR>#endif</STRONG></FONT></DIV><p>
                <hr size=1> 
<b><font color=#FF0000>Appel audio GRATUIT</font> partout dans le monde</b> avec le nouveau Yahoo! Messenger<br> 
<a href="http://us.rd.yahoo.com/messenger/mail_taglines/default/*http://fr.messenger.yahoo.com">Téléchargez le ici !</a>