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