18 #ifndef __otbPixelWiseBlockMatchingImageFilter_h
19 #define __otbPixelWiseBlockMatchingImageFilter_h
42 template <
class TInputImage,
class TOutputMetricImage>
55 for(
unsigned int i = 0; i<a.
Size(); ++i)
72 template <
class TInputImage,
class TOutputMetricImage>
93 for(
unsigned int i = 0; i<size; ++i)
95 meanA+=
static_cast<double>(a.
GetPixel(i));
96 meanB+=
static_cast<double>(b.
GetPixel(i));
103 for(
unsigned int i = 0; i<size; ++i)
105 valueA=
static_cast<double>(a.
GetPixel(i));
106 valueB=
static_cast<double>(b.
GetPixel(i));
107 cov+=(valueA-meanA)*(valueB-meanB);
108 sigmaA+=(valueA-meanA)*(valueA-meanA);
109 sigmaB+=(valueB-meanB)*(valueB-meanB);
115 sigmaA = vcl_sqrt(sigmaA);
116 sigmaB = vcl_sqrt(sigmaB);
118 if(sigmaA > 1e-20 && sigmaB > 1e-20)
120 ncc = vcl_abs(cov)/(sigmaA*sigmaB);
140 template <
class TInputImage,
class TOutputMetricImage>
169 for(
unsigned int i = 0; i<a.
Size(); ++i)
241 template <
class TInputImage,
class TOutputMetricImage,
class TOutputDisparityImage = TOutputMetricImage,
class TMaskImage = otb::Image<
unsigned char>,
242 class TBlockMatchingFunctor = Functor::SSDBlockMatching<TInputImage,TOutputMetricImage> >
267 typedef typename InputImageType::SizeType
SizeType;
276 void SetLeftInput(
const TInputImage * image);
279 void SetRightInput(
const TInputImage * image);
282 void SetLeftMaskInput(
const TMaskImage * image);
285 void SetRightMaskInput(
const TMaskImage * image);
288 const TInputImage * GetLeftInput()
const;
289 const TInputImage * GetRightInput()
const;
290 const TMaskImage * GetLeftMaskInput()
const;
291 const TMaskImage * GetRightMaskInput()
const;
294 const TOutputMetricImage * GetMetricOutput()
const;
295 TOutputMetricImage * GetMetricOutput();
298 const TOutputDisparityImage * GetHorizontalDisparityOutput()
const;
299 TOutputDisparityImage * GetHorizontalDisparityOutput();
302 const TOutputDisparityImage * GetVerticalDisparityOutput()
const;
303 TOutputDisparityImage * GetVerticalDisparityOutput();
307 void SetRadius(
unsigned int radius)
309 m_Radius.Fill(radius);
313 itkSetMacro(Radius, SizeType);
314 itkGetConstReferenceMacro(Radius, SizeType);
317 itkSetMacro(MinimumHorizontalDisparity,
int);
318 itkGetConstReferenceMacro(MinimumHorizontalDisparity,
int);
321 itkSetMacro(MaximumHorizontalDisparity,
int);
322 itkGetConstReferenceMacro(MaximumHorizontalDisparity,
int);
325 itkSetMacro(MinimumVerticalDisparity,
int);
326 itkGetConstReferenceMacro(MinimumVerticalDisparity,
int);
329 itkSetMacro(MaximumVerticalDisparity,
int);
330 itkGetConstReferenceMacro(MaximumVerticalDisparity,
int);
332 itkSetMacro(Minimize,
bool);
333 itkGetConstReferenceMacro(Minimize,
bool);
334 itkBooleanMacro(Minimize);
337 itkSetMacro(ExplorationRadius, SizeType);
338 itkGetConstReferenceMacro(ExplorationRadius, SizeType);
341 itkSetMacro(InitHorizontalDisparity,
int);
342 itkGetConstReferenceMacro(InitHorizontalDisparity,
int);
345 itkSetMacro(InitVerticalDisparity,
int);
346 itkGetConstReferenceMacro(InitVerticalDisparity,
int);
361 void SetHorizontalDisparityInput(
const TOutputDisparityImage * hfield);
364 void SetVerticalDisparityInput(
const TOutputDisparityImage * vfield);
367 const TOutputDisparityImage * GetHorizontalDisparityInput()
const;
368 const TOutputDisparityImage * GetVerticalDisparityInput()
const;
378 virtual void GenerateInputRequestedRegion();
381 virtual void BeforeThreadedGenerateData();
384 virtual void ThreadedGenerateData(
const RegionType & outputRegionForThread,
int threadId);
388 void operator=(
const Self&);
424 #ifndef OTB_MANUAL_INSTANTIATION