| 145 | } |
| 146 | |
| 147 | void initializer::create_initializer(data::frame &curr_frm) |
| 148 | { |
| 149 | // set the initial frame |
| 150 | init_frm_ = data::frame(curr_frm); |
| 151 | |
| 152 | // initialize the previously matched coordinates |
| 153 | prev_matched_coords_.resize(init_frm_.undist_keypts_.size()); // std::vector<cv::Point2f> |
| 154 | for (unsigned int i = 0; i < init_frm_.undist_keypts_.size(); ++i) |
| 155 | { |
| 156 | prev_matched_coords_.at(i) = init_frm_.undist_keypts_.at(i).pt; |
| 157 | } |
| 158 | |
| 159 | // initialize matchings (init_idx -> curr_idx) |
| 160 | std::fill(init_matches_.begin(), init_matches_.end(), -1); |
| 161 | |
| 162 | // build a initializer |
| 163 | initializer_base_.reset(nullptr); // std::unique_ptr<initialize::base> |
| 164 | switch (init_frm_.camera_->model_type_) |
| 165 | { |
| 166 | case camera::model_type_t::Perspective: |
| 167 | case camera::model_type_t::Fisheye: |
| 168 | { |
| 169 | initializer_base_ = std::unique_ptr<initialize::perspective>(new initialize::perspective(init_frm_, |
| 170 | num_ransac_iters_, min_num_triangulated_, |
| 171 | parallax_deg_thr_, reproj_err_thr_)); |
| 172 | break; |
| 173 | } |
| 174 | case camera::model_type_t::Equirectangular: |
| 175 | { |
| 176 | initializer_base_ = std::unique_ptr<initialize::bearing_vector>(new initialize::bearing_vector(init_frm_, |
| 177 | num_ransac_iters_, min_num_triangulated_, |
| 178 | parallax_deg_thr_, reproj_err_thr_)); |
| 179 | break; |
| 180 | } |
| 181 | } |
| 182 | |
| 183 | state_ = initializer_state_t::Initializing; |
| 184 | } |
| 185 | |
| 186 | bool initializer::try_initialize_for_monocular(data::frame &curr_frm) |
| 187 | { |