174 lines
7.9 KiB
C
174 lines
7.9 KiB
C
/*----------------------------------------------------------------------------*/
|
|
/* Copyright (c) FIRST 2014-2016. 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 the root directory of */
|
|
/* the project. */
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
#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);
|