Parker Schuh | 0ff777c | 2017-02-19 15:01:13 -0800 | [diff] [blame] | 1 | #include "aos/vision/blob/move_scale.h" |
| 2 | |
| 3 | namespace aos { |
| 4 | namespace vision { |
| 5 | |
| 6 | RangeImage MoveScale(const RangeImage &img, int dx, int dy, int scale) { |
| 7 | std::vector<std::vector<ImageRange>> out_range_list; |
| 8 | for (const auto &range_list : img) { |
| 9 | std::vector<ImageRange> ranges; |
| 10 | for (const auto &range : range_list) { |
| 11 | ranges.emplace_back((range.st + dx) * scale, (range.ed + dx) * scale); |
| 12 | } |
| 13 | for (int i = 1; i < scale; ++i) { |
| 14 | out_range_list.push_back(ranges); |
| 15 | } |
| 16 | out_range_list.emplace_back(std::move(ranges)); |
| 17 | } |
| 18 | return RangeImage((img.mini() + dy) * scale, std::move(out_range_list)); |
| 19 | } |
| 20 | |
| 21 | std::vector<RangeImage> MoveScale(const std::vector<RangeImage> &imgs, int dx, |
| 22 | int dy, int scale) { |
| 23 | std::vector<RangeImage> out; |
| 24 | for (const auto &img : imgs) { |
| 25 | out.emplace_back(MoveScale(img, dx, dy, scale)); |
| 26 | } |
| 27 | return out; |
| 28 | } |
| 29 | |
| 30 | void GetBBox(const RangeImage &img, ImageBBox *bbox) { |
| 31 | bbox->miny = std::min(img.min_y(), bbox->miny); |
| 32 | bbox->maxy = std::max(img.min_y() + img.size(), bbox->maxy); |
| 33 | for (const auto &range_lst : img) { |
| 34 | if (range_lst.size() > 0) { |
| 35 | bbox->maxx = std::max(range_lst[range_lst.size() - 1].ed, bbox->maxx); |
| 36 | bbox->minx = std::min(range_lst[0].st, bbox->minx); |
| 37 | } |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | } // namespace vision |
| 42 | } // namespace aos |