19 #include <opencv2/core/core_c.h>
20 #include <iCub/stereoVision/elasWrapper.h>
22 int64 elasWrapper::workBegin()
24 return getTickCount();
27 double elasWrapper::workEnd(int64 work_begin)
29 int64 d = getTickCount() - work_begin;
30 double f = getTickFrequency();
31 double work_time = d / f;
35 elasWrapper::elasWrapper(
double _io_scaling_factor,
string elas_setting) : Elas(parameters(( elas_setting ==
"MIDDLEBURY") ? MIDDLEBURY : ROBOTICS))
37 param.postprocess_only_left =
true;
39 io_scaling_factor = _io_scaling_factor;
42 elasWrapper::elasWrapper() : Elas(parameters(ROBOTICS))
44 param.postprocess_only_left =
true;
46 io_scaling_factor = 1.0;
49 bool elasWrapper::compute_disparity(
const cv::Mat &imL,
const cv::Mat &imR, cv::Mat &dispL,
int num_disparities)
53 if (imL.cols <= 0 || imL.rows <= 0 || imR.cols <= 0 || imR.rows <= 0
54 || imL.cols != imR.cols || imL.rows != imR.rows)
56 cout <<
"ERROR: Images must be of same size, but" << endl;
57 cout <<
" I1: " << imL.cols <<
" x " << imL.rows <<
", I2: "
58 << imR.cols <<
" x " << imR.rows << endl;
62 Size im_size = imL.size();
64 param.disp_max = num_disparities - 1;
66 Mat imR_scaled, imL_scaled;
67 if (io_scaling_factor!=1.0)
69 resize(imR, imR_scaled, Size(), io_scaling_factor, io_scaling_factor);
70 resize(imL, imL_scaled, Size(), io_scaling_factor, io_scaling_factor);
73 imR_scaled = imR.clone();
74 imL_scaled = imL.clone();
76 int width = imL_scaled.cols;
77 int height = imL_scaled.rows;
79 int width_disp_data = param.subsampling ? width>>1 : width;
80 int height_disp_data = param.subsampling ? height>>1 : height;
82 float *dispL_data = (
float*) malloc(width_disp_data * height_disp_data *
sizeof(
float));
83 float *dispR_data = (
float*) malloc(width_disp_data * height_disp_data *
sizeof(
float));
86 if (imL_scaled.channels() == 3)
88 cv::cvtColor(imL_scaled, imL_scaled, cv::COLOR_BGR2GRAY);
89 cv::cvtColor(imR_scaled, imR_scaled, cv::COLOR_BGR2GRAY);
91 if (!imL_scaled.isContinuous())
92 imL_scaled = imL_scaled.clone();
93 if (!imR_scaled.isContinuous())
94 imR_scaled = imR_scaled.clone();
97 const int32_t dims[3] = {width,height,width};
99 bool success = process((
unsigned char*)imL_scaled.data,(
unsigned char*)imR_scaled.data, dispL_data, dispR_data, dims);
103 Mat dispL_scaled = Mat(height_disp_data, width_disp_data, CV_32FC1, dispL_data);
105 if (io_scaling_factor!=1.0 || param.subsampling==
true)
106 resize(dispL_scaled, dispL, im_size);
108 dispL = dispL_scaled.clone();
117 int elasWrapper::get_disp_min()
119 return param.disp_min;
121 int elasWrapper::get_disp_max()
123 return param.disp_max;
125 float elasWrapper::get_support_threshold()
127 return param.support_threshold;
129 int elasWrapper::get_support_texture()
131 return param.support_texture;
133 int elasWrapper::get_candidate_stepsize()
135 return param.candidate_stepsize;
137 int elasWrapper::get_incon_window_size()
139 return param.incon_window_size;
141 int elasWrapper::get_incon_threshold()
143 return param.incon_threshold;
145 int elasWrapper::get_incon_min_support()
147 return param.incon_min_support;
149 bool elasWrapper::get_add_corners()
151 return param.add_corners;
153 int elasWrapper::get_grid_size()
155 return param.grid_size;
157 float elasWrapper::get_beta()
161 float elasWrapper::get_gamma()
165 float elasWrapper::get_sigma()
169 float elasWrapper::get_sradius()
171 return param.sradius;
173 int elasWrapper::get_match_texture()
175 return param.match_texture;
177 int elasWrapper::get_lr_threshold()
179 return param.lr_threshold;
181 float elasWrapper::get_speckle_sim_threshold()
183 return param.speckle_sim_threshold;
185 int elasWrapper::get_speckle_size()
187 return param.speckle_size;
189 int elasWrapper::get_ipol_gap_width()
191 return param.ipol_gap_width;
193 bool elasWrapper::get_filter_median()
195 return param.filter_median;
197 bool elasWrapper::get_filter_adaptive_mean()
199 return param.filter_adaptive_mean;
201 bool elasWrapper::get_postprocess_only_left()
203 return param.postprocess_only_left;
205 bool elasWrapper::get_subsampling()
207 return param.subsampling;
211 void elasWrapper::set_disp_min(
int param_value)
213 param.disp_min = param_value;
215 void elasWrapper::set_disp_max(
int param_value)
217 param.disp_max = param_value;
219 void elasWrapper::set_support_threshold(
float param_value)
221 param.support_threshold = param_value;
223 void elasWrapper::set_support_texture(
int param_value)
225 param.support_texture = param_value;
227 void elasWrapper::set_candidate_stepsize(
int param_value)
229 param.candidate_stepsize = param_value;
231 void elasWrapper::set_incon_window_size(
int param_value)
233 param.incon_window_size = param_value;
235 void elasWrapper::set_incon_threshold(
int param_value)
237 param.incon_threshold = param_value;
239 void elasWrapper::set_incon_min_support(
int param_value)
241 param.incon_min_support = param_value;
243 void elasWrapper::set_add_corners(
bool param_value)
245 param.add_corners = param_value;
247 void elasWrapper::set_grid_size(
int param_value)
249 param.grid_size = param_value;
251 void elasWrapper::set_beta(
float param_value)
253 param.beta = param_value;
255 void elasWrapper::set_gamma(
float param_value)
257 param.gamma = param_value;
259 void elasWrapper::set_sigma(
float param_value)
261 param.sigma = param_value;
263 void elasWrapper::set_sradius(
float param_value)
265 param.sradius = param_value;
267 void elasWrapper::set_match_texture(
int param_value)
269 param.match_texture = param_value;
271 void elasWrapper::set_lr_threshold(
int param_value)
273 param.lr_threshold = param_value;
275 void elasWrapper::set_speckle_sim_threshold(
float param_value)
277 param.speckle_sim_threshold = param_value;
279 void elasWrapper::set_speckle_size(
int param_value)
281 param.speckle_size = param_value;
283 void elasWrapper::set_ipol_gap_width(
int param_value)
285 param.ipol_gap_width = param_value;
287 void elasWrapper::set_filter_median(
bool param_value)
289 param.filter_median = param_value;
291 void elasWrapper::set_filter_adaptive_mean(
bool param_value)
293 param.filter_adaptive_mean = param_value;
295 void elasWrapper::set_postprocess_only_left(
bool param_value)
297 param.postprocess_only_left = param_value;
299 void elasWrapper::set_subsampling(
bool param_value)
301 param.subsampling = param_value;