blob: 8b7b25c060fa12d43c11f0e078756ad5d76eb8c2 [file] [log] [blame]
Brian Silverman26e4e522015-12-17 01:56:40 -05001/*----------------------------------------------------------------------------*/
2/* Copyright (c) FIRST 2014. All Rights Reserved. */
3/* Open Source Software - may be modified and shared by FRC teams. The code */
4/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
5/*----------------------------------------------------------------------------*/
6
7#pragma once
8
9#include "MonoImage.h"
10/**
11 * Included for ParticleAnalysisReport definition
12 * TODO: Eliminate this dependency!
13 */
14#include "Vision/VisionAPI.h"
15
16#include <vector>
17#include <algorithm>
18
19class BinaryImage : public MonoImage {
20 public:
21 virtual ~BinaryImage() = default;
22 int GetNumberParticles();
23 ParticleAnalysisReport GetParticleAnalysisReport(int particleNumber);
24 void GetParticleAnalysisReport(int particleNumber,
25 ParticleAnalysisReport *par);
26 std::vector<ParticleAnalysisReport> *GetOrderedParticleAnalysisReports();
27 BinaryImage *RemoveSmallObjects(bool connectivity8, int erosions);
28 BinaryImage *RemoveLargeObjects(bool connectivity8, int erosions);
29 BinaryImage *ConvexHull(bool connectivity8);
30 BinaryImage *ParticleFilter(ParticleFilterCriteria2 *criteria,
31 int criteriaCount);
32 virtual void Write(const char *fileName);
33
34 private:
35 bool ParticleMeasurement(int particleNumber, MeasurementType whatToMeasure,
36 int *result);
37 bool ParticleMeasurement(int particleNumber, MeasurementType whatToMeasure,
38 double *result);
39 static double NormalizeFromRange(double position, int range);
40 static bool CompareParticleSizes(ParticleAnalysisReport particle1,
41 ParticleAnalysisReport particle2);
42};