@@ -72,7 +72,7 @@ bool lsdgroups(const double *image, int row, int col, double scale, std::vector<
72
72
max_vote = 1 ;
73
73
} else if (cnt > max_vote){
74
74
max_idx = line_id;
75
- max_vote = cnt;
75
+ max_vote = cnt;
76
76
}
77
77
}
78
78
}
@@ -108,8 +108,8 @@ bool lsdgroups(const double *image, int row, int col, double scale, std::vector<
108
108
} else {
109
109
downdir.rotation (PI_4);
110
110
}
111
-
112
-
111
+
112
+
113
113
std::unordered_map<int , int > vote;
114
114
int max_vote = 0 , max_idx = -1 ;
115
115
@@ -127,7 +127,7 @@ bool lsdgroups(const double *image, int row, int col, double scale, std::vector<
127
127
max_vote = 1 ;
128
128
} else if (cnt > max_vote){
129
129
max_idx = line_id;
130
- max_vote = cnt;
130
+ max_vote = cnt;
131
131
}
132
132
}
133
133
}
@@ -175,7 +175,7 @@ bool lsdgroups(const double *image, int row, int col, double scale, std::vector<
175
175
return true ;
176
176
}
177
177
178
- bool getValidInitialEllipseSet (const uint8_t *image,
178
+ bool getValidInitialEllipseSet (const uint8_t *image,
179
179
const double *angles,
180
180
int row, int col,
181
181
std::vector<std::shared_ptr<Ellipse> > &ells,
@@ -228,15 +228,15 @@ bool getValidInitialEllipseSet(const uint8_t *image,
228
228
229
229
static bool meanShift (const std::vector<double > &data, std::vector<double > &init_data, int dims,
230
230
double sigma, double windos_size, double accuracy_tolerance, int iter_times) {
231
-
231
+
232
232
double temparr[8 ];
233
233
int nquerrues = (int )init_data.size () / dims;
234
234
int data_num = (int )data.size () / dims;
235
235
double sigma2 = sigma * sigma;
236
236
double radius2 = windos_size * windos_size;
237
237
double tolerance = accuracy_tolerance;
238
238
int maxiters = iter_times;
239
-
239
+
240
240
std::vector<double > dis (data_num);
241
241
for (int loop = 0 ; loop < nquerrues; ++loop) {
242
242
int iters = 0 ;
@@ -273,7 +273,7 @@ static bool meanShift(const std::vector<double> &data, std::vector<double> &init
273
273
init_data[loop * dims + d] /= denominator;
274
274
temp += sqr (init_data[loop * dims + d] - temparr[d]);
275
275
}
276
-
276
+
277
277
if (sqrt (temp) < tolerance) {
278
278
break ;
279
279
}
@@ -285,7 +285,7 @@ static bool meanShift(const std::vector<double> &data, std::vector<double> &init
285
285
286
286
static bool clusterByDistance (std::vector<double > &data, int dims, double distance_threshold,
287
287
double number_control) {
288
-
288
+
289
289
double threshold2 = distance_threshold * distance_threshold;
290
290
int npoints = (int )data.size () / dims;
291
291
if (npoints == 1 ) {
@@ -338,7 +338,7 @@ static bool cluster2DPoints(const std::vector<std::shared_ptr<Ellipse> > &ells,
338
338
std::vector<Pointd> &cluster_center,
339
339
double distance_tolerance,
340
340
int data_type) {
341
-
341
+
342
342
int nbinx, nbiny;
343
343
double xmax, ymax, xmin, ymin;
344
344
xmax = ymax = 0 ;
@@ -413,7 +413,7 @@ static bool cluster2DPoints(const std::vector<std::shared_ptr<Ellipse> > &ells,
413
413
static bool cluster1DDatas (const std::vector<std::shared_ptr<Ellipse> > &ells,
414
414
std::vector<double > &cluster_center,
415
415
double distance_tolerance) {
416
-
416
+
417
417
double val_max = 0 ;
418
418
double val_min = DBL_MAX;
419
419
std::vector<double > data;
@@ -430,7 +430,7 @@ static bool cluster1DDatas(const std::vector<std::shared_ptr<Ellipse> > &ells,
430
430
if (nbins <= 0 ) {
431
431
nbins = 1 ;
432
432
}
433
- // first sum, second vote;
433
+ // first sum, second vote;
434
434
std::vector<std::pair<double , int > > bindata (nbins, std::make_pair (0.0 , 0 ));
435
435
for (auto &ell : ells) {
436
436
int r = (int )floor ((ell->phi - val_min) / val_delta * nbins + 0.5 );
@@ -455,15 +455,15 @@ static bool cluster1DDatas(const std::vector<std::shared_ptr<Ellipse> > &ells,
455
455
456
456
// 均值漂移
457
457
meanShift (data, cluster_center, 1 , 1 , distance_tolerance, 1e-6 , 20 );
458
-
458
+
459
459
// 按照距离阈值聚类
460
460
clusterByDistance (cluster_center, 1 , distance_tolerance / 2 , 40 );
461
461
462
462
return true ;
463
463
}
464
464
465
465
bool generateEllipseCandidates (const uint8_t *image, const double *angles,
466
- int row, int col,
466
+ int row, int col,
467
467
std::vector<std::shared_ptr<Ellipse> > &ells, int polarity) {
468
468
469
469
std::vector<std::shared_ptr<Ellipse> > ells_init;
@@ -477,12 +477,12 @@ bool generateEllipseCandidates(const uint8_t *image, const double *angles,
477
477
478
478
479
479
// 最外层椭圆中心聚类 第二层椭圆 phi 聚类 第三层椭圆长短轴聚类
480
-
480
+
481
481
std::vector<Pointd> cluster_center;
482
482
cluster2DPoints (ells_init, cluster_center, MIN_ELLIPSE_THRESHOLD_LENGTH, 0 );
483
483
484
484
int center_num = (int )cluster_center.size ();
485
-
485
+
486
486
std::vector<std::vector<std::shared_ptr<Ellipse> > > ells_center (center_num);
487
487
488
488
// TODO(using KD tree optimization if necessary)
@@ -513,7 +513,7 @@ bool generateEllipseCandidates(const uint8_t *image, const double *angles,
513
513
514
514
std::sort (cluster_phi.begin (), cluster_phi.end ());
515
515
std::sort (ells_c.begin (), ells_c.end (),
516
- [](std::shared_ptr<Ellipse> &ea, std::shared_ptr<Ellipse> &eb) {
516
+ [](const std::shared_ptr<Ellipse> &ea, const std::shared_ptr<Ellipse> &eb) {
517
517
return ea->phi < eb->phi ;
518
518
});
519
519
int p = 0 ;
@@ -636,7 +636,7 @@ static bool subdetect(double *angles, int row, int col, double min_cover_angle,
636
636
if (issame) {
637
637
continue ;
638
638
}
639
-
639
+
640
640
double beta = PI * (1.5 * (ell->a + ell->b ) - sqrt (ell->a * ell->b ));
641
641
int tbins = min (180 , (int )floor (beta * tr));
642
642
std::vector<Pixel> inliers_t ;
@@ -733,7 +733,7 @@ static bool subdetect(double *angles, int row, int col, double min_cover_angle,
733
733
return true ;
734
734
}
735
735
736
- bool detectEllipse (const uint8_t *image, int row, int col,
736
+ bool detectEllipse (const uint8_t *image, int row, int col,
737
737
std::vector<std::shared_ptr<Ellipse> > &ells, int polarity, double width) {
738
738
739
739
// calc the gradient
@@ -749,9 +749,9 @@ bool detectEllipse(const uint8_t *image, int row, int col,
749
749
double tr = 0.6 ;
750
750
double distance_tolerance = MIN_ELLIPSE_THRESHOLD_LENGTH;
751
751
double normal_tolerance = cos (PI / 12.0 );
752
-
753
752
754
-
753
+
754
+
755
755
std::vector<Pixel> inliers_positive, inliers_negative, inliers_all;
756
756
std::vector<std::shared_ptr<Ellipse> > ells_temp;
757
757
for (auto &ell : ells) {
0 commit comments