@@ -29,9 +29,10 @@ void check_img_format(const py::buffer_info& correct_info, const py::buffer_info
29
29
}
30
30
}
31
31
32
- // return LineSegmentDetection(n_out, img, X, Y, scale, sigma_scale, quant,
33
- // ang_th, log_eps, density_th, n_bins,
34
- // reg_img, reg_x, reg_y);
32
+ struct LineSegment
33
+ {
34
+ double x1, y1, x2, y2, /* width, */ p /* , new_log10_NFA*/ ;
35
+ };
35
36
36
37
// Passing in a generic array
37
38
// Passing in an array of doubles
@@ -80,7 +81,6 @@ py::array_t<float> run_lsd(const py::array_t<double>& img,
80
81
double *out = LineSegmentDetection (
81
82
&N, imagePtr, info.shape [1 ], info.shape [0 ], scale, sigma_scale, quant,
82
83
ang_th, log_eps, density_th, n_bins, grad_nfa, modgrad_ptr, angles_ptr);
83
- // std::cout << "Detected " << N << " LSD Segments" << std::endl;
84
84
85
85
py::array_t <float > segments ({N, 5 });
86
86
for (int i = 0 ; i < N; i++) {
@@ -138,11 +138,8 @@ py::list batched_run_lsd(const py::array_t<double>& img,
138
138
139
139
const size_t batch_size = info.shape [0 ];
140
140
const size_t img_size = info.shape [2 ] * info.shape [1 ];
141
- py::list segments;
142
141
143
- for (int b = 0 ; b < batch_size ; b++){
144
- segments.append (py::array_t <float >({1 , 5 }));
145
- }
142
+ std::vector<std::shared_ptr<std::vector<LineSegment>>> tmp (batch_size);
146
143
147
144
#pragma omp parallel for
148
145
for (int b = 0 ; b < batch_size ; b++){
@@ -151,20 +148,34 @@ py::list batched_run_lsd(const py::array_t<double>& img,
151
148
double *out = LineSegmentDetection (
152
149
&N, imagePtr + b * img_size, info.shape [2 ], info.shape [1 ], scale, sigma_scale, quant,
153
150
ang_th, log_eps, density_th, n_bins, grad_nfa, modgrad_ptr, angles_ptr);
154
- // std::cout << "b=" << b << ", Detected " << N << " LSD Segments" << std::endl;
155
151
156
- segments[b] = py::array_t <float >({N, 5 });
152
+ tmp[b] = std::make_shared< std::vector<LineSegment> >(N);
153
+ LineSegment * p_data = tmp[b]->data ();
157
154
for (int i = 0 ; i < N; i++) {
158
- segments[b][py::make_tuple (i, 0 )] = out[7 * i + 0 ];
159
- segments[b][py::make_tuple (i, 1 )] = out[7 * i + 1 ];
160
- segments[b][py::make_tuple (i, 2 )] = out[7 * i + 2 ];
161
- segments[b][py::make_tuple (i, 3 )] = out[7 * i + 3 ];
162
- segments[b][py::make_tuple (i, 4 )] = out[7 * i + 5 ];
163
- // p: out[7 * i + 4]);
164
- // -log10(NFA): out[7 * i + 5]);
155
+ p_data->x1 = out[7 * i + 0 ];
156
+ p_data->y1 = out[7 * i + 1 ];
157
+ p_data->x2 = out[7 * i + 2 ];
158
+ p_data->y2 = out[7 * i + 3 ];
159
+ p_data->p = out[7 * i + 5 ];
160
+ p_data++;
165
161
}
166
- free (( void *) out);
162
+ free (out);
167
163
}
164
+
165
+ py::list segments;
166
+ for (int b = 0 ; b < batch_size; b++){
167
+ py::array_t <float > tmp2 ({int (tmp[b]->size ()), 5 });
168
+ for (int i = 0 ; i < tmp[b]->size (); i++){
169
+ tmp2[py::make_tuple (i, 0 )] = tmp[b]->at (i).x1 ;
170
+ tmp2[py::make_tuple (i, 1 )] = tmp[b]->at (i).y1 ;
171
+ tmp2[py::make_tuple (i, 2 )] = tmp[b]->at (i).x2 ;
172
+ tmp2[py::make_tuple (i, 3 )] = tmp[b]->at (i).y2 ;
173
+ tmp2[py::make_tuple (i, 4 )] = tmp[b]->at (i).p ;
174
+ }
175
+ segments.append (tmp2);
176
+
177
+ }
178
+
168
179
return segments;
169
180
}
170
181
0 commit comments