Add debug_viewer, target_finder, target_sender.
Change-Id: I50c3512c7444aa58cb8b80e1e46fe26637c68c81
diff --git a/y2019/vision/target_finder.h b/y2019/vision/target_finder.h
new file mode 100644
index 0000000..633733a
--- /dev/null
+++ b/y2019/vision/target_finder.h
@@ -0,0 +1,80 @@
+#ifndef _Y2019_VISION_TARGET_FINDER_H_
+#define _Y2019_VISION_TARGET_FINDER_H_
+
+#include "aos/vision/blob/region_alloc.h"
+#include "aos/vision/blob/threshold.h"
+#include "aos/vision/blob/transpose.h"
+#include "aos/vision/debug/overlay.h"
+#include "aos/vision/math/vector.h"
+#include "y2019/vision/target_types.h"
+
+namespace y2019 {
+namespace vision {
+
+using aos::vision::ImageRange;
+using aos::vision::RangeImage;
+using aos::vision::BlobList;
+using aos::vision::Vector;
+
+class TargetFinder {
+ public:
+ TargetFinder();
+ // Turn a raw image into blob range image.
+ aos::vision::RangeImage Threshold(aos::vision::ImagePtr image);
+
+ // Value against which we threshold.
+ uint8_t GetThresholdValue() { return 120; }
+
+ // filter out obvious or durranged blobs.
+ void PreFilter(BlobList *imgs);
+
+ // Turn a blob into a polgygon.
+ std::vector<aos::vision::Segment<2>> FillPolygon(const RangeImage &blob,
+ bool verbose);
+
+ // Turn a bloblist into components of a target.
+ std::vector<TargetComponent> FillTargetComponentList(
+ const std::vector<std::vector<aos::vision::Segment<2>>> &seg_list);
+
+ // Piece the compenents together into a target.
+ std::vector<Target> FindTargetsFromComponents(
+ const std::vector<TargetComponent> component_list, bool verbose);
+
+ // Given a target solve for the transformation of the template target.
+ IntermediateResult ProcessTargetToResult(const Target &target, bool verbose);
+
+ std::vector<IntermediateResult> FilterResults(
+ const std::vector<IntermediateResult> &results);
+
+ // Get the local overlay for debug if we are doing that.
+ aos::vision::PixelLinesOverlay *GetOverlay() { return &overlay_; }
+
+ // Convert target location into meters and radians.
+ void GetAngleDist(const aos::vision::Vector<2> &target, double down_angle,
+ double *dist, double *angle);
+
+ // Return the template target in a normalized space.
+ const Target &GetTemplateTarget() { return target_template_; }
+
+ const IntrinsicParams &intrinsics() const { return intrinsics_; }
+
+ private:
+ // Find a loosly connected target.
+ double DetectConnectedTarget(const RangeImage &img);
+
+ aos::vision::PixelLinesOverlay overlay_;
+
+ aos::vision::AnalysisAllocator alloc_;
+
+ // The template for the default target in the standard space.
+ Target target_template_;
+
+ IntrinsicParams intrinsics_;
+
+ ExtrinsicParams default_extrinsics_;
+};
+
+} // namespace vision
+} // namespace y2019
+
+#endif