# Bilderkennung/Mustererkennung



## pietpaga (5. Aug 2015)

Hallo zusammen,

ich habe folgendes Problem: Ich möchte auf einem Bild Farben und Muster erkennen und diese mit Bildern aus einer Datenbank abgleichen. Die Bilder mit den gleichen oder ähnlichen Farben und Mustern sollen anschließend ausgegeben werden. 
Hat irgendjemand Ahnung in dem Bereich und kann Tips geben? Gibt es vielleicht schon ein erprobtes Framework, das man modifizieren könnte? 

Ich wäre Euch für jeden Hinweis dankbar!!

Grüße
Henrik


----------



## Thallius (5. Aug 2015)

Da wirst Du um openCV wohl nicht drum herum kommen. Aber das ist wirklich komplex. 

Viel Spaß dabei 

Gruß

Claus


----------



## pietpaga (7. Aug 2015)

Vielen Dank für Deine Antwort @Thallius! Hast du eine konkrete Idee?


----------



## Thallius (7. Aug 2015)

Ja, Buch kaufen und lernen 

Gruß

Claus


----------



## RalleYTN (12. Aug 2015)

Du kannst ja die Bilder, die du vergleichen willst in BufferedImage Objekte laden und dann jeden Pixel vergleichen.
Wenn zwei Pixel gleich sind, dann kann man einen Wert z.B. "Treffer" immer um einen erhöhen und das Bild mit den meisten Treffern ist dann das zum Ausgangsbild ähnlichste.

Hier mal ein Beispiel:

```
int treffer1 = 0;
int treffer2 = 0;
BufferedImage bild = ImageIO.load(new File("bild.jpg"));
BufferedImage bildVergleich1 = ImageIO.read(new File("bild2.jpg"));
BufferedImage bildVergleich2 = ImageIO.read(new File("bild3.jpg"));
int breiteAllerBilder = 100;
int höheAllerBilder = 100;

for(int x = 0; x < breiteAllerBilder; x++) {
    for(int y = 0; y < höheAllerBilder; y++) {
          Color farbeBild = new Color(bild.getRGB(x, y));
          Color farbeBildVergleich1 = new Color(bildVergleich1.getRGB(x, y));
          Color farbeBildVergleich2 = new Color(bildVergleich2.getRGB(x, y));

          if(farbeBild.getRed() == farbeBidVergleich1.getRed() &&
             farbeBild.getGreen() == farbeBildVergleich1.getGreen() &&
             farbeBild.getBlue() == farbeBildVergleich1.getBlue() &&
             farbeBild.getAlpha() == farbeBildVergleich1.getAlpha()) {

                treffer1++;
          }
          
          if(farbeBild.getRed() == farbeBidVergleich2.getRed() &&
             farbeBild.getGreen() == farbeBildVergleich2.getGreen() &&
             farbeBild.getBlue() == farbeBildVergleich2.getBlue() &&
             farbeBild.getAlpha() == farbeBildVergleich2.getAlpha()) {

                treffer1++;
          }
    }
}
```

Das ist kein fertiger Code und ich habe ihn auch gerade nur nach dem Q&D Verfahren geschrieben. Ich gebe keine Garantie, dass es funktionieren wird, aber ich kann dir sagen, dass dieser Algorithmus nicht auf die Erkennung von Mustern, sondern der Erkennung von Farben lisiert ist.
Ich hoffe ich konnte trotzdem helfen


----------

