[Insight-users] Is it a mistake in itkMutualInformationImageToImageMetric.cxx

Luis Ibanez luis.ibanez at kitware.com
Fri Apr 15 14:02:30 EDT 2005


Hi 庄吓海 ,

Thanks for pointing this out.

There seems to be a dimensional inconsistency at this level,
however, using a square standard deviation will not fix it.

The "weight" variable should be adimnesional, therefore it
looks like the division should be by a single standard
deviation.


Could you please report this as a bug in the Bug tracker ?


              http://www.itk.org/Bug/


  Thanks


     Luis



----------------------------------

庄吓海 wrote:

>  
> in the this method in class MutualInformationImageToImageMetric:: 
> 
> GetValueAndDerivative(
>   const ParametersType& parameters,
>   MeasureType& value,
>   DerivativeType& derivative) 
> {
>    ...
>   for( biter = m_SampleB.begin(); biter != bend; ++biter )
>     {
>      ...
>     for( aiter = m_SampleA.begin(); aiter != aend; ++aiter )
>       {... 
>       } // end of sample A loop
> 		...
>     for( aiter = m_SampleA.begin(), aditer = sampleADerivatives.begin();
>          aiter != aend; ++aiter, ++aditer )
>       {
>       double valueFixed;
>       double valueMoving;
>       double weightMoving;
>       double weightJoint;
>       double weight;
> 
>       valueFixed = ( (*biter).FixedImageValue - (*aiter).FixedImageValue ) /
>         m_FixedImageStandardDeviation;
>       valueFixed = m_KernelFunction->Evaluate( valueFixed );
> 
>       valueMoving = ( (*biter).MovingImageValue - (*aiter).MovingImageValue ) /
>         m_MovingImageStandardDeviation;
>       valueMoving = m_KernelFunction->Evaluate( valueMoving );
> 
>       weightMoving = valueMoving / dDenominatorMoving;  
>       weightJoint = valueMoving * valueFixed / dDenominatorJoint;
> 
>       weight = ( weightMoving - weightJoint );
>       weight *= (*biter).MovingImageValue - (*aiter).MovingImageValue; //*********************************** please check here***********
>       //according to the paper Alignment by Maximization of Mutual Information of Paul Viola, 
>       //here should need weight = weight / (m_FixedImageStandardDeviation*m_FixedImageStandardDeviation);
>       // could you tell me why here omit standard diviation or it is a mistake ? --------:) Thanks!
> 
>       totalWeight += weight;
>       derivative -= (*aditer) * weight;
> 
>       } // end of sample A loop
> 
>     derivative += derivB * totalWeight;  
> 
>     } // end of sample B loop
> 
> 
> 	
> 
>         致
> 礼!
>  				
> 
>         庄吓海
>         arhye at 163.com
>           2005-04-15
> 
> 
> 
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
> 
> 





More information about the Insight-users mailing list