Laserlinie ermitteln!

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

blink-182

Betreff: Laserlinie ermitteln!

BeitragSa, Nov 12, 2005 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
ich habe ein kleines Prog geschrieben mit dem ich aus 2 Bilder der Selben situation (einmal mit, einmal ohne LAserlinie) die Laserlinie Ermitteln kann, bzw punkte die auf ihr liegen. NUr leider dauert das prog bei mir recht lange.
Vlt hat jemand einen vorschlag, wie ich die Berechnungszeot verkürzen kann. Bin um JEde sekunde dankbar, aber bitte nicht sagen lass das Delay am ende weg^^ Die Bilder, die erstellt werden sind nur zur Kontrolle. Hinterher werden diese Bildererstellungsbefehle entfernt und nur noch auf datenbasis gearbeitet.

THX

Hier is das Prog mit 2 Beispielbildern: http://www.blitz-pasting.net/u...1_scan.rar

oder: http://rapidshare.de/files/7538779/scan.rar.html

Ebola33

BeitragSo, Nov 13, 2005 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Zunächst mal kommt da ein MAV, warscheinlich daher weil du wenn du mit read bzw. writepixelfast arbeitest bildbreite bzw. bildhöhe -1 nehmen musst. Manche systeme stecken das weg, andere nicht.

Ich blicke durch deinen Code auch nicht wirklich durch. Beschreibe mal genau was dieser tun soll.... Was ist die Laserline ?

Wenn du punkte auf einer Linie mit einem bestimmten Winkel ermitteln möchtest dann benutze Sin() und Cos().

edit: mir ist da gerade aufgefallen du schreibst da eine 14mb grosse datei *ggg* was ist denn da drin ? Very Happy



mfg ebo
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/
 

blink-182

BeitragSo, Nov 13, 2005 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
Der Code soll folgendes machen:
Zuerst wird das bild mit LAserlinie eingelesen. Anschließend das ohne.
Dann werden für jedes Pixel folgendes berechnet: BildmitLaser-Bildohne LAser. Übrig bleibt dann eine LAserlinie und so einiges mehr ^^ nun ist das Ziel diese Laserlinie herauszufinden. hierfür gehe ich jede Zeile durch und suche nach pixeln mit einer hohem übriggeblibener Farbsumme (rs+gs+bs), wobei rs mindestens einen wert von 60 haben muss(die 60 habe ich durch ein bisschen ausprobieren rausgefunden.) nun hat man schon in jeder Zeile Punkte ermittelt, die zu ca 98% auf der linie liegen. im Nächsten schritt werden Punkte herausgefiltert, die nicht zu den anderen 98% passen und im letzten schritt von 10 Zeilen ein durchschnittswert gebildet wird. Ich stelle gleich noch ein Bild des Ergebnisses online bei dem die höchstwerte Jeder Zeile blau, die HArausgefilterten Punkte rot und die Durchschnittswerte Grün sind.

Edit: wie versprochen das Bild:
http://img431.imageshack.us/im...nie8bo.jpg

x-pressive

BeitragMo, Nov 14, 2005 14:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt hast du uns aber noch immer nicht erklärt, wozu das im Endeffekt gut sein soll Wink Willst du ein 3D Modell daraus berechnen? Wenn du schon einen 3D scanner hast (dem Foto nach), dann laß den das doch machen und spar dir die Mühe. Oder hat das noch einen anderen Zweck Question
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL
 

blink-182

BeitragMo, Nov 14, 2005 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
oh.. hab ich dasn icht erwähnt??? Den baue ich selber Wink deshalb der ganze Aufwand Very Happy
Kostenloser IPOD!!! http://ipods.freepay.com/?r=24919444

x-pressive

BeitragMo, Nov 14, 2005 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Reschbeggt! Da hast du dir was vorgenommen -du willst also alles in eigener Regie machen, Drehteller, Motor, Laser und dazu also eine Software, die anhand der Lasermarkierung auf dem Objekt die Form abtastet? Das wäre was für "Jungend forscht" Wink

Allerdings arbeitet deine Methode ja mittels "Bilderkennung", du untersuchst also quasi die Verzerrung des Lasers, so habe ich das bisher jedenfalls aufgefasst. Das wird wahrscheinlich kaum funktionieren -bei einem richtigen 3D Scanner wird der Laser ja reflektiert, soweit ich weiß und durch die Laufzeit bzw. den Reflektionswinkel die Entfernung gemessen. Nur anhand einer optischen Verzerrung auf einem Bild wird das kaum zu erreichen sein, vielleicht gerade noch mal bei sehr einfachen, runden Objekten (wie die Vase).

Was ich aber nocht nicht kapiere -wozu vergleichst du ein Bild mit Laser mit einem Bild ohne Laserlinie? Was willst du durch diesen Unterschied herausfinden?
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

soli

BeitragDi, Nov 15, 2005 9:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Zwei Ideen dazu:

Warum wandelst du die Bilder nicht nach bmp, dann kannst du auf die RGB Daten direkt zugreifen und brauchst sie nicht auslesen.

oder
Wenn du das Bild anzeigen lässt, könntest den Bereich der abgescannt werden soll eingrenzen. In deinem Beispiel würde reichen von Pixel 1000-1300 in der Breite zu scannen.
solitaire
 

blink-182

BeitragDi, Nov 15, 2005 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Kaum zu glauben, aber es ist ein Jugend Forscht Projekt Wink Very Happy
zur Laserlinie: ich vergleiche ein bild ohne und ein Bild mit Laserlinie, um den Verlauf der Laserlinie möglichst exakt zu bestimmen. Habe ich diesen herausgefunden kann man über Trigonometrische Funktionen den Abstand zum Mittelpunkt des Drehtellers errechnen.
Als BMP Umwandeln würde denke ich auch recht viel Zeit in anspruch nehmen, aber zum 2. Forschlag: Genau das habe ich gestern Nacht noch eingebaut und siehe da, jetzt schafft ers schon in 4 Sekunden. natürlcih habe ich den Code noch weiter optimiert.

Danke für die Hilfe!!!
Kostenloser IPOD!!! http://ipods.freepay.com/?r=24919444

x-pressive

BeitragMi, Nov 16, 2005 11:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach so, du brauchst deswegen zwei Bilder, weil du anhand des Vergleichs ermittelst, wo der Laser ist. Aber das würde doch auch einfacher gehen. Der Laser hebt sich durch seine Farbe doch so deutlich ab, daß es kein Problem sein sollte, das durch auslesen extremer Rotanteile im Bild zu ermitteln.

Ich würde das folgendermaßen machen:

- Du scannst das Bild (das mit dem Laser) von oben nach unten Zeile für Zeile ab wobei du ja nur jede 3. oder 4. Zeile zu nehmen brauchst (das sollte man einstellen können, mehr Genauigkeit = langsamer, größerer Zeilenabstand = schneller).

- Es würde genügen pro gescannter Bildzeile nur einen einzigen roten Pixel zu finden. Nimm einfach den Pixel der Bildzeile, der den höchsten Rotanteil aufweist (und den geringsten Anteil anderer Farben). Das muß dann der Laser sein.

- Die gefundenen Pixel speicherst du in einer Liste (mit ihren X-Y Koordinaten).

- Am Schluß kannst du alle Pixel mit einer Linie verbinden und erhältst so die Kontur der Laserlinie. Wenn du nur alle 3. oder 4. Zeilen gescannt hast (schnell) wird diese Kontur etwas eckiger sein, wenn du JEDE Zeile scannst (langsamer) wird sie eine weichere Form haben.

Aber diese Methode wäre ziemlich schnell -und sogar noch schneller, wenn du nicht nur jede 2. oder 3. Zeile scannst, sondern pro Zeile auch nur jeden 2. Pixel oder so. Würde das in deinem Fall funktionieren?
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL
 

blink-182

BeitragMi, Nov 16, 2005 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
genauso hatte ich es zuerst vor! In der theorie klappt das auch fast ganz gut, aber leider ist es in der Praxis wie fast überall nicht so ^^
ICh versuche es zu erklären: Den Laser z.B. auf ein weißes Objekt richtet hat dieses Objekt auch ohne die Laserlinie sehr hohe Farbanteile, sodass sich hinterher der Laserlinie von den nebenliegenden Pixeln nurnoch marginal unterscheidet. Hatte es zuerst genau so probiert, jedoch war das Verfahren leider zu ungenau. aber ich denke ich werde den zweiten Teil mit der genauigkeit noch einbauen, sodass ich z.B. nur jede 2. Zeile abfrage(einstellbar)! Danke für den Tipp!

ciao
Kostenloser IPOD!!! http://ipods.freepay.com/?r=24919444
 

fliege

BeitragMi, Nov 16, 2005 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du eine Laserlinie projezierst dann musst du bedenken, das du auch den Laser auf die dahinterliegenden Objekte wirfst (in deinem Fall auf den Kasten) -> ungut. wenn du Objektbegrenzungen hast, dann kannst du ja schaun, in welchen winkel du die Kamera ausrichten musst, damit die Laserlinie hinter einer gewissen Tiefe nicht mehr sichtbar ist...
Ich hatte mir das auch mal vorgenommen, hier der Link:
https://www.blitzforum.de/view...highlight=
Vielleicht versuch ichs irgendwann mal wieder, weiß aber noch nicht.

Hoffe, es hilft dir
Fliege
Wer weiß was kommt.. ?
 

blink-182

BeitragMo, Nov 21, 2005 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
ich habe nun die Funktion soweit fertig, dass ich die Linie auslesen kann und aus den erhaltenen daten die entfernung zum mittelpunkt der einzelnen Punkte berechnen kann. nun habe ich also soetwas wie eine Punktewolke, die die Oberfläche des eingescannten Objekts darstellt. aber wie mache ich daraus nun ein 3D Objekt? Man bedenkt, dass manchmal Punkte fehlen, weil diese potentielle Fehlerpunkte waren.
sollte ich diese Fehlerpunkte konkret mitspeichern(erkenntlich), sodass ich hinterher sagen kann: wenn einer der 3 Punkte= Fehlerpunkte dann kein Dreieck?

Vlt jemand eine bessere IDee?
Kostenloser IPOD!!! http://ipods.freepay.com/?r=24919444
 

Dreamora

BeitragDi, Nov 22, 2005 10:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt musst du das ganze Triangulieren (Mittels Vornoi zb) um daraus aktuell nutzbare 3D Daten zu erzeugen oder du schreibst dir selbst ein Programm, dass diese Punktdaten auf Basis von Pointsprites rendert, dann brauchst du keine Triangledaten zu erzeugen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

blink-182

BeitragDi, Nov 22, 2005 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ist die Voronoi Methode tatsächlich hierfür geeignet? Zweidimensional sollte das ganze kein Problem darstellen. Dreidimensional ist es denke ich schon etwas schwiriger,wobei man die "Ebenen" immer tangential an den Objektpunkt egen könnte. Aber es können bei dieser Methode doch auch durchaus häufig teilflächen entstehen, die Mehreckig sind, was meines Wissens nach keinem 3D-Standard entspricht. Vlt habei ch bei der ganzen sache aber auch einen Denkfehler?

THX
Kostenloser IPOD!!! http://ipods.freepay.com/?r=24919444

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group