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