Laserlinie ermitteln!
Übersicht

blink-182Betreff: Laserlinie ermitteln! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ? ![]() mfg ebo |
||
ansteckend... ![]() verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/ |
blink-182 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jetzt hast du uns aber noch immer nicht erklärt, wozu das im Endeffekt gut sein soll ![]() ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
blink-182 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oh.. hab ich dasn icht erwähnt??? Den baue ich selber ![]() ![]() |
||
Kostenloser IPOD!!! http://ipods.freepay.com/?r=24919444 |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
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" ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Kaum zu glauben, aber es ist ein Jugend Forscht Projekt ![]() ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group