Autor Beitrag
neb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18

winxp prof
delphi, pascal,php
BeitragVerfasst: Di 29.11.05 21:56 
Hallo,

Ich wollt fragen wie man es bewerkstelligen kann aus einer BMP bilddatei eine Figur zu erkennen.
desen figur man vvorher definiert hat.

zB. ich habe ein Bild und in dem bild soll ein kreis erkannt werden und dann sagen an welcher position der kreis steht.
die position wäre hier die pixel koorindaten...

also bin kein voll profi was delpi angeht also bitte langsam mit mir (:

danke schon im voraus...
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 29.11.05 22:03 
Was du willst, ist Bildverarbeitung. Das kann sehr kompliziert sein.

Meine Fragen dazu: Willst du einen ganz bestimmten Kreis erkennen (z.B. einen roten Kreis mit einem Radius von 100 Pixeln), oder willst du eine Kreisform allgemein erkennen? Ist der Kreis komplett drauf, ist der Kreis einfarbig (also wirklich dieselbe Farbe und nicht ungefähr gleich)? Ist außer dem Kreis noch was anderes auf dem Bild drauf?

Allgemein also: Hast du vorgefertigte kleine Bilder zu einem großen Bild zusammengefügt und möchtest die kleinen Bilder wiederfinden, oder hast du was komplizierteres vor?

_________________
We are, we were and will not be.
neb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18

winxp prof
delphi, pascal,php
BeitragVerfasst: Di 29.11.05 22:08 
also,

ich habe die bilder per webcam eingelesen... und habe auf meinem finger einen roten punkt kleben. (+-5 mm. durchmesser im real) und möchte dann die koorinaten für diesen roten punkt wiedergeben...

wollte ein program das die maus gewegt so wie sich der rote punkt am finger bewegt.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 29.11.05 22:29 
Ah...ok. Dann noch eine Frage.

Hast du schon Algorithmen zur Punkterkennung und liegt dein Problem nur an der Umsetzung in Delphi, oder hast du schon beim ersten Probleme? In diesem Fall: Vergiss es lieber vorerst (sorry, tut mir leid). Guck mal bei Wikipedia unter Mustererkennung oder Bildverarbeitung und klick dich von da aus ein wenig durch - dann verstehst du, was ich meine ;-)

Ansonsten: Erläuter uns das Verfahren, und wir helfen bei der Umsetzung in Delphi. Bei einer anschließenden Vermarktung des Systems kannst du dann ja ein paar Euro für die Entwickler-Ecke spenden ;-)

_________________
We are, we were and will not be.
neb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18

winxp prof
delphi, pascal,php
BeitragVerfasst: Di 29.11.05 23:32 
hm ok wäre mich mal durchschlagen und melde mich wieder wenn ich eine lösung gefunden habe...
doch könnte mann es nicht sogestallt dass delphi einfahc nuer ein haufen roter pixel findet und dann die pixelnummer wiedergibt?
hibbert
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mi 30.11.05 00:02 
hi, mach es doch einfach so:
wenn dein Programm startet, muss dieser rote punkt an einer bestimmten stelle sein.
Dann liest du einfach den Farbwert aus, denn der rote Punkt wird nicht überall dier gleiche Farbe haben und danach fragst du einfach immer wieder auf dem Bild ab, wo sich gerade dieser farbwert befindet +/- 3 - 5 Pixel.

hibbert

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
neb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18

winxp prof
delphi, pascal,php
BeitragVerfasst: Mi 30.11.05 00:09 
hm ja gar keine so schlecht idee... danke für deinen tip...
doch also delphi "einsteiger" habe ich jetzt keine ahnung wie das machen soll...

-farbe auslesen
-bei einer bitmap pixelvergleich
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Mi 30.11.05 10:08 
Hibbet: Hast du schon mal ne Webcam gesehen? Denke nicht, dass da +/- 3-5 aureichen werden. Ich denke mal eher, dass die Farben in einem Bereich von 100, wenn nicht sogar noch mehr schwanken werden. Also meine ältere Webcam hat sobald es ein wenig dunkler wird ein unglaubliches Farbrauschen dabei. Und soforn sie keine 200€ gekostet hast wird das überall so sein. Dann genügt auch schon alleine ein wenig mehr Schatten um die Farben komplett zu ändern.

neb: Ich weiß auch nicht ob Rot da so eine gute Wahl ist. Kann es wie gesagt nur von meiner alten sprechen aber sobald es ein wenig schumerig wird ist deren Bild auch immer recht rötlich. Was einen Algorithmus ziemlich auß dem Tritt bringen kann.

Ich muss Gausi dort aber auch recht geben. Wenn du bisher noch nicht wirklich etwas mit Bildverarbeitung/erkennung gemacht hast solltest du dort wohl besser die Finger von lassen. Im speziellen hast du ja auch geschrieben, dass du nicht mal ne Ahnung hast wie du die Pixel ausließt. Von daher würde ich dir empfehlen, dass du dich erst einmal mit Delphi allgemein beschäftigst und ein bisschen mit Bildmanipulationen etc. Wenn du das dann kannst wäre es der Zeitpunkt an dem du dich wieder mit dem Projekt beschäftigen kannst. Sonst sieht es aus meiner Sicht ehrlich ganz düster aus.

Abgesehen davon. Wie hoch ist eigentlich die Auflösung von deiner Webcam 320x240? Viel ausrichten kannst du mit solch einer Auflösung wohl sowieso nicht. Und sollte es höher sein musst du es schon wahnsinnig optimieren, damit es sinnvoll funktionieten würde.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
neb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18

winxp prof
delphi, pascal,php
BeitragVerfasst: Mi 30.11.05 17:49 
hm ok also meine webcam hat die normale standart grösse der webcams also 320x240
also dass das bild bei wenig licht rötlich wird kann ich bestättigen...
einen grünen punkt würde ich vorschlagen. da dies ja die "gegen"farbe von rot ist...

hm also ganz vergessen kann ich es nicht da es ein schulprojekt ist...

doch vielleicht kann ich das thema umändern lassen (:

danke trotzdem für die antworten...
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 30.11.05 18:08 
DAS ist ein SCHULprojekt? :shock: Frag mal bitte den Lehrer, ob er weiß, was er da verlangt bzw. mit wie starken Einschränkungen das am Ende funktionieren soll.

Oder bist du auf einer Eliteschule für Hochbegabte?

_________________
We are, we were and will not be.
neb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18

winxp prof
delphi, pascal,php
BeitragVerfasst: Mi 30.11.05 18:18 
also er sagt mir am anfang des es schwierig sei . doch nicht unmöglich...

ich solle legendlich mit meinem finger den mauszeiger bewegen können...
soll nicht ganz genau funktionieren...also nicht so exakt...

hm hochbegabt.. hm neinen glaub ich nicht (:
bin aus einer T1IF ... hm weis jetzt nicht genau wie man das in deutsch formuliert...
11 Schuljahr Techniker in Informatik... die französich können 11ième technicien en informatique :)
hibbert
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mi 30.11.05 21:38 
user profile iconLossy eX hat folgendes geschrieben:
Hibbet: Hast du schon mal ne Webcam gesehen? Denke nicht, dass da +/- 3-5 aureichen werden. Ich denke mal eher, dass die Farben in einem Bereich von 100, wenn nicht sogar noch mehr schwanken werden.

ich meinte ja auch nicht den Farbwert, sondern den Bereich um einen Punkt. Vielelicht wird ja zufällig die Farbe des Pixels [100,100] im Farbbereich der roten Farbe liegen. Deswegen sollte man noch ein paar Pixel ausßenrum vergleichen.

Ich weiß wie sowas aussieht, ich selbst habe schon so was wie Eye-Toy Programmiert...

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
neb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18

winxp prof
delphi, pascal,php
BeitragVerfasst: Mi 30.11.05 21:42 
@hibbert
gibt es da ein download... also wo man dein programm anschauen kann? würde mich interessieren...
hibbert
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1007

WinServer2003, Win XP, Linux
D6 Pers, D05
BeitragVerfasst: Mi 30.11.05 22:38 
mhh ich bin mit der "Demo" noch nicht ganz fertig. Hatte in letzter Zeit recht viele Klausuren, jetzt werde ich bestimmt wieder zeit dafür finden. Wenns fertig ist, stell ich die Demo hier im Forum vor...

_________________
I kunnen väl svara endast ja eller nej
Om i viljen eller nej
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Do 01.12.05 00:11 
Du meinst mit 'roter Kreis' bestimmt 'roter Fleck der kreisförmig ist, aber nicht sein muss'. Das kann man sehr sehr einfach implementieren.
Für jeden(!) Punkt des Bildes bildest Du die Summe der "roten" (machen wir zum Schluss) Pixel, die sich im Umkreis von -sagen wir- 5 pixeln befinden.
Klar ist, das Du eine Matrix erhälst, die nur "in der Nähe des roten Kreises" Werte > 0 haben werden.

Das machst Du nochmal, aber diesmal ist das Kriterium nicht 'rot', sondern du bildest für jeden Pixel die SUMME aller Nachbarn (sagen wir, wieder im Umkreis von 5 pixeln). Dann hast du irgendwo ein Pixel, das den höchsten Wert hat. DAS ist der Mittelpunktt des Fingers und damit der Mauszeiger.

Ob das nun 5 oder 10 Pixel sind, musst Du noch rauskriegen. Und ob man das Summieren einige Male wiederholem muss, auch. Aber das ist gerade das Spannende am Entwickeln von Algorithmen: Du kommst an einen Punkt, wo Du experimentieren, probieren, verwerfen, diskutieren und von Vorne anfangen musst.

Eins garantiere ich dir: mit o.g. Verfahren klappt es (sofern ihr keine Miro-Bilder an der Wand habt). Du wirst es schaffen!

(machen wir zum Schluss): Was ist ein roter Pixel? Das ist ein Pixel, des Farbwert sich nur unwesentlich von der Farbe 'rot' unterscheidet. Hier wird es wieder kniffelig, aber simpel, wenn man eines weiss: Farben können als Mischung von Rot, Gelb und Grün (oder Cyan, Magenta, Gelb und Schwarz) aufgefasst werden. Damit kann man sehr hübsche farbige Bilder drucken. Oder eben als drei Zahlem die die Farbe, die Helligkeit und die Sättigung beschreiben (HSL-Modell). Googel mal danach.
Aber DAMIT kann man sogar die 'Differenz' zweier Farben als ein Wert (0..1) darstellen. Das ist doch was: Dann ist ein Pixel rot, wenn sein abstand zum reinen Rot weniger als (z.b. 0.1) beträgt!

Es geht wirklich und ist nicht schwer, glaub mir! Wenn Ihr das programmiert habt, seit Ihr geadelt!

_________________
Na denn, dann. Bis dann, denn.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Do 01.12.05 00:59 
Ich hab da ein Tutorial für dich:
www-user.tu-chemnitz...utorial/tutorial.pdf

Es basiert auf der Kantenerkennung nach Sobel.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Do 01.12.05 09:48 
user profile iconhibbert hat folgendes geschrieben:
ich meinte ja auch nicht den Farbwert, sondern den Bereich um einen Punkt. Vielelicht wird ja zufällig die Farbe des Pixels [100,100] im Farbbereich der roten Farbe liegen. Deswegen sollte man noch ein paar Pixel ausßenrum vergleichen.

Ah. Hab dann wohl was missverstanden. :roll:

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
neb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18

winxp prof
delphi, pascal,php
BeitragVerfasst: Do 01.12.05 22:13 
hm erstmal danke für das tutorial GTA-Place...
hm also probier das mal aus...
also es ist nur ein roter fleck... oder jetzt ein grüner fleck für einen höheren kontrast...

doch hat hier jemand ne ahnung wie man den maus zeiger bewegen kann? (nicht mit der maus (: )
sondern mit delphi befehlen...
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Do 01.12.05 22:25 
setCursorPos(x,y); kannst du ihn auf eine feste Position legen. Für deinen Zweck wirst du den Cursor vermutlich relativ zur aktuellen Position bewegen: mit getCursorPos(p: TPoint) kannst du die position abfragen

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Fr 02.12.05 20:53 
Ich habe heute folgendes Bild mit meiner Webcam aufgenommen:

Kein Link mehr verfügbar

Es ist für den Computer fast unmöglich den roten Punkt zu finden (für den Menschen eine Leichtigkeit). Wir müssen uns also überlegen, wie wir den Punkt besser sichtbar machen.

Es gibt nicht nur den RGB-Farbraum, sondern auch den HSV-Farbraum. Was dieser genau ist, lässt sich im obigen Tutorial nachlesen. Zum Test, was HSV uns bringt, hab ich nun das Webcam-Bild von RGB nach HSV umgewandelt wobei ich nur den Hue-Wert genommen habe (RGB(Hue, Hue, Hue);). Das Ergebnis:

Kein Link mehr verfügbar

Unglaublich das Ergebnis. Für den Computer fast kein Problem mehr den Punkt zu finden. Wenden wir nun noch die Kantenerkennung an, bekommen wir folgendes:

Kein Link mehr verfügbar

Eine weitere Möglichkeit wäre, wenn wir das Bild von vorher benutzen ('Danach.jpg') und alles was einen bestimmten Wert überschreitet weiß und den Rest schwarz machen. Wir bekommen als Ergebnis:

Kein Link mehr verfügbar

Und nun ist es wirklich kein Problem mehr den Punkt zu erkennen, denn alles was schwarz ist, ist der Punkt.

Damit die meisten Erfolge bei einer Cam erzielt werden, ist es am besten einen hellen Punkt, also einen weißen zu verwenden. Je dunkler der Punkt, desto schlechter wird das Ergebnis.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)


Zuletzt bearbeitet von GTA-Place am Mi 06.03.13 14:45, insgesamt 2-mal bearbeitet