21 #ifndef __otbKullbackLeiblerSupervizedDistanceImageFilter_txx
22 #define __otbKullbackLeiblerSupervizedDistanceImageFilter_txx
32 template <
class TInput1,
class TInput2,
class TInputROIImage,
class TOutput>
40 template <
class TInput1,
class TInput2,
class TInputROIImage,
class TOutput>
51 template <
class TInput1,
class TInput2,
class TInputROIImage,
class TOutput>
55 const typename TInput2::ImageType * img2,
56 const TInputROIImage * imgROI)
65 convertion1->SetInputImage(img1);
66 convertion1->SetROIImage(imgROI);
67 convertion1->Update();
69 if (m_CumROI1 !=
NULL)
delete m_CumROI1;
73 if (!m_CumROI1->IsDataAvailable())
77 "Cumulants estimated from ROI in image 1 are not usable",
88 convertion2->SetInputImage(img2);
89 convertion2->SetROIImage(imgROI);
90 convertion2->Update();
92 if (m_CumROI2 !=
NULL)
delete m_CumROI2;
96 if (!m_CumROI2->IsDataAvailable())
100 "Cumulants estimated from ROI in image 2 are not usable",
105 template <
class TInput1,
class TInput2,
class TInputROIImage,
class TOutput>
114 return static_cast<TOutput
> (0.);
121 return static_cast<TOutput
> (0.);
124 return static_cast<TOutput
> (m_CumROI1->Divergence(cum1)
125 + m_CumROI2->Divergence(cum2));
137 template <
class TInputImage1,
class TInputImage2,
class TInputROIImage,
class TOutputImage>
145 template <
class TInputImage1,
class TInputImage2,
class TInputROIImage,
class TOutputImage>
150 typename TInputImage1::ConstPointer inputPtr1
151 =
dynamic_cast<const TInputImage1*
>(this->GetInput(0));
152 typename TInputImage2::ConstPointer inputPtr2
153 =
dynamic_cast<const TInputImage2*
>(this->GetInput(1));
154 typename TInputROIImage::ConstPointer trainingImage
157 this->GetFunctor().Evaluate(inputPtr1, inputPtr2, trainingImage);