| /*----------------------------------------------------------------------------*/ |
| /* 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); |