Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Neuerer Beitrag  |  Älteres Thema 
 Objekterkennung
Autor: Walter Köhler (---.dip0.t-ipconnect.de)
Datum:   19.08.18 14:44

Profan 11
Hallo Freunde
Leider programmiere ich nur selten (halt nur dann wenn ich ein Projekt habe).
Dadurch vergesse ich sooo viel; echt nervig. Egal; hier mein Problem
Projektbeschreibung:
Sportbowling: Aufnahme des Balllauf von Foul-Linie bis Pins mit 120 FpS; ohne Problem gelöst (3 Sec. langsamer Ball, 1,5 Sec. schneller Ball)
Zerlegung des AVI in Einzelbilder; ohne Problem gelöst.
Ich habe jetzt also pro Ballabwurf im Schnitt 240 Einzelbilder hintereinander.
bisher lade ich diese Bilder nacheinander und hole mir die Koordinaten des Ball per Mausklick (%mousex,%mousey); klappt, ist aber nervig.
Anschließend übertrage ich diese Koordinaten aus den "logarithmischen" Bildkoordinaten, auf ein lineares Format, so das der Balllauf gut sichtbar wird.
Bis dahin ist alles gut. (sorry für die lange Einleitung)

Problem 1: Ich habe Bild1: Die Bahn OHNE Ball, alle folgenden Bilder mit Ball immer weiter bis zu den Pins.

Um eine Objekterkennung zu machen, möchte ich jetzt immer von jedem Bild Bild1(ohne Ball) abziehen, so das nur der Ball übrig bleibt.

Problem 2 folgt danach: Erkennung und Speicherung der x,y Koordinate des Ball in den Folgebildern.

Also erst mal Problem 1: Kann man in Profan eine PNG Datei im Speicher ablegen und dort Datei 2 differenzieren?
mit "opencv" geht das sehr fix, ich möchte aber nixht auf Java oder C umsteigen müssen. (Und Profan kann "opencv" ja leider nicht).

Im Forum habe ich nach 2 Stunden Suche nichts gefunden.

beste Grüße
Walter

Beitrag beantworten
 
 Re: Objekterkennung
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   19.08.18 17:39

Mach doch mal die Bilder in eine Imageliste und lade sie
direkt beim Programmstart. Etwa nach diesem Schema :

 Declare Handle ilist, hpic
 
 Window 800, 800 
 hpic = Create("hPic", -1, "DeinBild.png")
 ilist = Create("ImageList", 600, 600, hpic)
 ' bei mehreren Bildern das hpic bei Create("ImageList",...)
 ' weglassen und dann ImageList("Add",...) verwenden, wobei
 ' hpic mit Create in einer Schleife immer das nächste Bild lädt.
 DrawIcon ilist, 0, 10, 10
 
 Waitkey
 DeleteObject ilist, hpic
 


Den Ball würde ich als erstes extra in der ImageList speichern
und dann erst die Bahn bzw. Folgebilder.

In der Hilfe geht halt nicht eindeutig hervor, daß man in der
Imageliste neben Icons und Bitmaps auch andere Formate
speichern kann.

Durch den Index bei der Imageliste läßt sich dann jedes Bild
superschnell auf den Bildschirm zaubern. Dazu nimmt man dann
noch ein zweidimensionales Integer-Array, das mit den x und
y - Koordinaten mit der Imageliste korrespondiert.

PS: Da wäre auch das integrierte OPENGL einen Blick wert.
Lade dir mal das einfach OGLBasic hier im Forum und installiere
es. Roland hat da einen schönen Beispielcode mit den Planeten,
die sich umeinander drehen. Da könntest du einige Sachen abschauen,
um es selbst zu verwenden. Eine, sich drehende Erde kommt ja
schon ganz nahe an einen sich drehenden Ball heran. Nur halt, daß
sich dieser auf einer Bahn abrollt. Da müßte nur einiges abgeändert
werden und eine neue Tapete (Ball) auf die Kugel (Sphere) geklatscht
werden.
Wenn du es nicht findest, kann ich es dir ja auch per Mail schicken.

H.Brill
XProfan X4 + FreeProfan
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen
den unseren hinzufügen.

Was die Borg können, können wir schon lange !!!

Nachricht bearbeitet (19.08.18 19:04)

Beitrag beantworten
 
 Re: Objekterkennung
Autor: p. specht (---.aon.at)
Datum:   19.08.18 22:31

Man kann ein Bild ohne Weiteres von einem anderen subtrahieren.

https://www.paules-pc-forum.de/forum/thread/181010-algorithmen-teil-xiv-jetzt-noch-irrer/?postID=1150433#post1150433

und Folgebeitrag beschäftigen sich mit solchen Bild-Differenzen.
Gruss

____
Ein richtiges Problem hat keine Lösung, nur Näherungen!

Beitrag beantworten
 
 Re: Objekterkennung
Autor: Walter Köhler (134.147.38.---)
Datum:   20.08.18 11:54

Windowtitle "Fehlerbildvergleicher":Windowstyle 24:Window 0,0-%maxx,%maxy
DrawPic getenv$("USERPROFILE")+"\desktop\Eingang1.png", 0,0; 0
DrawPic getenv$("USERPROFILE")+"\desktop\Eingang0.png", 0,0; 3
waitinput

Keine Ahnung warum das funktioniert; aber als Ergebniss wird tatsächlich nur die Differenz von Eingang1 gezeigt.

Danke damit kann ich arbeiten (glaube ich zumindest)
Walter

Beitrag beantworten
 
 Re: Objekterkennung
Autor: p. specht (---.aon.at)
Datum:   20.08.18 22:49

Aus der Hilfe: Der 3. Parameter bewirkt hier die Differenzbildung

DrawPic
---------
Der Befehl DrawPic dient dazu, eine Bitmap in Originalgröße an eine bestimmte Stelle des Bildschirmes zu zeichnen. Je nach Herkunft der Bitmap kann der Befehl unterschiedliche Formen annehmen:

1. Variante DrawPic H, X, Y; N1[, N2]
H : LongInt - Handle der Bitmap
X,Y: Integer - Position, wo die Bitmap gezeichnet werden soll
N1 : Integer - Kopiermodus (-1 = transparent)
N2 : Longint - Transparente Farbe im Modus -1 (kann auch weggelassen werden)

Abbildungsmodus = Kopiermodus (N1 = 4. Parameter)
-1 - Transparenz (nicht bei ...SIZED...-Befehlen)
0 - normales Kopieren
1 - Quelle und Ziel mit UND verknüpft
2 - Quelle und Ziel mit ODER verknüpft
3 - Quelle und Ziel mit XOR verknüpft
4 - Zielbereich invertieren (Quellbereich wird nicht berücksichtigt)

Gruss

____
Ein richtiges Problem hat keine Lösung, nur Näherungen!

Beitrag beantworten
 
 Re: Objekterkennung Teil 1 gelöst
Autor: Walter Köhler (134.147.38.---)
Datum:   21.08.18 10:50

Hab´s kapiert. Ausbildung ist halt schon lange her;
"XOR" ist jetzt aber klar.
Funktioniert erstaunlich schnell! Bravo, scheint von Roland sehr sauber programmiert zu sein.
Kleines Problem besteht allerdings doch noch. Die XOR Methode ist selbstverständlich "value-genau".
Das gleiche Bild von einander abziehen ergibt ein leeres Bild; klappt also zu 100%.
Die einzelnen gleichen Bilder (Frames aus AVI-Film) haben aber kleine Unterschiede, wahrscheinlich durch die 50 Hertz in der Beleuchtung. Dadurch bleiben im Differenzbild Fragmente die nicht real sind übrig. Das erschwert eine Objekterkennung etwas; darüber muss ich noch nachdenken.
Als möglichkeit sehe ich erst einmal vor der Objekterkennung den RGB-Wert des Objekt zu holen, und diesen dann mit entsprechendem +-Bereich zu suchen.
Ob das geht muß ich probieren, die Bälle sind leider NICHT einfarbig.
Walter

Beitrag beantworten
 Foren-Liste  |  Baumstruktur   Neuerer Beitrag  |  Älteres Thema 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org