ImageD  v2_7_5 (24.06.22)
ImageD is an image processing software designed for rapid prototyping and implementing algorithms and solutions for science, research and teaching.
d_geo_pointset_2d.h
Go to the documentation of this file.
1 /************************************
2  * added: 07.04.2021 *
3  * author: David Eilenstein *
4  * contact: D.Eilenstein@gsi.de *
5  * project: ImageD *
6  * facility: GSI Darmstadt, Ger *
7  ************************************/
8 
9 #ifndef D_GEO_POINTSET_2D_H
10 #define D_GEO_POINTSET_2D_H
11 
12 //own
13 #include <d_enum.h>
14 #include <d_geo_point_2d.h>
15 #include <d_geo_line_2d.h>
16 
17 //general
18 #include <iostream>
19 #include <vector>
20 #include <fstream>
21 #include <math.h>
22 #include <random>
23 
24 //Qt
25 #include <QDebug>
26 
27 //openCV
28 #include <opencv2/core/core.hpp>
29 #include <opencv2/highgui/highgui.hpp>
30 #include <opencv2/imgproc/imgproc.hpp>
31 
32 //namespaces
33 using namespace std;
34 //using namespace cv; (prohibited because of abigous names with qtdatavisualization)
35 #include <d_opencv_typedefs.h>
36 
38 {
39 public:
40  //constructors
42  D_Geo_PointSet_2D(vector<D_Geo_Point_2D> points);
43 
44  //add points
45  void add_point(D_Geo_Point_2D P) {v_points.push_back(P);}
46  void add_point(double x, double y) {add_point(D_Geo_Point_2D(x, y));}
47  void add_point(double u, double v, double w) {add_point(D_Geo_Point_2D(u, v, w));}
49 
50  //getter & info about
51  size_t size() {return v_points.size();}
52  vector<D_Geo_Point_2D> points() {return v_points;}
53  D_Geo_Point_2D point(size_t i) {return i < size() ? v_points[i] : D_Geo_Point_2D(0, 0, 0);}
54  D_Geo_Point_2D point_random();
55  D_Geo_PointSet_2D subset_random(double rel_size);
56  RotatedRect ellipse_fitted();
57  RotatedRect ellipse_pca_deviations();
58 
59  //naive center/std
60  D_Geo_Point_2D center();
61  D_Geo_Point_2D center(double *std);
62  D_Geo_Point_2D center(double *std, vector<double> *v_residuals);
63  double standard_deviation(D_Geo_Point_2D P_reference);
64  double standard_deviation();
65  double standard_deviation(D_Geo_Point_2D P_reference, vector<double> *v_residuals);
66 
67  //k-means culstering
68  D_Geo_PointSet_2D centers_clusters_kmeans(size_t k, size_t iterations, double *deviation);
69  D_Geo_PointSet_2D centers_clusters_kmeans(size_t k, double *deviation);
70  D_Geo_PointSet_2D centers_clusters_kmeans(D_Geo_PointSet_2D centers_initial, double *deviation);
71 
72 private:
73  vector<D_Geo_PointSet_2D> clusters_kmeans_iteration(vector<D_Geo_PointSet_2D> clusters_in, bool *something_changed);
74 
75  //members
76  vector<D_Geo_Point_2D> v_points;
77 };
78 
79 #endif // D_GEO_POINTSET_2D_H
Mat
cv::Mat Mat
Definition: d_opencv_typedefs.h:28
D_Geo_PointSet_2D::ellipse_pca_deviations
RotatedRect ellipse_pca_deviations()
Definition: d_geo_pointset_2d.cpp:66
D_Geo_PointSet_2D::standard_deviation
double standard_deviation()
D_Geo_PointSet_2D::standard_deviation calcs the standard deviation to the center.
Definition: d_geo_pointset_2d.cpp:156
Point2f
cv::Point2f Point2f
Definition: d_opencv_typedefs.h:37
d_geo_pointset_2d.h
D_Geo_Point_2D::distance
double distance(D_Geo_Point_2D P)
Definition: d_geo_point_2d.cpp:160
D_Geo_PointSet_2D::subset_random
D_Geo_PointSet_2D subset_random(double rel_size)
D_Geo_PointSet_2D::random_subset takes a subset of the line set for i.e. RANSAC methods.
Definition: d_geo_pointset_2d.cpp:26
D_Geo_PointSet_2D::add_point
void add_point(double x, double y)
Definition: d_geo_pointset_2d.h:46
D_Geo_Line_2D
The D_Geo_Line_2D class represents a 2D line and offers usefulls methods for standard tasks for 2D po...
Definition: d_geo_line_2d.h:43
D_Geo_Point_2D::y
double y()
Definition: d_geo_point_2d.h:63
d_geo_line_2d.h
D_Geo_PointSet_2D::size
size_t size()
Definition: d_geo_pointset_2d.h:51
D_Geo_PointSet_2D::point
D_Geo_Point_2D point(size_t i)
Definition: d_geo_pointset_2d.h:53
D_Geo_PointSet_2D::point_random
D_Geo_Point_2D point_random()
D_Geo_PointSet_2D::point_random returns a random point from the point set.
Definition: d_geo_pointset_2d.cpp:103
D_Geo_PointSet_2D::centers_clusters_kmeans
D_Geo_PointSet_2D centers_clusters_kmeans(size_t k, size_t iterations, double *deviation)
Definition: d_geo_pointset_2d.cpp:185
D_Geo_PointSet_2D::D_Geo_PointSet_2D
D_Geo_PointSet_2D()
Definition: d_geo_pointset_2d.cpp:11
d_geo_point_2d.h
D_Geo_Point_2D::x
double x()
Definition: d_geo_point_2d.h:62
D_Geo_PointSet_2D::add_point
void add_point(D_Geo_Point_2D P)
Definition: d_geo_pointset_2d.h:45
D_Geo_PointSet_2D
Definition: d_geo_pointset_2d.h:38
D_Geo_PointSet_2D::points
vector< D_Geo_Point_2D > points()
Definition: d_geo_pointset_2d.h:52
Point2d
cv::Point2d Point2d
Definition: d_opencv_typedefs.h:38
D_Geo_PointSet_2D::ellipse_fitted
RotatedRect ellipse_fitted()
D_Geo_PointSet_2D::ellipse_fitted fit an ellipse to the point set.
Definition: d_geo_pointset_2d.cpp:55
d_opencv_typedefs.h
d_enum.h
D_Geo_PointSet_2D::center
D_Geo_Point_2D center()
D_Geo_PointSet_2D::center calc center of the point set.
Definition: d_geo_pointset_2d.cpp:119
D_Geo_PointSet_2D::add_point
void add_point(double u, double v, double w)
Definition: d_geo_pointset_2d.h:47
RotatedRect
cv::RotatedRect RotatedRect
Definition: d_opencv_typedefs.h:66
D_Geo_Point_2D
The D_Geo_Point_2D class represents a 2D point and offers usefulls methods for standard tasks for 2D ...
Definition: d_geo_point_2d.h:43
PCA
cv::PCA PCA
Definition: d_opencv_typedefs.h:69
D_Geo_PointSet_2D::add_point
void add_point(D_Geo_Line_2D L1, D_Geo_Line_2D L2)
Definition: d_geo_pointset_2d.h:48
Size2f
cv::Size2f Size2f
Definition: d_opencv_typedefs.h:32