Squashed 'third_party/allwpilib_2016/' content from commit 7f61816
Change-Id: If9d9245880859cdf580f5d7f77045135d0521ce7
git-subtree-dir: third_party/allwpilib_2016
git-subtree-split: 7f618166ed253a24629934fcf89c3decb0528a3b
diff --git a/wpilibc/Athena/include/Vision/VisionAPI.h b/wpilibc/Athena/include/Vision/VisionAPI.h
new file mode 100644
index 0000000..3153f1b
--- /dev/null
+++ b/wpilibc/Athena/include/Vision/VisionAPI.h
@@ -0,0 +1,172 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) FIRST 2014. All Rights Reserved. */
+/* Open Source Software - may be modified and shared by FRC teams. The code */
+/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
+/*----------------------------------------------------------------------------*/
+
+#pragma once
+
+#include "nivision.h"
+
+/* Constants */
+
+#define DEFAULT_BORDER_SIZE 3 // VisionAPI.frcCreateImage
+#define DEFAULT_SATURATION_THRESHOLD 40 // TrackAPI.FindColor
+
+/* Forward Declare Data Structures */
+typedef struct FindEdgeOptions_struct FindEdgeOptions;
+typedef struct CircularEdgeReport_struct CircularEdgeReport;
+
+/* Data Structures */
+
+/** frcParticleAnalysis returns this structure */
+typedef struct ParticleAnalysisReport_struct {
+ int imageHeight;
+ int imageWidth;
+ double imageTimestamp;
+ int particleIndex; // the particle index analyzed
+ /* X-coordinate of the point representing the average position of the
+ * total particle mass, assuming every point in the particle has a constant
+ * density */
+ int center_mass_x; // MeasurementType: IMAQ_MT_CENTER_OF_MASS_X
+ /* Y-coordinate of the point representing the average position of the
+ * total particle mass, assuming every point in the particle has a constant
+ * density */
+ int center_mass_y; // MeasurementType: IMAQ_MT_CENTER_OF_MASS_Y
+ double center_mass_x_normalized; // Center of mass x value normalized to -1.0
+ // to +1.0 range
+ double center_mass_y_normalized; // Center of mass y value normalized to -1.0
+ // to +1.0 range
+ /* Area of the particle */
+ double particleArea; // MeasurementType: IMAQ_MT_AREA
+ /* Bounding Rectangle */
+ Rect boundingRect; // left/top/width/height
+ /* Percentage of the particle Area covering the Image Area. */
+ double particleToImagePercent; // MeasurementType: IMAQ_MT_AREA_BY_IMAGE_AREA
+ /* Percentage of the particle Area in relation to its Particle and Holes Area
+ */
+ double particleQuality; // MeasurementType:
+ // IMAQ_MT_AREA_BY_PARTICLE_AND_HOLES_AREA
+} ParticleAnalysisReport;
+
+/** Tracking functions return this structure */
+typedef struct ColorReport_struct {
+ int numberParticlesFound; // Number of particles found for this color
+ int largestParticleNumber; // The particle index of the largest particle
+ /* Color information */
+ float particleHueMax; // HistogramReport: hue max
+ float particleHueMin; // HistogramReport: hue max
+ float particleHueMean; // HistogramReport: hue mean
+ float particleSatMax; // HistogramReport: saturation max
+ float particleSatMin; // HistogramReport: saturation max
+ float particleSatMean; // HistogramReport: saturation mean
+ float particleLumMax; // HistogramReport: luminance max
+ float particleLumMin; // HistogramReport: luminance max
+ float particleLumMean; // HistogramReport: luminance mean
+} ColorReport;
+
+/* Image Management functions */
+
+/* Create: calls imaqCreateImage. Border size is set to some default value */
+Image* frcCreateImage(ImageType type);
+
+/* Dispose: calls imaqDispose */
+int frcDispose(void* object);
+int frcDispose(const char* filename, ...);
+
+/* Copy: calls imaqDuplicateImage */
+int frcCopyImage(Image* dest, const Image* source);
+
+/* Image Extraction: Crop: calls imaqScale */
+int frcCrop(Image* dest, const Image* source, Rect rect);
+
+/* Image Extraction: Scale: calls imaqScale. Scales entire image */
+int frcScale(Image* dest, const Image* source, int xScale, int yScale,
+ ScalingMode scaleMode);
+
+/* Read Image : calls imaqReadFile */
+int frcReadImage(Image* image, const char* fileName);
+/* Write Image : calls imaqWriteFile */
+int frcWriteImage(const Image* image, const char* fileName);
+
+/* Measure Intensity functions */
+
+/* Histogram: calls imaqHistogram */
+HistogramReport* frcHistogram(const Image* image, int numClasses, float min,
+ float max, Rect rect);
+/* Color Histogram: calls imaqColorHistogram2 */
+ColorHistogramReport* frcColorHistogram(const Image* image, int numClasses,
+ ColorMode mode, Image* mask);
+
+/* Get Pixel Value: calls imaqGetPixel */
+int frcGetPixelValue(const Image* image, Point pixel, PixelValue* value);
+
+/* Particle Analysis functions */
+
+/* Particle Filter: calls imaqParticleFilter3 */
+int frcParticleFilter(Image* dest, Image* source,
+ const ParticleFilterCriteria2* criteria,
+ int criteriaCount, const ParticleFilterOptions* options,
+ Rect rect, int* numParticles);
+int frcParticleFilter(Image* dest, Image* source,
+ const ParticleFilterCriteria2* criteria,
+ int criteriaCount, const ParticleFilterOptions* options,
+ int* numParticles);
+/* Morphology: calls imaqMorphology */
+int frcMorphology(Image* dest, Image* source, MorphologyMethod method);
+int frcMorphology(Image* dest, Image* source, MorphologyMethod method,
+ const StructuringElement* structuringElement);
+/* Reject Border: calls imaqRejectBorder */
+int frcRejectBorder(Image* dest, Image* source);
+int frcRejectBorder(Image* dest, Image* source, int connectivity8);
+/* Count Particles: calls imaqCountParticles */
+int frcCountParticles(Image* image, int* numParticles);
+/* Particle Analysis Report: calls imaqMeasureParticle */
+int frcParticleAnalysis(Image* image, int particleNumber,
+ ParticleAnalysisReport* par);
+
+/* Image Enhancement functions */
+
+/* Equalize: calls imaqEqualize */
+int frcEqualize(Image* dest, const Image* source, float min, float max);
+int frcEqualize(Image* dest, const Image* source, float min, float max,
+ const Image* mask);
+
+/* Color Equalize: calls imaqColorEqualize */
+int frcColorEqualize(Image* dest, const Image* source);
+int frcColorEqualize(Image* dest, const Image* source, int colorEqualization);
+
+/* Image Thresholding & Conversion functions */
+
+/* Smart Threshold: calls imaqLocalThreshold */
+int frcSmartThreshold(Image* dest, const Image* source,
+ unsigned int windowWidth, unsigned int windowHeight,
+ LocalThresholdMethod method, double deviationWeight,
+ ObjectType type);
+int frcSmartThreshold(Image* dest, const Image* source,
+ unsigned int windowWidth, unsigned int windowHeight,
+ LocalThresholdMethod method, double deviationWeight,
+ ObjectType type, float replaceValue);
+
+/* Simple Threshold: calls imaqThreshold */
+int frcSimpleThreshold(Image* dest, const Image* source, float rangeMin,
+ float rangeMax, float newValue);
+int frcSimpleThreshold(Image* dest, const Image* source, float rangeMin,
+ float rangeMax);
+
+/* Color/Hue Threshold: calls imaqColorThreshold */
+int frcColorThreshold(Image* dest, const Image* source, ColorMode mode,
+ const Range* plane1Range, const Range* plane2Range,
+ const Range* plane3Range);
+int frcColorThreshold(Image* dest, const Image* source, int replaceValue,
+ ColorMode mode, const Range* plane1Range,
+ const Range* plane2Range, const Range* plane3Range);
+int frcHueThreshold(Image* dest, const Image* source, const Range* hueRange);
+int frcHueThreshold(Image* dest, const Image* source, const Range* hueRange,
+ int minSaturation);
+
+/* Extract ColorHue Plane: calls imaqExtractColorPlanes */
+int frcExtractColorPlanes(const Image* image, ColorMode mode, Image* plane1,
+ Image* plane2, Image* plane3);
+int frcExtractHuePlane(const Image* image, Image* huePlane);
+int frcExtractHuePlane(const Image* image, Image* huePlane, int minSaturation);