From 1be573ee1282fd89c17bea1cfdc9ecf46ee23cfa Mon Sep 17 00:00:00 2001
From: Guillaume Pasero <guillaume.pasero@c-s.fr>
Date: Thu, 25 Sep 2014 10:34:35 +0200
Subject: [PATCH] BUG: Mantis-942: proper computation of opposite region

---
 .../otbHomologousPointsExtraction.cxx         | 30 ++++++++++---------
 1 file changed, 16 insertions(+), 14 deletions(-)

diff --git a/Applications/FeatureExtraction/otbHomologousPointsExtraction.cxx b/Applications/FeatureExtraction/otbHomologousPointsExtraction.cxx
index 5b96afae28..1cf1c2e111 100644
--- a/Applications/FeatureExtraction/otbHomologousPointsExtraction.cxx
+++ b/Applications/FeatureExtraction/otbHomologousPointsExtraction.cxx
@@ -397,9 +397,7 @@ private:
       unsigned int nb_bins_x = static_cast<unsigned int>(vcl_ceil(static_cast<float>(size[0]-2*image_border_margin)/(bin_size_x + bin_step_x)));
       unsigned int nb_bins_y = static_cast<unsigned int>(vcl_ceil(static_cast<float>(size[1]-2*image_border_margin)/(bin_size_y + bin_step_y)));
 
-      FloatImageType::SpacingType spacing1 = this->GetParameterImage("in1")->GetSpacing();
-      FloatImageType::PointType origin1 = this->GetParameterImage("in1")->GetOrigin();
-
+      FloatVectorImageType::Pointer image1 = this->GetParameterImage("in1");
       FloatVectorImageType::Pointer image2 = this->GetParameterImage("in2");
 
       for(unsigned int i = 0; i<nb_bins_x; ++i)
@@ -434,20 +432,24 @@ private:
 
 
           // We need to find the corresponding region in image 2
+          itk::ContinuousIndex<double,2> ul_i, ur_i, lr_i, ll_i;
           FloatImageType::PointType ul1, ur1, ll1, lr1, p1, p2, p3, p4;
           itk::ContinuousIndex<double,2> i1, i2, i3, i4, i_min, i_max;
 
-          ul1[0] = origin1[0] + startx * spacing1[0];
-          ul1[1] = origin1[1] + starty * spacing1[1];
-
-          ur1[0] = origin1[0] + (startx+bin_size_x) * spacing1[0];
-          ur1[1] = origin1[1] + starty * spacing1[1];
-
-          lr1[0] = origin1[0] + (startx+bin_size_x) * spacing1[0];
-          lr1[1] = origin1[1] + (starty+bin_size_y) * spacing1[1];
-
-          ll1[0] = origin1[0] + (startx) * spacing1[0];
-          ll1[1] = origin1[1] + (starty+bin_size_y) * spacing1[1];
+          ul_i[0] = static_cast<double>(startx) - 0.5;
+          ul_i[1] = static_cast<double>(starty) - 0.5;
+          ur_i = ul_i;
+          lr_i = ul_i;
+          ll_i = ul_i;
+          ur_i[0] += static_cast<double>(bin_size_x);
+          lr_i[0] += static_cast<double>(bin_size_x);
+          lr_i[1] += static_cast<double>(bin_size_y);
+          ll_i[1] += static_cast<double>(bin_size_y);
+
+          image1->TransformContinuousIndexToPhysicalPoint(ul_i,ul1);
+          image1->TransformContinuousIndexToPhysicalPoint(ur_i,ur1);
+          image1->TransformContinuousIndexToPhysicalPoint(lr_i,lr1);
+          image1->TransformContinuousIndexToPhysicalPoint(ll_i,ll1);
 
           p1 = rsTransform->TransformPoint(ul1);
           p2 = rsTransform->TransformPoint(ur1);
-- 
GitLab