25#include <fvmodels/shape/circle.h>
76 double A00 = 0.0, A01 = 0.0, A02 = 0.0;
77 double A10 = 0.0, A11 = 0.0, A12 = 0.0;
78 double A20 = 0.0, A21 = 0.0, A22 = 0.0;
79 double b0 = 0.0, b1 = 0.0, b2 = 0.0;
82 int count = points.size();
83 for (
int i = 0; i <
count; i++) {
85 double x0 = 2.0f * t.
x;
86 double y0 = 2.0f * t.
y;
87 double b = (double)(t.
x * t.
x + t.
y * t.
y);
103 double delta = +A00 * A11 * A22 + A01 * A12 * A20 + A02 * A10 * A21 - A00 * A12 * A21
104 - A01 * A10 * A22 - A02 * A11 * A20;
105 center.
x = (float)((+b0 * A11 * A22 + A01 * A12 * b2 + A02 * b1 * A21 - b0 * A12 * A21
106 - A01 * b1 * A22 - A02 * A11 * b2)
108 center.
y = (float)((+A00 * b1 * A22 + b0 * A12 * A20 + A02 * A10 * b2 - A00 * A12 * b2
109 - b0 * A10 * A22 - A02 * b1 * A20)
111 radius = (float)sqrtf((+A00 * A11 * b2 + A01 * b1 * A20 + b0 * A10 * A21 - A00 * b1 * A21
112 - A01 * A10 * b2 - b0 * A11 * A20)
115 count = points.size();
127 float dx = in_roi_x -
center.
x;
128 float dy = in_roi_y -
center.
y;
130 float dist = sqrt(dx * dx + dy * dy);
void setMargin(unsigned int margin)
Set margin around shape.
void fitCircle(std::vector< fawkes::upoint_t > &points)
Fit circle.
float radius
Radius of object.
center_in_roi_t center
Center of object in ROI.
void printToStream(std::ostream &stream)
Print info.
bool isClose(unsigned int in_roi_x, unsigned int in_roi_y)
Check if the given point is close to the shape.
int count
Number of pixels.
unsigned int margin
Margin around shape.
Fawkes library namespace.
Point with cartesian coordinates as unsigned integers.
unsigned int x
x coordinate
unsigned int y
y coordinate