Benutzer-Werkzeuge

Webseiten-Werkzeuge


projektews2013:lagemaro:start:bildana

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
projektews2013:lagemaro:start:bildana [2014/03/07 19:16]
philippkueckes angelegt
projektews2013:lagemaro:start:bildana [2016/01/21 12:45] (aktuell)
Zeile 1: Zeile 1:
-<file C++ Robo_Läuft.ino>+<file C++ Bildanalysator.ino>
  
 +class colorSpot {
 +  float x; //ein "​member"​ von colorSpot
 +  float y;
 +  boolean qualitaet;
 +};
 +
 +class Bildanalysator {
 +
 +  float rotvergleichGelbeLED;​
 +  float gruenvergleichGelbeLED;​
 +  float blauvergleichGelbeLED;​
 +  float rotvergleichBlaueLED;​
 +  float gruenvergleichBlaueLED;​
 +  float blauvergleichBlaueLED;​
 +  float rotvergleichLaser;​
 +  float gruenvergleichLaser;​
 +  float blauvergleichLaser;​
 +  colorSpot laserposition;​
 +  colorSpot gruenposition;​
 +  colorSpot blauposition;​
 +  //Die Vergleichswerte für die LED werden durch Zeiger auf die LED führen und entsprechende Taste Drücken festgelegt
 +  void kalibriereFarben(PImage img) {
 +    println("​drücke auf die Taste g für gelb, b für blau oder r für rot");
 +    println("​drücke auf die Taste f um die Kalibrierung zu beenden"​);​
 +    if (keyPressed == true) {
 +      //wenn die Taste r gedrückt wird, werden die Farbwerte des Pixels auf den die Maus zeigt als Vergleichswerte für den Laser festgelegt
 +      if (key=='​r'​) {
 +        println("​klicke auf die rote LED / den Laserpunkt"​);​
 +        rotvergleichLaser = farbPunktFinder.gebeWerteAus(mouseX,​ mouseY, 0);
 +        gruenvergleichLaser = farbPunktFinder.gebeWerteAus(mouseX,​ mouseY, 1);
 +        blauvergleichLaser = farbPunktFinder.gebeWerteAus(mouseX,​ mouseY, 2);
 +      }
 +      //​Vergleichswerte für die gelbe/​grüne LED werden festgelegt
 +      if (key=='​g'​) {
 +        println("​klicke auf die gelbe LED");
 +        rotvergleichGelbeLED = farbPunktFinder.gebeWerteAus(mouseX,​ mouseY, 0);
 +        gruenvergleichGelbeLED = farbPunktFinder.gebeWerteAus(mouseX,​ mouseY, 1);
 +        blauvergleichGelbeLED = farbPunktFinder.gebeWerteAus(mouseX,​ mouseY, 2);
 +      }
 +      //​Vergleichswerte für die blaue LED werden festgelegt
 +      if (key=='​b'​) {
 +        println("​klicke auf die blaue LED"​); ​
 +        rotvergleichBlaueLED = farbPunktFinder.gebeWerteAus(mouseX,​ mouseY, 0);
 +        gruenvergleichBlaueLED = farbPunktFinder.gebeWerteAus(mouseX,​ mouseY, 1);
 +        blauvergleichBlaueLED = farbPunktFinder.gebeWerteAus(mouseX,​ mouseY, 2);
 +      }
 +      //Die Kalibrierung wird beendet
 +      if (key=='​f'​) {
 +        println("​die Kalibrierung ist abgeschlossen"​);​
 +        kalibrierung = true;
 +      }
 +    }
 +  }
 +  //Die Toleranz mit der der Pixel, der am nächsten an den Vergleichswerten ist, als LED/Laser erkannt wird, wird verändert
 +  void erhoeheToleranz() {
 +    toleranz++;
 +    println("​toleranz"​ + toleranz);
 +  }
 +  void senkeToleranz() {
 +    println("​toleranz"​ + toleranz);
 +    if (toleranz>​0) {
 +      toleranz=toleranz-1;​
 +    }
 +  }
 +  //Die LEDs und der Laser werden gesucht
 +  void findePunkte(PImage neuesBild) {
 +    if (auswahl==1) {
 +      laserposition = hsvfarbe(1, neuesBild);
 +      gruenposition =hsvfarbe(2,​ neuesBild);
 +      blauposition =hsvfarbe(3,​ neuesBild);
 +    }
 +    else {
 +      laserposition = farbausgabe(1,​ neuesBild);
 +      gruenposition =farbausgabe(2,​ neuesBild);
 +      blauposition =farbausgabe(3,​ neuesBild);
 +    }
 +  }
 +  //Die gefundenen LEDs/Laser werden durch farbige Kreise um diesen Punkt gekennzeichnet
 +  void zeichnePunkte() {
 +    noFill();
 +    if (gruenposition.qualitaet==true) {
 +      stroke(255, 255, 0);
 +      ellipse(gruenposition.x,​ gruenposition.y,​ 10, 10 );
 +    }
 +    if (blauposition.qualitaet==true) {
 +      stroke(0, 0, 255);
 +      ellipse(blauposition.x,​ blauposition.y,​ 10, 10 );
 +    }
 +    if (laserposition.qualitaet==true) {
 +      stroke(255, 0, 0);
 +      ellipse(laserposition.x,​ laserposition.y,​ 10, 10 );
 +    }
 +  }
 +  //die Vergleichswerte,​ die in dem übergebenen und den benachbarten Pixeln sind werden zurückgegeben
 +  float gebeWerteAus(int i, int u, int farbe) {
 +    float farbvergleich = 0;
 +    for (int o=-1; o<2; o++) {
 +      int a=img.get(i+o,​ u);
 +      float rot= a>>​16&​0xFF;​
 +      float gruen=a>>​8&​0xFF;​
 +      float blau=a&​0xFF;​
 +      if (farbe==0) {  ​
 +        farbvergleich= farbvergleich+(rot-wertschaetzer.umgebungsgruen);​
 +      }
 +      if (farbe==1) {
 +        farbvergleich= farbvergleich+(gruen-wertschaetzer.umgebungsgruen);​
 +      }
 +      if (farbe==2) {
 +        farbvergleich = farbvergleich+ (blau-wertschaetzer.umgebungsblau);​
 +      }
 +    }
 +    if (farbe==0) {  ​
 +      println("​rot "​+farbvergleich/​3);​
 +    }
 +    if (farbe==1) {
 +      println("​gruen "​+farbvergleich/​3);​
 +    }
 +    if (farbe==2) {
 +      println("​blau "​+farbvergleich/​3);​
 +    } 
 +    return (farbvergleich/​3);​
 +  }
 +  //Wenn das hsv-farbsystem ausgewählt wurde, werden mit dieser Funktion die LEDs erkannt (ohne Vergleich)
 +  colorSpot hsvfarbe(int farbe, PImage img) {
 +    colorSpot ergebnis=new colorSpot();​
 +    float wertmax=1;
 +    float farbwert=1;
 +    for (int u=0;​u<​img.height;​u++) {
 +
 +      for (int i=0;​i<​img.width;​i++) {
 +        int a=img.get(i,​ u);
 +        int rot= a>>​16&​0xFF;​
 +        int gruen=a>>​8&​0xFF;​
 +        int blau=a&​0xFF;​
 +        float[] hsbvals= new float[3] ;
 +        Color.RGBtoHSB (rot, gruen, blau, hsbvals);
 +        if (farbe==1) {
 +          if (hsbvals[0]>​0.5) {
 +            hsbvals[0] = 1-hsbvals[0];​
 +          }
 +          farbwert=sqrt(sq(0-hsbvals[0])+sq(1-hsbvals[1])/​2+sq(0.8-hsbvals[2])/​4);​
 +        }
 +        if (farbe==3) {
 +          farbwert=sqrt(sq(0.55-hsbvals[0])+sq(1-hsbvals[1])+sq(0.8-hsbvals[2])/​4);​
 +        }
 +        if (farbe==2) {
 +          farbwert=sqrt(sq(0.15-hsbvals[0])+sq(1-hsbvals[1])+sq(0.8-hsbvals[2])/​4);​
 +        }
 +        if (farbwert < wertmax) {
 +          wertmax = farbwert;
 +          ergebnis.x=i;​
 +          ergebnis.y=u;​
 +        }
 +      }
 +    }
 +    if (wertmax<​0.25) {
 +      ergebnis.qualitaet=true;​
 +    }
 +    else {
 +      ergebnis.qualitaet=false;​
 +    }
 +    return ergebnis;
 +  }
 +  //Wenn das rgb-farbsystem ausgewählt wurde, werden mit dieser Funktion die LEDs erkannt (mit Vergleich)
 +  colorSpot farbausgabe(int farbe, PImage img) {
 +    colorSpot ergebnis=new colorSpot();​
 +    float wertmax=300;​
 +    float farbwert=0;
 +    for (int u=0;​u<​img.height;​u++) {
 +
 +      for (int i=0;​i<​img.width;​i++) {
 +        int a=img.get(i,​ u);
 +        int rot= a>>​16&​0xFF;​
 +        int gruen=a>>​8&​0xFF;​
 +        int blau=a&​0xFF;​
 +        float rotrest=rot-wertschaetzer.umgebungsrot;​
 +        float gruenrest=gruen-wertschaetzer.umgebungsgruen;​
 +        float blaurest=blau-wertschaetzer.umgebungsblau;​
 +        if (farbe==1) {
 +          farbwert=sqrt(sq(rotvergleichLaser-rotrest)+sq(gruenvergleichLaser-gruenrest)+sq(blauvergleichLaser-blaurest));​
 +        }
 +        if (farbe==3) {
 +          farbwert=sqrt(sq(rotvergleichBlaueLED-rotrest)+sq(gruenvergleichBlaueLED-gruenrest)+sq(blauvergleichBlaueLED-blaurest))/​2;​
 +        }
 +        if (farbe==2) {
 +          farbwert=sqrt(sq(rotvergleichGelbeLED-rotrest)+sq(gruenvergleichGelbeLED-gruenrest)+sq(blauvergleichGelbeLED-blaurest))/​2;​
 +        }
 +        if (farbwert < wertmax) {
 +          wertmax = farbwert;
 +          ergebnis.x=i;​
 +          ergebnis.y=u;​
 +        }
 +      }
 +    }
 +    if (wertmax < toleranz) {
 +      ergebnis.qualitaet=true;​
 +    }
 +    else {
 +      ergebnis.qualitaet=false;​
 +    }
 +    return ergebnis;
 +  }
 +}
  
  
 </​file>​ </​file>​
projektews2013/lagemaro/start/bildana.1394216212.txt.gz · Zuletzt geändert: 2016/01/21 12:45 (Externe Bearbeitung)