| 21 | } |
| 22 | |
| 23 | std::vector<uint> IBRBasicUtils::selectCamerasSimpleDist(const std::vector<InputCamera::Ptr>& cams, const sibr::Camera & eye, uint count) |
| 24 | { |
| 25 | std::vector<uint> warped_img_id; |
| 26 | std::multimap<float, uint> dist; // distance wise closest input cameras |
| 27 | |
| 28 | for (uint i = 0; i < cams.size(); ++i) |
| 29 | { |
| 30 | if (cams.at(i)->isActive()) |
| 31 | { |
| 32 | float d = sibr::distance(cams[i]->position(), eye.position()); |
| 33 | float a = sibr::dot(cams[i]->dir(), eye.dir()); |
| 34 | if (a > 0.707) // cameras with 45 degrees |
| 35 | dist.insert(std::make_pair(d, i)); // sort distances in increasing order |
| 36 | } |
| 37 | } |
| 38 | |
| 39 | std::multimap<float, uint>::const_iterator d_it(dist.begin()); |
| 40 | for (uint i = 0; d_it != dist.end() && i < count; ++d_it, ++i) |
| 41 | warped_img_id.push_back(d_it->second); |
| 42 | |
| 43 | SIBR_ASSERT(warped_img_id.size() <= count); |
| 44 | |
| 45 | return warped_img_id; |
| 46 | } |
| 47 | |
| 48 | std::vector<uint> IBRBasicUtils::selectCamerasAngleWeight(const std::vector<InputCamera::Ptr>& cams, const sibr::Camera & eye, uint count) |
| 49 | { |