Stimmt, das muß ein Moderator oder Admin machen.
Druckbare Version
Stimmt, das muß ein Moderator oder Admin machen.
Ok, wenn dann wieder so ein Fall auftritt, wende ich mich direkt an dich ;-)
Gruß
Johannes
neuer algorytmus
so jetzt haben wir canny im griff.
wenn wir jetzt noch jemand da draussen erklärt wie man den
Chain alorytmus so programmiert das er mit 1 punkt liene funktioniert
kann ich fläschen aus rechenen und ob jekte erkennen da ein ziel finden.
leider liefert er bei auch nach einer halben stunde kein brauch bares ergebnis. die neues software ist zwar nicht mehr so schnell aber liefer bei mein missen beleuchtung noch erbnisse mit den was an fangen kann.
und das rauschen der cam stört nicht mehr so
Ja, sieht gut aus. Eine halbe Stunde braucht er? Wie funktioniert der neue Algo? Oder selber Algo nur nochmal etwas anders programmiert?
Gruß
Johannes
1. was fuer ein PC wird verwendet (es macht einen unterschid ob man einen P1 oder einen PC mit 4X Atlon64 verwendet)
2. ich kann auf den bildern fast nix erkennen (soll keine kritik sein) soll das so sein (und der roboter kann doch damit etwas anfangen) oder ist das ein fehler?
3. ist es moeglich, dass sich das programm noch beschlaeunigen laesst? entv. sind unnoetige pausen oder unnoetige rechenoperationen dafuer verantwortlich. manchmal werden programme aucgh schneller, wenn man vor dem compeliren alle komentare und unnoetige leerzeilen im quelltext entfernt. es kann aber auch sein, dass das programm sich nicht viel schneller machen laesst. 2 bilder pro stunde reichen warscheinlich nicht aus (aber trozdem gratuliere ich zu dem teilerfolg)
oh da habe ich mich wohl falsch ausgedrükt das bild bekomme ich in ca.
250 msec. das bild ist mit absicht so denn der roboter kann ja nur mit kannte was anfangen und natvigieren. wenn auf diesem bild den Chain alogrytmus für die fläschen berechung los lassen dann dauert es eine halbe stunde und es kommt nix sin volles raus. Ich hoffe jetzt konnte man es verstehen.
auszug aus dem LOg:
19.04.2004 01:29:14,197 Image begin
19.04.2004 01:29:14,197 Image convert begin
19.04.2004 01:29:14,367 Image convert end
19.04.2004 01:29:14,688 Image end
das porblem ich muß fläschen bereichen um ding wieder erkenn zu können an bei ein bild das es was deutlicher mach hoffe ich.
Also noch mal die Frage wie berechne ich die fläsche des Kreisen wenn ein nur ein gitter mit 1 und 0 habe.
Die Fläche eines Kreises ist pi*r^2, aber um die auszurechnen, müsste der Robby ja erst mal wissen, dass es überhaupt ein Kreis ist.Zitat:
das porblem ich muß fläschen bereichen um ding wieder erkenn zu können an bei ein bild das es was deutlicher mach hoffe ich.
Also noch mal die Frage wie berechne ich die fläsche des Kreisen wenn ein nur ein gitter mit 1 und 0 habe.
Eine Möglichkeit die Fläche bei unbekannter Geometrie (Form) abzuschätzen, wäre einfach die Pixel zu zählen und ins Verhältniss zur Gesamtzahl der Pixel des Bildes zu setzen. Wenn die Umrisslinien wirklich geschlossen sind, müsste das halbwegs klappen.
Nur weiss ich nicht so richtig, was es dir nutzt die Fläche zu wissen. Bei einem bekannten Objekt, könnte man daraus auf die Entfernung rückschliessen, aber dafür müsste das Objekt erst mal bekannt sein.
Kann es sein, dass du gar nicht "Fläche berechnen" sondern eher "Form/Umriss erkennen" meinst?
Weisst du denn schon genau, was du mit der Bilderkennung genau bezwecken willst?
Soll der Robby darüber
- Entfernungen ausrechnen?
- Gegenstände finden?
- sich orientieren?
- Bewegung erkennen
Als erstes würde ich nach der berechnung des Umrisses versuchen die Farbe wieder ins Spiel zu bringen. Wenn die umrissenen Fläche im originalen Bild irgendeinen rot-Ton hat, weisst du dann schon mal, dass es nur irgendein roter Gegenstand ist.
Wenn du den Robby mit einer Datenbank fütterst die möglichst viele Informationen über die vorhandenen Gegenstände in seiner Umgebung enthält, kannst du so schon mal sämtliche Dinge die nicht rot sind ausschliessen.
Als nächstes könntest du dann vielleicht das Verhältniss von Höhe, Breite und Diagonale aus dem Umriss ermitteln. Wenn die ungefähr gleich sind, könntest du in der Datenbank die rechteckigen Gegenstände auschliessen. Wenn du wie wie im Bild oben zwei Umrisse gleichzeitig hats, kannst du so sicher noch mehr Dinge ausschliessen und irgenwann bleibt mit etwas Glück nur ein Gegenstand übrig der es eigentlich sein müsste.
Wenn er in der Datenbank nichts entsprechendes findet, muss der Robby halt eine neue Aufnahme machen und von vorne anfangen.
Eventuell kann man dann noch mehrere Gegenstände miteinander verknüpfen. Wenn er z.B. links die 2 Kreise als Fahrrad identifiziert hat, aber rechts den quadratischen Umriss der Zimmertür nicht findet ist es halt doch nicht das Fahrrad und Robby muss weitersuchen.
Einfacher wäre es, wenn man die berechneten Bilder von den Umrissen direkt mit gespeicherten Bildern in einer Datenbank vergleichen könnte. Ich kann mir nur nicht vorstellen, wie man das softwaremässig hinkriegt.
Aber viellecht fällt dir da ja was ein.
Ein grossen Problem ist, dass 2- und 3-dimensionale Objekte aus unterschiedlichen Blickwinkeln unterschiedliche Umrisse ergeben. Dasselbe Problem ergibt sich bei Farben und unterschiedlicher Beleuchtung.
Daher kann ich mir eigentlich nur vorstellen, wie Robby über Datenbank und Auschlussverfahren ermittelt, was die Umrisse nicht darstellen.
Wenn die Datenbank gut gefüllt ist und man nur Umrisse ab einer bestimmten Grösse berücksichtigt, kommt man so aber in einer bekannten Umgebung vielleicht auch zum Ziel.
Moin,
das Problem mit den verschiedenen Blickwinkeln könnte man durch eine dreidimensionale Erkennung lösen, die auf der anderen Seite natürlich noch aufwändiger ist und länger dauert.
Aber ich bin der Meinung, dass man das erkannte Bild irgendwie in Vektoren umrechnen muss. EinVektor sieht ja immer so aus:
(a) = (Ortsvektor) + (Richtungsvektor) * x
So, wenn du jetzt irgendwie das Bild bzw. das erkannte Objekt vektorisieren kannst, also es mit mehren Vekotoren beschreibst, dann wärst du das Problem mit Verzerrungen eventuell los, da der Parameter x vernachlässigt werden kann. Ich hoffe ihr könnt nachvollziehen, was ich meine. Ich gebe zu, das ist noch zu theoretisch, aber du musst einen Weg finden, mit dem du charakteristische Objekte speichern und vergleichen kannst. Dann ist es möglich, Objekte widerzuerkennen.
Ich habe vor längerer Zeit mal einen Eckenerkennungsalgorithmus programmiert, allerdings aus Zeitgründen nicht zuende bekommen. Aber da hätte man dann Punkte, die man abspeichern müsste. Der Algo lief schneller, aebr er hatt eben nur Ecken erkannt, aber nicht die Zusammenhänge, also welche Ecken zu einem Objekt gehören. Irgendwie muss diese Bearbeitung doch schneller zu realisieren sein.
Gruß
Johannes
Hi,
nur mal ne kleine Anmerkung:
Das ist was du da beschreibst ist kein Vektor sondern eine Gerade. Mit verschiedenen Werten für x kommt man dann zu jedem Punkt der Geraden...Zitat:
(Ortsvektor) + (Richtungsvektor) * x
Das nur so nebenbei ;-)
Ansonsten verfolge ich eure Diskussion auch ganz interessiert, da ich mich demnächst auch mit dem Thema beschäftigen will ( vermutlich aber erst nach JuFo ).
MfG Kjion
Die Cam soll als Ziel erkennung eingesetzt werden in version 1.
Das heißt ich hänge im raum ein bild auf das soll erfinden und hin fahren.
Natürlich muß das bild in der Höhe der cam hängen. Warum ich die fläsche errechnen will ist folgende Formel
Umfang
compactness = ----------------
Flächeninhalt
so mit ist der Abstand zwischen bild und cam egal und ich brauche kein zwei um die entfernung berechne zu können. Die enfernung mißt ein sharp (IR). natürlich funktioniert die Fläsche berechnung nur wenn ich da von ausgehe das es ein kreis ist oder die Form als solche erkenne. Die Formen in Vierecke und kreis zu teilen ist das nächtes Problem.
Zur zeit möchte ich folgendes hin bekommen.
Bild:
00000000
00001000
00010100
00100010
00010100
00001000
00000000
00000000
0 = Schwarz
1 = Weiß
Dieser Keis hat einen Durchmesser von 5.
Jetzt kann ich fläsche und den umfang bestimmen und mit der Ziel bestimmung vergleichen. Dieses alles funktion dann natürclich nur in ein leeren Raum. Dieses ist mir klar. Wenn das aber bei allen Licht verhältnisens und in echt funktioniert dann hätte ich mein ziel für version 1 erreicht. dann kommt die erkkennnung wenn in der Fläsche gegen stände sind.
Gruß
Naja, man nennt das schon verktor der geraden... :-)
Gruß
Johannes
Naja, bei uns net ;-)
Da ist das ne Gerade, definiert durch einen Ortsvektor und eine Richtungsvektor...
Hm, so weit wohnen wir doch auch wieder nicht auseinander, oder? ;-)
Das mit der Gerade stimmt schon, aber bei uns schreibt man immer: (x> steht für x-Vektor, also x mit Pfeil drüber)
g1: x> = s> + t * r>
g1: Gerade 1
s>: Ortsvektor
r>: Richtungsvektor
t: eben der Faktor, für jeden Punkt spezifisch
Dasselbe auch mit Ebenen:
E1: x> = ...
Kommt dir diese schreibweise völlig unbekannt vor?
Gruß
Johannes
P.S. @nr.5: Sorry, dass wir wieder abdriften, aber erst einmal muss ich zum Arzt und dann lese ich mir dein Post nochmal genau durch.
Mit der 3D-Erkennung mit 2 Cams oben dachte ich nicht nur an die Entfernungsbestimmung, sondern an die Erfassung der Objektes im ganzen Raum. Damit würde man es dann auch aus einem anderen Blickwinkel wiedererkennen können, was bei einfacher 2D von einem 3D-Objekt natürlich nicht unbedingt ohne weiteres möglich ist.
Wenn du sowas hier hast:Zitat:
Die Formen in Vierecke und kreis zu teilen ist das nächtes Problem.
müsstest du da eigentlich schon auslesen können, ob es ein Kreis oder ein Rechteck ist.Zitat:
00000000
00001000
00010100
00100010
00010100
00001000
00000000
00000000
-Wenn du alle Reihen von oben nach unten durchgehst und jeweils die zwischen 2 Einsen eingeschlossenen Pixel zählst, ergibt die grösste Zahl die Breite, bzw. den Durchmesser.
-Wenn du dasselbe von oben nach unten machst, erhältst du Höhe, btw. Durchmesser.
- Wenn Höhe und Breite unterschiedlich sind, ist es kein Kreis, also ein Rechteck (oder ganz was anderes)
- Wenn Höhe und Breite gleich sind, ist es ein Kreis oder ein Quadrat.
- Wenn du Breite und Höhe in Pixeln kennst, kannst du ausrechnen, wieviel Pixel der Umriss einschliessen müsste, wenn es ein Quadrat ist.
- Schliesst der Umriss weniger Pixel ein, ist es ein Kreis und kein Quadrat.
na so in der art habe ich auch schon gedacht aber auch das ist ein kreis
000011000
000100100
000100100
000011000
000000000
oder nicht ?
in der software ist es zwar nicht 0 und eins aber so ligen die daten vor als array of float.
recycle in was programmiers du ?
hast du vielleicht ein code ansatz ?
@Johannes
Naja, ein Stückchen ists schon ;-)Zitat:
Hm, so weit wohnen wir doch auch wieder nicht auseinander, oder?
Ne, machen wir fast genauso. Wir haben wohl etwas aneinander vorbeigeredet und dabei beide das gleiche gemeint ;-)Zitat:
Das mit der Gerade stimmt schon, aber bei uns schreibt man immer: (x> steht für x-Vektor, also x mit Pfeil drüber)
g1: x> = s> + t * r>
g1: Gerade 1
s>: Ortsvektor
r>: Richtungsvektor
t: eben der Faktor, für jeden Punkt spezifisch
Dasselbe auch mit Ebenen:
E1: x> = ...
Kommt dir diese schreibweise völlig unbekannt vor?
@NumberFive
Ist Array of Float nicht unsinnig ? Brauchst du wirklich Gleitkommawerte ? Wenn man das ganze mit Integer oder Bytes machen würde könnte man doch vermutlich noch ein bißchen Rechenzeit einsparen.Zitat:
in der software ist es zwar nicht 0 und eins aber so ligen die daten vor als array of float.
Deine Beispiele sind übrigens zu klein, als das man da zwischen Kreis, Rechteck usw. wirklich unterscheiden könnte. Das erste wäre nämlich zum Beispiel viel eher eine Raute als ein Kreis...
MfG Kjion
Hallo Kjion,
das mit dem Array of float ist erst jedes so war für ein Array of byte
aber arbeiten dann gaus und canny nicht sauber un beim umrechen von
farbe nach schwarz /weiß geht zu viel verloren deshalb float.
Natürlich sin die beispiele zu klein aber ehrlich hatte jetzt nicht gerade lust
340 Nullen in die breite zu schreiben un 240 nach unten spricht in mein posting 76000 nullen und einsen zu schreiben es ging nur um prinzip.
Gruß
Hier im Downloadbereich gibt es eine Diplomarbeit, wo ein Kohonen-Netzwerk für die Erkennung von Verkehrszeichen verwendet wurde.
Dies wäre ebenso ein interessanter Ansatz, speziell wo es doch hierbei um Mustererkennung geht (Ist auch wohl einige der wenigen Bereiche wo NNs schon effektiv eingesetzt werden).
Ebenso habe ich einen anderen Bericht gesehen wo eine Kamera und ein Laser verwendet wurde um Objekte zu erkennen. Dazu wurde der Kamera noch ein Filter vorgesetzt, so daß nur das Licht des Lasers registriert wurde.
Dies vereinfacht natürlich die Erkennung von Objekten nicht unwesentlich.
(Im Bericht wurde nur eine horizontale Linie mit dem Laser gezogen).
Wenn man das weiterspinnt und sich zwei Kameras vorstellt, dazu ein Laser der die Umgebung Zeilenweise abtastet, so könnte ich mir gut Vorstellen, daß man eine Objekterkennung hinkriegen kann (zumindest kann man Objekte als Flächen erkennen und anhand der Stereobilder könnte man sogar grob die Entfernung der Objekte ermitteln).
Dies soll euch nur als kleine Anregung dienen !!!
(Ich selber habe keine große Ahnung von NN oder Bildverarbeitung, fand jedoch den Ansatz mit dem Laser sehr gut nachvollziehbar).
@NumberFive
Das wäre ein Kreis mit 4 Pixel Durchmesser. Das wäre dann sicherlich kein Objekt, dass du besonders gut per Bilderkennung erkennen könntest. Das würde man ja eigentlich auch mit dem menschlichen Auge eher Punkt und nicht als Kreis wahrnehmen.Zitat:
na so in der art habe ich auch schon gedacht aber auch das ist ein kreis
000011000
000100100
000100100
000011000
000000000
oder nicht ?
Bei grösseren Objekten, z.B. einem Kreis mit 10, 20 oder mehr Pixeln ergibt sich das Problem das du da andeutest ja nicht mehr und die Symmetrie wäre wesentlich deutlicher zu erkennen.
Ich programmiere da gar nichts dran, ich finde das Thema nur sehr interessant und verfolge den Thread deswegen.Zitat:
recycle in was programmiers du ?
hast du vielleicht ein code ansatz ?
Ich kenn ein bischen Visual Basic, Java, Javascript usw. kann aber nicht wirklich programmieren. Wenn ich überhaupt mal ein kleines Programm zusammenbastel, muss ich mir die einzelnen Befehle, Codeschnipsel, Beispielcode usw. mühselig zusammensuchen und zusammenbasteln.
Hallo Leute,
auf grund der kosten die jetzt schon entstehen auf grund der Rechnenleistung und des energie bedarfs werde ich in version eins sicher nicht noch ein cam einbauen. Das läst sich ein fach nicht relasieren vom geld verbrauch. mag schon sein das Laser und zwei cams mehr leisten könnte aber ich denk weiter hin das es sich auch so regeln läst. Im moment teste ich gerade meine version eines neuronnalen netzes viel kommte auf dem weg weiter was die Software an geht. Parall muß ich versuchen die hardware auf die reihe zu bekommen den immer nur theorie ist langweilig. weiß ich jemand einen sponsor oder will sich jemand beteiligen ?
Gruß
Hallo was haltet ihr davon dass ein Roboter seine Umgebung mit einem Stereo-Kamerasystem einscannt und als Ergebniss dann ein großes Pixelfeld erhält!
in diesem Pixelfeld kann man dann nach den entsprechenden Gegenständen suchen!
hobbyfreak
Hi!
Hab das mal alles sehr gespannt durchgelesen, weil ich auch eine CAM zum steuern nehmen möchte. Dafür aber keinen PC mit Algorithmus, sondern Hardware im FPGA.
Es scheint ja viele Methoden der Wegbestimmung zu geben. Zum Beispiel auch per Vergleich von 2 Folgebildern. Der Ansatz mit den Flächen scheint aber sehr interessant zu sein.
Das einzige was ich mich frage ist welchen Sinn die Erkennung der Form der Fläche macht. Meiner Meinung wäre die Verbindung einer Fläche mit einem Helligkeitswert/Farbwert wesentlich informativer. Aber vielleicht verfolge ich da schon andere Gedanken als ihr. ;)
Zitat:
Zitat von Albanac