AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Positition eines 3D Objekts aus einem Bild auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Positition eines 3D Objekts aus einem Bild auslesen

Ein Thema von Nikolas · begonnen am 23. Aug 2008 · letzter Beitrag vom 24. Aug 2008
Antwort Antwort
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#1

Positition eines 3D Objekts aus einem Bild auslesen

  Alt 23. Aug 2008, 21:27
Hallo Delphianer

Ich habe ein kleines Problem, und hoffe, dass sich schon mal jemand damit beschäftigt hat:

Es geht darum, dass ich im nächsten Semester einem Roboterarm beibringen soll, eine Tasse zu greifen. Dafür habe ich als Sensor eine Web-Cam die auf dem Greifer des Roboters angebracht ist. (wobei man die auch wo anders hinstellen könnte, aber bei einer Kamera wird's wohl bleiben.) Wo mein Arm im Raum ist, weiss ich, wo die Tasse ist oder in welche Richung sie ausgerichtet ist, weiss ich nicht.

Am Liebsten würde ich aus einem einzelnen Bild diese Informationen auslesen, um dem Arm dann sagen zu können, wo er sich hinbewegen kann. Dem Arm kann ich dabei einfach eine 3D Position übergeben, die Umrechnung in Gelenksbefehle bekomme ich geschenkt. Das eigentlich Fassen werde ich über Tastsensoren realisieren, die an den Fingern des AEinrms angebracht sind.

Die Tasse wird sicher deutlich vom Hintergrund abheben, so dass ich die Kante auslesen müssen könnte. Wie die Tasse aussieht weiss ich im vorraus, da könnte ich Trainingsbilder machen, oder mir ein openGL-Modell anfertigen, oder sonstwie vorverarbeiten.

Ein einfacher Ansatz wäre ein openGL Modell, mit dem ich Bilder in Abhängigkeit von den Positions- und Rotationsparametern erzeugen kann, die dann mit meinem KameraBild vergleiche und dann eine Suche nach den passenden Parametern sucht. (steepest ascent,...). Auf dem Rechner läuft Linux, der Aufwand für den ständigen Bildvergleich wäre wohl aber etwas zu hoch und auch die Genauigkeit wäre zu niedrig, was ein größeres Problem darstellt, da ich den Greifer doch recht nah an die Tasse ranfahren muss, damit ich mit dem Tastern arbeiten kann.

Ein anderer Ansatz wäre die Extraktion ein paar Interessanter Punkte aus dem Bild, so dass ich versuchen könnte, diese Punkte dann im Modell zu finden und darüber auszurechnen, wo sich die Tasse zu befindet.

Für alles andere (auch wenn es nur Papers sind, in denen was in der Richtung behandelt wird) wäre ich sehr dankbar, im nächsten Semester werde ich recht viel Zeit da rein stecken, so dass wirklich die Zeit da ist, mich in ein paar Sachen einzulesen.

Nikolas
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Positition eines 3D Objekts aus einem Bild auslesen

  Alt 23. Aug 2008, 22:06
Hallo!

Es hat schon ein Grund, weshalb die Evolution (nahezu?) alle Lebewesen mit mindestens 2 visuellen Organen ausgestattet hat - erst die machen nämlich das räumliche Sehen erst möglich! Spontan würde ich sagen, dass Du das, was Du vor hast, nicht mit nur einer Webcam hinkriegen wirst.

Edit:
Das scheint recht interessant zu sein.

Edit die 2te:
Das könnte ebenfalls interessant sein.
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#3

Re: Positition eines 3D Objekts aus einem Bild auslesen

  Alt 23. Aug 2008, 22:53
Zitat von Dunkel:
Es hat schon ein Grund, weshalb die Evolution (nahezu?) alle Lebewesen mit mindestens 2 visuellen Organen ausgestattet hat - erst die machen nämlich das räumliche Sehen erst möglich!
Da sich die Kamera relativ zum Objekt bewegt, sollte es auch mit nur einem Input möglich sein - wenn die Tasse gut genug erkannt wird.

Irgendwo gab es einmal ein Video einer Software, die anhand eines Videos solche 2D->3D-Umrechnungen vornahm.
Im Video fuhr die Kamera an einem stehenden LKW vorbei. Man musste nur in einem beliebigen Frame die LKW-Seiten skizzieren und das Programm faltete das ganze dann zum LKW-Quader.
Jetzt bräuchte man nur noch einen passenden Suchbegriff, um das Video wiederzufinden .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Positition eines 3D Objekts aus einem Bild auslesen

  Alt 23. Aug 2008, 22:57
Zitat von Khabarakh:
Zitat von Dunkel:
Es hat schon ein Grund, weshalb die Evolution (nahezu?) alle Lebewesen mit mindestens 2 visuellen Organen ausgestattet hat - erst die machen nämlich das räumliche Sehen erst möglich!
Da sich die Kamera relativ zum Objekt bewegt, sollte es auch mit nur einem Input möglich sein - wenn die Tasse gut genug erkannt wird.
Das habe ich geschickt überlesen. Dann könnte man wirklich, wenn man die Größe des zu erkennenden Objekts kennt, anhand der relativen Größe auf dem Bild den ungefähren Abstand errechnen.
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#5

Re: Positition eines 3D Objekts aus einem Bild auslesen

  Alt 23. Aug 2008, 23:10
Die Bewegung sollte nicht einmal nötig sein, wie mir kurz danach eingefallen ist. Das hier wollte ich gerade reineditieren :

Angenommen, du kennst die Eigenschaften der Kamera und die Größe der Tasse und kannst diese auf dem Bild auch genau genug erfassen. Dann hast du genau den Output der Projektion in der Grafikkarte: Bildschirmkoordinaten und Tiefe (Z-Wert) des Objekts. Also müsstest du nur noch das übliche World-View-Projection umkehren, dann bekommst du die absoluten World-Koordinaten.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Positition eines 3D Objekts aus einem Bild auslesen

  Alt 24. Aug 2008, 07:08
Das haut aber auch wirklich nur dann hin, wenn du die Größe der Tasse sehr genau weisst, und diese in jeder vorkommenden Lage auch genau genug erkennen/umranden kannst. Weil die perspektivische Verzerrung wird wohl gering genug ausfallen, um dafür zu sorgen dass um 1-2 Pixel falsch erkannte Größen zu starken Variationen in der Tiefenschätzung führen werden. Wenn die Kamera relativ nah am Objekt ist, lässt sich das aber u.U. durch Nutzung eines Objektives mit sehr großem FOV zumindest ausreichend beheben.
Am sichersten fährst du eigentlich wenn du noch einen zusätzlichen "Tiefensensor" einbringen kannst. Die Nobelklasse sind da Laser, aber auch ein Ultraschall dürfte für diesen Zweck noch mehr als sehr gute Dienste leisten können. Sogar mit 2 Kameras ist das Erkennen/Umranden und herausrechnen der Tiefeninformation aufgrund der meist nicht allzu großen Auflösung der Kameras noch immer relativ ungenau, vor allem aber vergleichsweise aufwendig.

Es gab mal ein Freeware Programm "Icarus", dass von irgend einer Gruppe ich glaube an der Uni Manchaster entwickelt wurde. Das konnte anhand eines Videos ohne weiteres Zutun schon recht gut die Kamerafahrt und die Lage der erkannten Featurepoints in gängige 3D-Formate umsetzen. Hat man die Featurepoints noch von Hand an Objektkanten gesetzt und sie konnten gut getraced werden, konnte man sogar relativ gut zumindest Dinge wie Wände oder Schränke mit einbringen. Auf dieser Basis hatte das Teil auch noch eine Anti-Wackel-Funktion, die das Wackeln von Handkameras erstaunlich gut korrigieren konnte. Das dumme ist nur, dass dieses Programm schon vor Jahren aus dem Netz genommen wurde, und die (proprietäre) Technologie an ein Unternehmen verkauft wurde. An welches weiss ich leider nicht, aber ich hab es seit dem nicht mehr geschafft auch an ältere Versionen zu kommen.
Das hat recht gut demonstriert wie weit man so ca. gehen kann, der dahinter stehende Aufwand belief sich aber auf zig Mannjahre - und auch das war aus o.g. Gründen keinesfalls Millimetergenau, oder hätte das anderweitige Erfassen einer Kamerafahrt in Hollywood fürs Composing ersetzen können.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#7

Re: Positition eines 3D Objekts aus einem Bild auslesen

  Alt 24. Aug 2008, 12:55
Mit einer Cam würde ich es so machen:

Da die Position der Cam und die des Robo.-Arms bekannt ist kann man die Position der Tasse berechnen. Vorher muss der Robo
den Arbeitsbereich aus verschiedenen Winkeln aufnehmen (x,y und z - achse). Nun hat man die Position und die Ausrichtung der
Tasse samt Henkel. Den Arbeitsbereich sollte man mit einem dunklen Material auskleiden um einen guten Kontrast zu erhalten
für die Bilderkennung die die Tasse sucht/erkennt.
Der Rest sollte einfach sein je nach OS des Robos.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Positition eines 3D Objekts aus einem Bild auslesen

  Alt 24. Aug 2008, 23:57
Ich bin bisher von einem statischen Roboter ausgegangen. Wenn du den präzise genug bewegen kannst, kannst du in der Tat darüber mit einer Cam auskommen, da die Szene an sich ja vermutlich statisch sein wird. Dann kannst du dir ja so gesehen unendlich viele Kameras simulieren.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz