2323#include " SEImplementation/Plugin/DetectionFrameCoordinates/DetectionFrameCoordinates.h"
2424#include < SEImplementation/Plugin/WorldCentroid/WorldCentroid.h>
2525#include < SEImplementation/Plugin/AssocMode/AssocMode.h>
26+ #include < SEImplementation/Plugin/ReferenceCoordinates/ReferenceCoordinates.h>
2627
2728#include < SEImplementation/Plugin/MeasurementFrameRectangle/MeasurementFrameRectangle.h>
2829#include < SEImplementation/Plugin/MeasurementFrameRectangle/MeasurementFrameRectangleTaskNoDetect.h>
@@ -31,23 +32,27 @@ namespace SourceXtractor {
3132
3233void MeasurementFrameRectangleTaskNoDetect::computeProperties (SourceInterface& source) const {
3334 auto measurement_frame_coordinates = source.getProperty <MeasurementFrameCoordinates>(m_instance).getCoordinateSystem ();
35+ auto reference_frame_coordinates = source.getProperty <ReferenceCoordinates>().getCoordinateSystem ();
36+
3437 const auto & measurement_frame_info = source.getProperty <MeasurementFrameInfo>(m_instance);
3538 const auto & world_centroid = source.getProperty <WorldCentroid>();
3639 const auto & assoc_mode = source.getProperty <AssocMode>();
3740
38- auto coord = world_centroid.getCentroid ();
39-
4041 bool bad_coordinates = false ;
4142 ImageCoordinate coord1, coord2, coord3, coord4;
4243 try {
43- int w = assoc_mode.getRefFramePixelWidth ();
44- int h = assoc_mode.getRefFramePixelHeight ();
44+ auto w = assoc_mode.getRefFramePixelWidth ();
45+ auto h = assoc_mode.getRefFramePixelHeight ();
4546
46- auto c = measurement_frame_coordinates->worldToImage (coord);
47- coord1 = ImageCoordinate (c.m_x - w, c.m_y - h);
48- coord2 = ImageCoordinate (c.m_x + w, c.m_y - h);
49- coord3 = ImageCoordinate (c.m_x - w, c.m_y + h);
50- coord4 = ImageCoordinate (c.m_x + w, c.m_y + h);
47+ auto c = reference_frame_coordinates->worldToImage (world_centroid.getCentroid ());
48+ coord1 = measurement_frame_coordinates->worldToImage (
49+ reference_frame_coordinates->imageToWorld (ImageCoordinate (c.m_x - w, c.m_y - h)));
50+ coord2 = measurement_frame_coordinates->worldToImage (
51+ reference_frame_coordinates->imageToWorld (ImageCoordinate (c.m_x + w, c.m_y - h)));
52+ coord3 = measurement_frame_coordinates->worldToImage (
53+ reference_frame_coordinates->imageToWorld (ImageCoordinate (c.m_x - w, c.m_y + h)));
54+ coord4 = measurement_frame_coordinates->worldToImage (
55+ reference_frame_coordinates->imageToWorld (ImageCoordinate (c.m_x + w, c.m_y + h)));
5156 }
5257 catch (const InvalidCoordinatesException&) {
5358 bad_coordinates = true ;
@@ -59,25 +64,20 @@ void MeasurementFrameRectangleTaskNoDetect::computeProperties(SourceInterface& s
5964 auto max_x = std::max (coord1.m_x , std::max (coord2.m_x , std::max (coord3.m_x , coord4.m_x )));
6065 auto max_y = std::max (coord1.m_y , std::max (coord2.m_y , std::max (coord3.m_y , coord4.m_y )));
6166
62- PixelCoordinate min_coord, max_coord;
63- min_coord.m_x = int (min_x);
64- min_coord.m_y = int (min_y);
65- max_coord.m_x = int (max_x) + 1 ;
66- max_coord.m_y = int (max_y) + 1 ;
67-
6867 // The full boundaries may lie outside of the frame
69- if (bad_coordinates || max_coord. m_x < 0 || max_coord. m_y < 0 ||
70- min_coord. m_x >= measurement_frame_info.getWidth () || min_coord. m_y >= measurement_frame_info.getHeight ()) {
68+ if (bad_coordinates || max_x < 0.0 || max_y < 0. 0 ||
69+ min_x >= measurement_frame_info.getWidth () - 0.5 || min_y >= measurement_frame_info.getHeight () - 0.5 ) {
7170 source.setIndexedProperty <MeasurementFrameRectangle>(m_instance, bad_coordinates);
7271 }
7372 // Clip the coordinates to fit the available image
7473 else {
75- min_coord. m_x = std::max (0 , min_coord. m_x );
76- min_coord. m_y = std::max (0 , min_coord. m_y );
77- max_coord. m_x = std::min (measurement_frame_info.getWidth () - 1 , max_coord. m_x );
78- max_coord. m_y = std::min (measurement_frame_info.getHeight () - 1 , max_coord. m_y );
74+ min_x = std::max (0.0 , min_x );
75+ min_y = std::max (0.0 , min_y );
76+ max_x = std::min (double ( measurement_frame_info.getWidth ()) - 0.5 , max_x );
77+ max_y = std::min (double ( measurement_frame_info.getHeight ()) - 0.5 , max_y );
7978
80- source.setIndexedProperty <MeasurementFrameRectangle>(m_instance, min_coord, max_coord);
79+ source.setIndexedProperty <MeasurementFrameRectangle>(
80+ m_instance, ImageCoordinate (min_x, min_y), ImageCoordinate (max_x, max_y));
8181 }
8282}
8383
0 commit comments