2D-Grafik Einfachster Ansatz, um sich wiederholende Figur in einem 2D-Image zu erkennen

abc66

Top Contributor
UseCase: Location (x,y,w,h...) des Schachbrettmusters (8*8 Schachfelder) in einem Bildschirmfoto erkennen.

Possible Approaches: Perceptual hashing, Patch correlation analysis, SIFT- oder RANSAC Algorithmus oder ?

Habt ihr (andere) Ideen dazu?
 

abc66

Top Contributor
Naiver Ansatz:
Java:
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;

public class App {
    static Loc getLoc(BufferedImage b) {
        for (int i = 0; i < b.getHeight(); i++) {
            for (int j = 0; j < b.getWidth(); j++) {
                Loc l = getLoc(b, j, i);
                if (l != null) {
                    return l;
                }
            }
        }
        return null;
    }

    static Loc getLoc(BufferedImage b, int x, int y) {
        if (x + 20 * 8 >= b.getWidth() || y + 20 * 8 >= b.getHeight())
            return null;

        int i = 1;
        int rgb = b.getRGB(x + 2, y + 2);
        while (    x + i + 2 < b.getWidth()
                && y + i + 2 < b.getHeight()
                && rgb == b.getRGB(x + i + 2, y + 2)
                && rgb == b.getRGB(x + 2, y + i + 2)) {
            i++;
        }
        i += 2;

        if (i < 20 || i > 150)
            return null;

        if (x + i * 8 >= b.getWidth() || y + i * 8 >= b.getHeight())
            return null;

        Loc l = getLoc(b, x, y, i);
        if (l != null) {
            return l;
        }

        return null;
    }

    static Loc getLoc(BufferedImage b, int x, int y, int len) {
        int rgb1 = b.getRGB(getX(x, len, 0), getY(y, len, 0));
        int rgb2 = b.getRGB(getX(x, len, 1), getY(y, len, 0));
        if (rgb1 == rgb2) {
            return null;
        }

        int failure = 0;
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                int xa = getX(x, len, j);
                int ya = getY(y, len, i);
                int rgb = i % 2 == 0 ? (j % 2 == 0 ? rgb1 : rgb2) : (j % 2 == 0 ? rgb2 : rgb1);
                for (int k = 0; k < len - 2; k++) {
                    if (rgb != b.getRGB(xa + k, ya) || rgb != b.getRGB(xa, ya + k)) {
                        failure++;
                        if (failure > 4) {
                            return null;
                        }
                        break;
                    }
                }
            }
        }

        Loc l = new Loc();
        l.r = new Rectangle(x, y, len, len);
        return l;
    }

    static int getX(int x, int len, int i) {
        return x + (len) * i + 2;
    }

    static int getY(int y, int len, int j) {
        return y + (len) * j + 2;
    }

    public static void main(String[] args) throws AWTException, InterruptedException {
        Thread.sleep(5000);
        Robot r = new Robot();
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        Rectangle rec = new Rectangle(d);
        BufferedImage b = r.createScreenCapture(rec);
        Loc l = getLoc(b);
       
    }
}

class Loc {
    Rectangle r;

    @Override
    public String toString() {
        return String.format("Loc [r=%s]", r);
    }
}

Laufzeit n²*² und nicht sehr robust!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J einfachster Servlet-Aufruf klappt nicht Allgemeine Java-Themen 3
N chess ansatz Allgemeine Java-Themen 12
M ORM scheitert gefühlt im Ansatz Allgemeine Java-Themen 27
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
MoxxiManagarm Ich brauche einen smarten Ansatz Allgemeine Java-Themen 23
P BruteForce Ansatz implementieren Allgemeine Java-Themen 32
S Erste Schritte Fehlender Gedanken-Ansatz bei Interpretation von Daten Allgemeine Java-Themen 1
N Ansatz Simulation Javascript Allgemeine Java-Themen 2
J Drei Bedingungen -> 9 Fällen, welcher Ansatz besser Allgemeine Java-Themen 4
A Ansatz Objektorientierung, Methoden Vererbung Allgemeine Java-Themen 2
P Ansatz?: EncoderWrapper Klasse bauen? Allgemeine Java-Themen 5
R Objektorientierter Ansatz fehlt Allgemeine Java-Themen 11
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
A Eclipse hängt sich auf Allgemeine Java-Themen 7
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
Viper13125 Eclipse Hängt sich auf, wenn ich SimpelDateFormat drin lasse Allgemeine Java-Themen 2
L Java überprüfen lassen, ob sich ein gegebener Pfad / das Programm an sich auf einer CD oder Festplatte befindet Allgemeine Java-Themen 14
Tiago1234 Warum hängt sich mein Programm auf? Allgemeine Java-Themen 22
C Parsen einer sich updatenden Html mithilfe von jsoup Allgemeine Java-Themen 4
Kiki01 Häufigster Buchstabe lässt sich nicht ermitteln Allgemeine Java-Themen 30
Tobero Wie berechnet man ob zwei Linien sich schneiden? Allgemeine Java-Themen 2
T Projekt baut nicht mehr/lässt sich nicht mehr ausführen Allgemeine Java-Themen 6
Tobero Wie bekomme ich in welchem Quadrat sich eine Position in einem Grid befindet Allgemeine Java-Themen 11
O Jar lässt sich auf bestimmten Pc nicht starten Allgemeine Java-Themen 18
D Anfänger versucht sich an Xtext Allgemeine Java-Themen 0
F Sich automatisch aufrufende Java-Methoden Allgemeine Java-Themen 2
kodela Inhalt eines Arrays ändert sich mysteriös Allgemeine Java-Themen 2
P JavaFX Anwendung beendet sich selbst nur als Jar Allgemeine Java-Themen 40
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
M String lässt sich nicht Zusammenfügen Allgemeine Java-Themen 10
I Lohnt sich heutzutage der Aufwand einer Portierung für MacOS Allgemeine Java-Themen 8
G Jar lässt sich mit macOS nicht starten Allgemeine Java-Themen 9
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
L Excel Datei löscht sich selbst im Programm - Java Allgemeine Java-Themen 3
K OOP Daten addieren sich bei GUI-Eingabe Allgemeine Java-Themen 10
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
N Quicksort Programm hängt sich auf Allgemeine Java-Themen 6
S Compiler-Fehler Programm verhält sich in Eclipse anders Allgemeine Java-Themen 1
G Beendet sich der Thread selbst?! Allgemeine Java-Themen 3
S Compiler-Fehler IntelliJ Projektdatei lässt sich nicht erstellen. Allgemeine Java-Themen 15
J Bilder lassen sich nicht importieren Allgemeine Java-Themen 3
E GUI.jfm lässt sich nicht mehr öffnen Allgemeine Java-Themen 1
H Kennt sich jemand mit Eclipse und dem Thema Jar-File aus ? Allgemeine Java-Themen 6
S Programm hängt sich manchmal (selten) auf Allgemeine Java-Themen 9
D System.arraycopy verhält sich seltsam Allgemeine Java-Themen 1
C Threads Methode verhält sich merkwürdig Allgemeine Java-Themen 18
D Best Practice Gesamten Bildschirminhalt auslesen und Email schicken sobald kein Pixel sich ändert Allgemeine Java-Themen 11
K jar-Datei lässt sich unter Windows nicht verwenden Allgemeine Java-Themen 3
X Sich wiederholende substrings finden Allgemeine Java-Themen 6
P Input/Output Inputstream verhält sich verschieden Allgemeine Java-Themen 9
T Minimax/Alphabeta Algorithmus hängt sich auf (?) Allgemeine Java-Themen 2
Tausendsassa Threads Einen Thread sich selbst schließen lassen Allgemeine Java-Themen 17
K Java installiert sich nicht ganz Allgemeine Java-Themen 15
E Anwendung verhält sich unter Mac anders als Unter Windows. Allgemeine Java-Themen 4
L Jar lässt sich nicht öffnen Allgemeine Java-Themen 12
T BufferedImage verändert sich beim Einlsesen Allgemeine Java-Themen 1
Z Eclipse hängt sich alle paar Sekunden auf (Keine Rückmeldung). Allgemeine Java-Themen 4
L Liste führt sich nicht weiter Allgemeine Java-Themen 5
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
F Wert ändert sich nicht Allgemeine Java-Themen 12
T Nach Java Update: Jar Datein öffnen sich nicht mehr mit doppelklick Allgemeine Java-Themen 3
M Programm startet sich selbst neu, alte Logfiles bleiben gesperrt Allgemeine Java-Themen 2
J String Variable verändert sich plötzlich Allgemeine Java-Themen 8
K Java lässt sich nicht Installieren Windows7Ultimate 64Bit Allgemeine Java-Themen 1
F JTable mit Zellen die sich durch andere Eingaben füllen Allgemeine Java-Themen 1
E Liste löscht sich selbstständig Allgemeine Java-Themen 5
I JPanel soll sich dem JFrame anpassen Allgemeine Java-Themen 1
ruutaiokwu datenstruktur welche sich "im kreis" dreht Allgemeine Java-Themen 26
D swingset3.jnlp lässt sich nicht ausführen Allgemeine Java-Themen 2
L Prog läuft in der IDE, hängt sich aber am Mac auf Allgemeine Java-Themen 0
F Spiel lässt sich nicht aus GUI starten Allgemeine Java-Themen 5
B Threads halten sich irgendwie auf... Allgemeine Java-Themen 6
G Services verwenden sich gegenseitig Allgemeine Java-Themen 4
A Auswahl eines JEditorPane das Sich in einem JScrollPanel Befindet Allgemeine Java-Themen 2
J kann eine .jar sich selbst verschieben? Allgemeine Java-Themen 6
M Erkennen, in welcher Methode sich die VM befindet Allgemeine Java-Themen 6
Rudolf In wie fern lohnt sich C++ für einen Javaentwickler Allgemeine Java-Themen 70
A Selbsterstellte 404-Seiten bestimmen, die sich als 200 ausgeben Allgemeine Java-Themen 8
D Arrays überschreiben sich Allgemeine Java-Themen 2
G .jar Dateien lassen sich nicht mehr öffnen Allgemeine Java-Themen 2
D Dialog soll sich beim Klick auf Button schließen Allgemeine Java-Themen 8
pg1337 hashCode() verändert sich Allgemeine Java-Themen 15
N Java lässt sich nicht löschen! Allgemeine Java-Themen 7
Jats Programm mit CMD Befehl hängt sich auf oder gibt error = 5 aus Allgemeine Java-Themen 4
C Prüfen ob sich ein Punkt innerhalb einer Kugel befindet (Java3D,nicht-lineare GLS) Allgemeine Java-Themen 5
D Java Excel API - Schreiben in Excel lässt sich nicht über Makro starten Allgemeine Java-Themen 18
P jar-Datei lässt sich nicht ausführen Allgemeine Java-Themen 5
E nach dem Ordner suchen, wo .jar datei sich befindet Allgemeine Java-Themen 17
J Java programm lässt sich in win7 nach linux install nicht mehr ausführen Allgemeine Java-Themen 18
D JMF - lässt sich nicht im ausgewählten Format aufnehmen Allgemeine Java-Themen 2
ruutaiokwu enlosschleife in thread beendet sich Allgemeine Java-Themen 3
F Javainstallation verweigert sich mir Allgemeine Java-Themen 11
M Java lässt sich nicht installieren Allgemeine Java-Themen 10
T Programm hängt sich auf Allgemeine Java-Themen 14
B Berechnung eines sinh abbrechen, wenn 16. Nachkommastelle sich nicht mehr ändert Allgemeine Java-Themen 7
V JRE lässt sich nicht installieren. Allgemeine Java-Themen 10
W 2D-Grafik nach getthumbnail läst sich Quellbild nicht mehr löschen Allgemeine Java-Themen 3
J Eclipse Eclipse hängt sich ständig auf Allgemeine Java-Themen 6
L JDK lässt sich nicht deinstallieren Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben