Geraden erkennnen? Problem konkretisiert!!!
Geraden erkennnen? Problem konkretisiert!!!
Hallo Leute,
gibt es Funktionen mit denen ich Linien in einem Bild erkennen kann? Die Linien sind weiß der Hintergrund ist schwarz, aber die Linien können sich kreuzen.
Gruß
Scarabol
gibt es Funktionen mit denen ich Linien in einem Bild erkennen kann? Die Linien sind weiß der Hintergrund ist schwarz, aber die Linien können sich kreuzen.
Gruß
Scarabol
Zuletzt geändert von Scarabol am 10.06.2007 17:11, insgesamt 1-mal geändert.
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
das ist schon sehr komplex aber ich denke man kann es schaffen, indem man einen punkt auf dem bildschirm betrachtet, wenn es jetzt ein schwarzer strich ist, ist der punkt natürlich auch scharz.... von dort kann man einen kreis ziehen der 1cm von der mitte (unser punkt) radiusabstand hat. die 360° geht man mit "for next" ab und guckt ob dort auf der linie auch ein schwarzer punkt ist, wenn JA haben wir ja 2 punkte
der eine punkt ist der mittelpunkt unseres kreises und der andere liegt auf dem kreis. wenn man dort eine gerade linie abfragt und es übereinstimmt kann man auch in der anderen richtung weiterabfragen und so gucken wie lang der strich geht. wenn du das ende erreicht hast bedenke, das in der anderen richtung der strich auch weiter gehen kann.
und schon hat er einen strich gefunden oder meist du das anders?
MFG!! TOMTOM
der eine punkt ist der mittelpunkt unseres kreises und der andere liegt auf dem kreis. wenn man dort eine gerade linie abfragt und es übereinstimmt kann man auch in der anderen richtung weiterabfragen und so gucken wie lang der strich geht. wenn du das ende erreicht hast bedenke, das in der anderen richtung der strich auch weiter gehen kann.
und schon hat er einen strich gefunden oder meist du das anders?
MFG!! TOMTOM
Pure Basic 4.0
Bildverstehen und Bilderkennung:
http://www.kreissl.info/diggs/bilderkennung.php
Open Source Computer Vision Library:
http://www.intel.com/technology/computi ... /index.htm
Und dann gibts da noch die iCamLib auf PureArea.
http://www.kreissl.info/diggs/bilderkennung.php
Open Source Computer Vision Library:
http://www.intel.com/technology/computi ... /index.htm
Und dann gibts da noch die iCamLib auf PureArea.
MfG Jake
-
- Beiträge: 752
- Registriert: 14.09.2004 21:39
- Kontaktdaten:
Kleiner Denkanstoß:
Wenn man eine Linie plotted, kann der nächsten Pixel eines Pixel in der Linie entweder links, rechts, oben, unten, links-oben, rechts-oben, links-unten oder rechts-unten sein...
Daraus schließen wir, dass bei einer einzelnen Linie entweder ein pixel (linienende oder linienanfang) um diesen bereich herum liegen kann, oder zwei (ein punkt genau in der mitte der linie). Stellen wir uns mal vor, wir haben einen schwarzen Bildschirm und 1 weiße Linie auf dem Screen. Dann gehen wir alle schwarzen Pixel durch und prüfen, ob einer von denen weiß ist -> die schleife wird abgebrochen und eine neue wird gestartet. Diese prüft die oben genannten Versionen von weißen Pixeln in einer Linie zueinander. Wenn zwei Pixel in der Umgebung vorhanden sind, dann ist es in Pixel zwischen dem Start-und dem Endpunkt und wir müssen einen der beiden Pixel zu unserem neuen zu prüfenden Pixel machen. Diesen prüfen wir nochmal und schließen beim Prüfen zusätzlich alle Pixel aus, die die Position des vorherigen Pixels innehatten... Das wird solange geprüft, bis keine umliegenden Pixel (außer dem vorherigen) vorhanden, denn dann wurde 1 Punkt der Linie erreicht. Da wir aber wahrscheinlich beim Suchen eines weißen Pixels auf dem gesamten Bildschirm zwei Pixel um den gefunden Prüfpixel hatten, müssen wir auch noch diesen zweiten ermittelten Pixel prüfen und die Schleife zieht sich sozusagen in die andere Richtung weiter... Wenn dann der zweite Punkt der Linie erreicht wurde, hast du das Ende der Linie.
Wenn das auf den Schnittpunkt zweier Linien ausgeweitet werden soll, musst das Programm erstmal wissen, wie so ein Schnittpunkt aussehen könnte, bzw. wie er diesen feststellt. Z.b. sind um den Prüfpixel mehr als 2 Pixel vorhanden. Aber das bedarf einer weiteren Denkrecherche.
Ich hoffe, dass könnte dir als Ansatz dienen. Du kommst aber kaum drum rum alle schwarzen Pixel abzufragen. Effektiv wäre es wohl auch vom gefundenen Schnittpunkt der beiden Linien aus die andere Linie zu rekonstruieren, ist auf jeden Fall sehr Alghorythmen-lastig.
Wenn man eine Linie plotted, kann der nächsten Pixel eines Pixel in der Linie entweder links, rechts, oben, unten, links-oben, rechts-oben, links-unten oder rechts-unten sein...
Daraus schließen wir, dass bei einer einzelnen Linie entweder ein pixel (linienende oder linienanfang) um diesen bereich herum liegen kann, oder zwei (ein punkt genau in der mitte der linie). Stellen wir uns mal vor, wir haben einen schwarzen Bildschirm und 1 weiße Linie auf dem Screen. Dann gehen wir alle schwarzen Pixel durch und prüfen, ob einer von denen weiß ist -> die schleife wird abgebrochen und eine neue wird gestartet. Diese prüft die oben genannten Versionen von weißen Pixeln in einer Linie zueinander. Wenn zwei Pixel in der Umgebung vorhanden sind, dann ist es in Pixel zwischen dem Start-und dem Endpunkt und wir müssen einen der beiden Pixel zu unserem neuen zu prüfenden Pixel machen. Diesen prüfen wir nochmal und schließen beim Prüfen zusätzlich alle Pixel aus, die die Position des vorherigen Pixels innehatten... Das wird solange geprüft, bis keine umliegenden Pixel (außer dem vorherigen) vorhanden, denn dann wurde 1 Punkt der Linie erreicht. Da wir aber wahrscheinlich beim Suchen eines weißen Pixels auf dem gesamten Bildschirm zwei Pixel um den gefunden Prüfpixel hatten, müssen wir auch noch diesen zweiten ermittelten Pixel prüfen und die Schleife zieht sich sozusagen in die andere Richtung weiter... Wenn dann der zweite Punkt der Linie erreicht wurde, hast du das Ende der Linie.
Wenn das auf den Schnittpunkt zweier Linien ausgeweitet werden soll, musst das Programm erstmal wissen, wie so ein Schnittpunkt aussehen könnte, bzw. wie er diesen feststellt. Z.b. sind um den Prüfpixel mehr als 2 Pixel vorhanden. Aber das bedarf einer weiteren Denkrecherche.
Ich hoffe, dass könnte dir als Ansatz dienen. Du kommst aber kaum drum rum alle schwarzen Pixel abzufragen. Effektiv wäre es wohl auch vom gefundenen Schnittpunkt der beiden Linien aus die andere Linie zu rekonstruieren, ist auf jeden Fall sehr Alghorythmen-lastig.
Hallo Leute,

Klingt einfach aber ich komm einfach nicht drauf, wie kann ich die beiden Linien unterscheiden?
Das Problem ist ja das die Geraden immer ein paar gerade Stücke haben und erst dann wieder kleine Sprünge kommen und ich weiß nicht wie ich dem PC erkläre, dass er genau diese Abfolge aus Sprüngen und Geraden als eine Gerade mit der Steigung x erkennt.
Gruß
Scarabol
[Edit]
Besseres Bild
evtl. Cache löschen
[/Edit]
Klingt einfach aber ich komm einfach nicht drauf, wie kann ich die beiden Linien unterscheiden?
Das Problem ist ja das die Geraden immer ein paar gerade Stücke haben und erst dann wieder kleine Sprünge kommen und ich weiß nicht wie ich dem PC erkläre, dass er genau diese Abfolge aus Sprüngen und Geraden als eine Gerade mit der Steigung x erkennt.
Gruß
Scarabol
[Edit]
Besseres Bild
evtl. Cache löschen
[/Edit]
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
Du könntest natürlich den kompletten (weißen) Screen nach (schwarzen) Punkten absuchen. Wenn Du einen Punkt gefunden ist davon auszugehen, dass der Punkt zu einer Linie gehört (es sei denn, da sind noch andere Sachen wie Kreise etc. im Bild).
Jetzt suchst Du den ersten Punkt der Linie (z.B. links oben) ab und beginnst von dort, deren Punkte in ein Array zu packen (aber nicht mit den Koordinaten der Punkte, sondern mit der relativen Position des Punktes zum vorher gefundenen Punkt).
In dem Fall brauchst Du lediglich die Arrays vergleichen, um Unterschiede zwischen den Punkten festzustellen. Zumindest würdest Du so einen Unterschied bei den beiden gezeigten Linien (?) feststellen.
Jetzt suchst Du den ersten Punkt der Linie (z.B. links oben) ab und beginnst von dort, deren Punkte in ein Array zu packen (aber nicht mit den Koordinaten der Punkte, sondern mit der relativen Position des Punktes zum vorher gefundenen Punkt).
In dem Fall brauchst Du lediglich die Arrays vergleichen, um Unterschiede zwischen den Punkten festzustellen. Zumindest würdest Du so einen Unterschied bei den beiden gezeigten Linien (?) feststellen.
Sorry aber meine letzte Frage war blöd gestellt ich meinte natürlich wie ich bezüglich der Geradenerkennung die beiden Linie unterscheiden kann.
Gruß
Scarabol
Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
Ok Leute muss zugeben hab nen Haufen unverstädnlicher Beiträge geschrieben in letzter Zeit, daher hier nochmal ein kleiner Neubeginn des Themas...
Der Grundgedanke ist klar das Programm such einen Punkt und sucht dann nach weiteren Punkten die links/rechts/oben/unten usw. von diesem Punkt liegen.
Mein Problem besteht darin das die pixeligen Linien teilweise wie in meiner Grafik rechts aus Pixeln bestehen, die wagerecht zusammenhängen aber auch diagonale Sprünge vorhanden sind.
Gruß
Scarabol
Der Grundgedanke ist klar das Programm such einen Punkt und sucht dann nach weiteren Punkten die links/rechts/oben/unten usw. von diesem Punkt liegen.
Mein Problem besteht darin das die pixeligen Linien teilweise wie in meiner Grafik rechts aus Pixeln bestehen, die wagerecht zusammenhängen aber auch diagonale Sprünge vorhanden sind.
Gruß
Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea
PB-V: 4
WinXP
- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
Ja, ist doch total simpel:
-> ersten Punkt suchen
-> oben,oben rechts,rechts,unten rechts, unten, unten links nachschauen, wo der nächste Punkt liegt.
-> Wenn 2 Linien sich kreuzen und 2 Möglichkeiten bestehen (an der Kreuzung), dann rechts/oben rechts/unten rechts/unten priorisieren.
-> solange, bis kein Punkt mehr da ist.
-> u.U. ersten Punkt und letzten Punkt "verbinden", um Durchschnittslinie zu verfolgen
Das ist genau das, was real meinte.
-> ersten Punkt suchen
-> oben,oben rechts,rechts,unten rechts, unten, unten links nachschauen, wo der nächste Punkt liegt.
-> Wenn 2 Linien sich kreuzen und 2 Möglichkeiten bestehen (an der Kreuzung), dann rechts/oben rechts/unten rechts/unten priorisieren.
-> solange, bis kein Punkt mehr da ist.
-> u.U. ersten Punkt und letzten Punkt "verbinden", um Durchschnittslinie zu verfolgen
Das ist genau das, was real meinte.

OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!