Laser Sensing Display for UI interfaces in the real world
Fork of skinGames_forktest by
Diff: classLaserSensingTrajectory.h
- Revision:
- 32:52273c3291fe
- Parent:
- 30:d8af03f01cd4
- Child:
- 33:43e8bc451ef0
--- a/classLaserSensingTrajectory.h Sun Sep 23 10:11:43 2012 +0000 +++ b/classLaserSensingTrajectory.h Mon Oct 29 14:28:47 2012 +0000 @@ -1,53 +1,63 @@ -#ifndef LSDTRAJECTORY_H -#define LSDTRAJECTORY_H - -#include <vector> -using namespace std; - -// CONTRAST RATIO to compute autoThreshold: -#define MIN_CONTRAST_RATIO 1.7 // 3 seems good when lookup table does not work // This is the minimum contrast between max and min intensity necessary to "accept" a black and white zone -#define THRESHOLD_FACTOR 0.5 //0.75 // 2/3 or 1/2 are good values - -struct laserSensingPoint { - // Position and color (after rendering) - unsigned short x, y; // position of the point (after rendering - its integer, because it is in "laser projector pixels") - // char color; // per point laser color (not used yet) - // Detection: - unsigned char intensity; // detected intensity (in fact, this will be the REFLECTIVITY RATIO if using LUT table, and it's between 0 and 1, but we will multiply by 255 to avoid using a float. - signed char lightZone; // the thresholded light zone (allow for negative values for simply computing "negative" forces - although this is not necessarily the best option) -}; - - -class LaserSensingTrajectory { - -public: - - LaserSensingTrajectory(); - ~LaserSensingTrajectory(); - - // METHODS: - void processSensedData(); - void setDelayMirrors(int); // in general, the delay will depend on the number of points being DISPLAYED (in other terms, on the size of lsdTrajectory). - void addDelayMirrors(int add_delay); - - // DATA: - vector <laserSensingPoint> lsdTrajectory; - unsigned char displayColor; // per blob color - - // software adjustement of mirror delay: - unsigned char delayMirrorSamples; // this is required because it will affect the way the blob behaves - it - //could be in the laser renderer, but by putting it here we can have more per-blob fine tunning - - // parameters for thresholding: - unsigned char autoThreshold; // 0 to 255 - - // Statistics and tests: - //float lightRatio; - unsigned char maxI, minI; // Max and Min intensity RATIOS (normalized between 0 and 255) - bool lightTouched; // true if something went over the autoThreshold for the whole loop - // char coko; -}; - -#endif - - +#ifndef LSDTRAJECTORY_H +#define LSDTRAJECTORY_H + +#include <vector> +using namespace std; + +// CONTRAST RATIO to compute autoThreshold: +// MIN_CONTRAST_RATIO is the minimum contrast between max and min intensity necessary to "accept" a black and white zone: +#define MIN_CONTRAST_RATIO 1.8//1.7 // 3 seems good when lookup table does not work +// THRESHOLD_FACTOR is where the threshold is actually placed between the min and max detected (with good contrast): +#define THRESHOLD_FACTOR 0.5 //0.75 // 2/3 or 1/2 are good values +#define MIN_ACCEPTABLE_INTENSITY 16 // if maxI< this then we consider all the saccade on something black + +struct laserSensingPoint { + // Position and color (after rendering) + unsigned short x, y; // position of the point (after rendering - its integer, because it is in "laser projector pixels") + // char color; // per point laser color (not used yet) + // Detection: + unsigned char intensity; // detected intensity (in fact, this will be the REFLECTIVITY RATIO if using LUT table, and it's between 0 and 1, but we will multiply by 255 to avoid using a float. + signed char lightZone; // the thresholded light zone (allow for negative values for simply computing "negative" forces - although this is not necessarily the best option) +}; + + +class LaserSensingTrajectory { + +public: + + LaserSensingTrajectory(); + ~LaserSensingTrajectory(); + + // METHODS: + void processSensedData(); + void setDelayMirrors(int); // in general, the delay will depend on the number of points being DISPLAYED (in other terms, on the size of lsdTrajectory). + void addDelayMirrors(int add_delay); + + void setMinContrastRatio(float value) {min_contrast_ratio=value;}; + void setThresholdFactor(float value) {threshold_factor=value;}; + void setMinAcceptableIntensity(float value) {min_acceptable_intensity=value;}; + void multMinContrastRatio(float multfactor) {min_contrast_ratio*=multfactor;}; + void multThresholdFactor(float multfactor) {threshold_factor*=multfactor;}; + + // DATA: + vector <laserSensingPoint> lsdTrajectory; + unsigned char displayColor; // per blob color + + // software adjustement of mirror delay: + unsigned char delayMirrorSamples; // this is required because it will affect the way the blob behaves - it + //could be in the laser renderer, but by putting it here we can have more per-blob fine tunning + + // parameters for thresholding: + float min_contrast_ratio, threshold_factor, min_acceptable_intensity; + unsigned char autoThreshold; // 0 to 255 + + // Statistics and tests: + //float lightRatio; + unsigned char maxI, minI; // Max and Min intensity RATIOS (normalized between 0 and 255) + bool lightTouched; // true if something went over the autoThreshold for the whole loop + // char coko; +}; + +#endif + +