Archiv verlassen und diese Seite im Standarddesign anzeigen : Bildverarbeitung Hough-Transformation Alternativen
Hallo... Habe ein Bild aus einem Interferometer das bestimmte streifen / ringmuster ergibt.
wenn ich das jetz Fouriertransformiere bekomme ich bei nem streifenmuster ein maximum in der mitte, sowie 2 kleiner maxima links und rechst bzw oben und unten davon, (zb link oben, rechts unten).
Um zu sehe in welchem Winkel die Streifen verlaufen kann ich jetz einfach schauen in welchem winkel die gedacht linie durch die 3 maxima verläuft .
(das macht bis jetz die hough-transformation)
Is aber irgdnwie suboptimal, wiel sehr rechenaufwändig...
Hat irgdnwer ne idee, wie ich das rechentechnisch günstiger lösen kann?
Bei so linenfolgerobotern könnte man das ja auch so ähnlich lösen oder?
(wens intressiert: geht drum ein Objekt ganz supigenau zu vermessen, dazu muss es aber erst positioniert werden, mit dem streifenmuster kann man dann erkenne wohin das geschoben werden muss.. so ungefähr)
bin für alle tipps dankbar...
mare_crisium
26.04.2008, 08:26
goara,
ich nehme an, Du arbeitest mit einer zweidimensionalen FFT? Das Endergebnis, dass Dich interessiert, ist der Neigungswinkel des "Streifenmusters"? Welche Verarbeitungsschritte machst Du zwischen FFT und Hough-Filter?
Ciao,
mare_crisium
hallo mare_crisum...
genau is ne 2d fft
als erstes habe ich das gemessene bild überlagert mit dem sollbild:
http://dyyyh.de/robo/mess.jpg
wenn es nicht genu positioniert ist also verschoben gibt es dieses linienmuster..
daraus will ich jetzt die verschiebung bekommen.. erst fft -->
http://dyyyh.de/robo/fft.jpg
dann die maxima suchen :
http://dyyyh.de/robo/max.jpg
und dann die hough
http://dyyyh.de/robo/hough.jpg
das funktioinert so auch.. aber es ist ein wenig übertireben mit der hough finde ich, das kann man doch sicher auch einfacher lösen oder ??
mare_crisium
27.04.2008, 14:14
Tachchen goara,
sieht sehr interessant aus :-). Darf man wissen, wie das Bild entsteht?
Ich glaube auch, dass es einfacher geht. Guck' Dir doch mal die angehängte Datei an. Den Algorithmus, den ich da beschreibe, kannst Du auf die Fouriertransformierte loslassen. Er liefert Dir dann unter anderem die Steigung einer Geraden, die mitten durch die hellsten Bereiche verläuft. Man kann das auch noch weiter ausbauen, so dass das Ding auch eine Genauigkeitsschätzung für die Steigung und den Aufpunkt liefert.
Sag' mal, ob's funktioniert.
Ciao,
mare_crisium
Edit_1: Du wendest die FFT auf das "gemessene bild überlagert mit dem sollbild" an. Kannst Du die beiden Bilder hier mal einzeln (vor der Überlagerung) einstellen? Vielleicht kann man ja auch den Überlagerungsschritt einsparen.
Übrigens gibt es für diese hübsche schwarze Figur ;-) mit den vier Schleifchen an den Ecken (ein Hypozykloid) auch eine mathematische Beschreibung.
mare_
hallo mare..
erst mal danke fuer die antwort.. war grad ne woche im urlaub, desswegen hab ich nix geschrieben...
das bild entsteht in einem interferrometer, allerdings werden mehrere kleine bereiche (diese schleifen) gemessen, und nicht alles auf einmal, damit es überall scharf ist.
das originalbild kann ich mal suchen, dann poste ich das hier.. da sieht man aber nicht wirklich was interessantes.
wo ist denn die angehängte datei ?? kann die hier nirgends entdecken ???
mfg
goaran
mare_crisium
05.05.2008, 22:35
Guten Abend, goara,
ich hatte die Datei wieder gelöscht, weil ich nichts von Dir gehört hatte und ich immer Schwierigkeiten mit der upload-quota habe. Die Datei ist hier wieder angehängt. Meine Methode ist eine Abwandlung des bekannten Algorithmus, mit dem man nach dem Prinzip der minimalen Summe der Abweichungsquadrate (vulgo "Methode der kleinsten Fehlerquadrate") eine Ausgleichsgerade durch eine "Punktwolke" legt. Im Prinzip bieten auch fast alle Tabellen-Kalkulationsprogramme so eine Funktion an (z.B. Openoffice.calc oder MS-Excel). Wenn Du den Schwellwert für die Maximums-Suche etwas heruntersetzt, bekommst Du mehr als nur 4 Punkte - eben eine grössere "Punktwolke". Mit einer grösseren Anzahl von Datenpunkten kannst Du den Einfluss des "Rauschens" auf die Auswertungsergebnisse verkleinern.
Die 4 Maxima im vorletzten Bild gehören meiner Meinung nach zu dem schwach geneigten Streifenmuster, das man im Originalbild sieht. Wenn man dieses Muster ohne die überlagerten "Schleifen" bekommen könnte, dann lieferte die Auswertung genauere Ergebnisse.
Die Überlagerung, die Du erwähnst, ist auch aus folgendem Grund für die Auswahl der Auswertungsmethode interessant: Wenn Du zwei Originalfunktionen durch Faltung überlagerst und dann fourier-transformierst, kommt dasselbe heraus, als wenn Du beide Funktionen separat fourier-transformierst und die Fouriertransformierten dann miteinander multiplizierst. Dasselbe gilt auch umgekehrt: Eine Faltung der Fouriertransformierten führt bei der Fourier-Rücktransformation zu multiplikativer Überlagerung im Raum der Originalfunktionen. - Will sagen: Wenn man die einzelnen Originalfunktionen separat fourier-transformieren könnte, oder die Überlagerung ganz weglassen könnte, wäre die Auswertung vllt noch stärker zu vereinfachen.
Na, es gibt eben einige Möglichkeiten, aus Deinen Daten was zu machen :-).
Ciao,
mare_crisium
Edit: Anhang gelöscht wg. Upload-Quota
hallo mare.. nochmal danke fuer die datei.. habe sie mir gezogen, kannst du also wieder löschen..
werde mir das mal anschauen, aber das hört sich ganz brauchbar an..
ja die maxima kommen von den streifen, und die streifen sind ja auch das messergebnis das ich haben will (zumindest beim ersten schritt für die ausrichtug)
Die Schleifen kann man leider nicht wegbekommen, das liegt an der Messmethode.
Werde mal versuchen das anzuwenden und dann mal die Ergebnisse (falls was brauchbares rauskommt hier reinstellen)
hallo mare
Hab mir dein pdf gründlich durchgelesen und bin echt beeindruckt. Habe mir selbst ein ähnliches Verfahren überlegt, jedoch hab ich eine ganz andere Problemstellung. Ich wollte endlich mal eine brauchbare alternative zum hough algorithmus programmieren, der ebenfalls auf der methode der kleinsten quadrate beruht, jedoch auch mehrere Linien in einem Bild finden kann und am besten noch anfangs und endpunkt findet. Hast du dir zu dem Thema schonmal gedancken gemacht?
Bei der Methode der kleinsten quadrate kann man ja z.B. diesen Faktor r bestimmen, der den Grad der liniaren Abhängigkeit angibt (wertebereich -1;1). Damit bestimmt man mit welcher wahrscheinlichkeit eine Ansamlung von Punkten zu einer Linie gehören. Ich möchte also irgendwie eine Ansamlung von Punkte anschauen und gucken, ob das hinzufügen des nähsten Punktes dazu führt dass r unter dem Threshold liegt. Wenn das der fall ist darf der Punkt zu der Ansammlung hinzugefügt werden, sonst nicht. Nachdem man dann mehrere ansamlungen hat kann man für jede einzelne mit linearer regression eine Linie berechenen und so hoffentlich bessere ergebnisse als die hough transformation erreichen.
Mir fehlt vor allem die zündende Idee, in welcher Rheienfolge man die Punkte im Bild durchlaufen soll, wie man an die erste ansammlung von Punkten kommen soll und wie man das programm laufzeittechnisch gut designen kann.
mare_crisium
14.05.2008, 09:08
Hi, tompcat,
danke für die alogrithmischen Blumen :-)!
Interessante Idee, die Du da vorschlägst. Ich melde mich, wenn ich meine Lösungsidee besser formulieren kann.
Ciao,
mare_crisium
hi mare crisisum
Würde mich echt interesieren, was du für lösungsansätze hast. Ich stecke momentan woanders fest. Annahme wir hätte ein binarisiertes Bild, aus dem wir die Linien bestimmen wollen. Dann könnte man das Kartesische Produkt zu all den Punkten ausrechnen die weiß sind (vectoriell). Und trotz diesem Aufwand O(2^n) wird es schwer daraus die wahrscheinlichen linien zu bestimmen. Der Faktor der linearen abhängikeit, wird dann groß, wenn zufälligerweise 3 Punkte genau in einer Linie stehen. Wenn man aber eine Linie aus 40 Punkten erkennen möchte ist die wahrscheinlichkeit, dass man sie findeted sehr gering mit dem Faktor der linearen abhängikeit. Man könnte natürlich auch irgendwie die anzahl der Punkte irgendwie mit in die rechnung aufnehmen, aber irgendwie erscheint mir das nicht als eine schöne lösung / hab noch keine formel gefunden, die die anzahl und die Lineare abhängigkeit in ein schönes Verhältniss zueinander legt.
Hab mich mal mit einem Mathematiker unterhalten, der die idee hatte das karthesische produkt auf sagen wir mal 7 elemente zu beschränken, aus allen Tupeln die lineare Abhängigkeit zu berechen, dann die Regresionsgerade zu ziehen, gucken welche punkte sonst noch gut passen, indem man sich den Abstand zur geraden ansieht, neue regressionsgerade berechnen.... und den Vorgang solange wiederholen, bis keine Punkte mehr dazukommen. Hier könnte man probleme erhalten, wenn eine linie stark verauscht ist und die andere nicht, jedoch ist das ein fall, der nicht alzuwahrscheinlich vorkommt, also eventuell brauchbar. Was hast du dir überlegt?
schöne Grüße
Tompcat
mare_crisium
20.05.2008, 10:50
Guten Morgen, tombcat,
ich hab' in der Zwischenzeit auch 'rumgewühlt. Als pdf angefügt findest Du eine Testauswertung. Vorgegeben habe ich die parallelen Geraden 1 und 2, jeweils mit Startpunkt, Richtungsvektor und Länge (Vorgaben in den hellgelb unterlegten Tabellenfeldern). Daraus habe ich mit dem Zufallsgenerator "verrauschte" Testpunktwolken erzeugt (rote Rauten und dunkelblaue Quadrate).
1. Schritt: Auswertung aller Punkte: Aufpunkt ist der Gesamt-Schwerpunkt (grünes Dreieick, rechtsweisend). Die Ausgleichsgerade (gelbe Linie) ist erwartungsgemäss, eine schlechte Anpassung.
2. Schritt: Auswertung pro Quadrant: Die Quadranten sind folgendermassen nummeriert: Unten links ist Q0, u.re. Q1, o.li. Q2 und o.re. Q3. Für jeden Quadranten ist der Schwerpunkt markiert (Dreiecke, linksweisend). Auf den Quadranten Q0, der die komplette Gerade 1 umfasst, habe ich dann mein Anpassungsverfahren angewendet. Die Ergebnisse sind in den hellgrün unterlegten Tabellenfeldern aufgeführt, die Punkte auf der Ausgleichsstrecke sind dunkelgelbe Rauten.
Fazit: Wenn eine Punktwolke auf ein eigenes, abgrenzbares Gebiet beschränkt ist, dann kann man den Schwerpunkt des Gebietes als Aufpunkt nehmen und mit guter Genauigkeit eine Gerade anpassen. Die Länge der Strecke ist durch den maximalen Abstand zwischen den Lotfusspunkten von den beteiligten Punkten auf die Ausgleichsgerade gegeben. Auch das haut mit meiner Anpassung alles ganz gut hin :-).
Jetzt wäre die wichtigste Aufgabe erstmal, ein gutes Verfahren zu finden, mit dem man prüfen kann, ob sich Teilwolken in Gebiete abgrenzen lassen und die Abgrenzung durchzuführen. Das müsste man eigentlich auf dem Flächen-Viertellungsverfahren aufbauen können. Damit ist dann noch nicht sicher, ob jedes Gebiet nur einer Geraden entspricht. Vielleicht kann man auch pro Quadrant eine Anpassung machen, und dann prüfen, ob sich die Strecken aus benachbarten Quadranten ohne Verschlechterung der Standardabweichung zu einer Strecke zusammenfügen lassen.
Den Vorschlag mit dem kartesischen Produkt muss ich mir noch überlegen. Eine allgemein gültige Methode zum Aufzählen aller möglichen Teilwolken mit mehr als 2 Punkten habe ich, nur wird die Anzahl der Teilwolken sehr schnell sehr gross (Anzahl = 2^N-N^2+N-1 bei insgesamt N Punkten).
Ciao,
mare_crisium
P.S.: Der beste Zusammenhang zwischen der Anzahl Punkte und der Güte der Anpassung ist die Standardabweichung.
Edit01: Habe die Anpassungen in allen 4 Quadranten in das Diagramm und die Ergebnistabelle eingetragen.
Edit02: Anhang gelöscht wg. Upload-Quota
Ebefalls einen guten Morgen mare!
Danke, dass du so engagiert bist. Ich hätte nicht erwartet, dass jemand einfach etwas programmiert um die probleme eines anderen zu lösen. In spätestens 1-2 monaten fange ich auch an zu programmieren. Ich muss noch bis dahin einem automomen Hubschrauber beibringen durch 2 torbögen zu fliegen, die nur durch eine stereokammera erkannte werden sollen. Ich mach zur zeit meine Diplomarbeit am DLR. Du scheinst dich ja ziemlich gut auszukennen. Darf ich fragen was du so machst?
Die idee mit dem Lotfuspunkt ist mir auch schon gekommen. Ich habe in der zwischenzeit einen algorithmus geschrieben, der in der Lage ist einzelne Linien sinnvoll zu einer ganzen zusammenzufassen (sieht fast menschlich aus) und auch die Lotfuspunkte benuzt um den start / endpunkt der Ausgleichslinie zu bestimmen. Das passt ziemlich gut zu deiner Idee mit den quadraten, da dort auch nur Teillinien gefunden werden. Hatte mir auch schon Gedanken gemacht mit einer Maske durch das Bild zu rennen und wenn eine Linie gefunden wurde, ihr in ihre Richtung zu folgen und weiterzuzeichnen. Bei dem Gedancken bleibt natürlich das problem, wenn man ein "X" im Bild findet und die maske genauso groß ist, wird keine linie gefunden. Mit der Maske ist es auch laufzeittechnisch kein großes problem, da wenn man mit der Maske ein Pixel weiter nach rechts geht kann man einfach die ganz Linken Pixel aus der rechnung für die Regression rausrechnen und die neuen Pixel rechts draufrechnen, so spart man sich die in der Mitte neu zu brechnen (die idee hab ich von einem Ing. hier am standort). Mit der Maske hätte man auch die möglichkeit nach lokalen Maxima zu suchen, wenn man sich die Lineare abhängikeit anschaut pro maske und von dort aus weitersuchen (da man sonst eine schier unendliche Menge an linien hat (pro Pixel eine weitere)).
Mein großtes problem ist es immernoch eine sinnvolle Rheienfolge zu finden in der man das bild/die Pixel/ die Vektorpunkte durchläuft.
Bei deiner Idee mit den Quadraten treten leider ähnliche probleme auf, wie beim heutigen Hough. Wenn eine verrauschte linie z.B. genau zwischen den quadraten verläuft wird sie halb im rechten und halb im Linken gefunden. Das könnte dazu führen, dass sie unter diesen Umständen nicht über den Schwellenwert kommt und somit nicht erkannt wird. Bei hough gibt es auch solche probleme, fall eine Linie genau zwischen dem diskretisiertem winkelintervall verläuft. Und das war eigentlich meine hauptmotivation sich gedancken über eine alternative zu machen. Ich würde gerne mit dir zusammen noch etwas noch besseres finden.
bis demnähst
tompcat
P.S. Du kannst gerne weiterhin davon ausgehen, dass du die Punkte in Vektorschreibweise vorliegen hast, dass ist ja niemals ein problem das umzuformen
mare_crisium
21.05.2008, 14:52
Mahlzeit, tompcat,
ich bin auf dem Sprung, übers Wochenende wegzufahren, deshalb nur ein kurzer Hinweis zur Aufzähl-Reihenfolge der Vektoren:
1. Möglichkeit: Index := x + Bildbreite*y
2. Möglichkeit: x und y Koordinate binär darstellen (geht am besten, wenn beide vom Typ Integer sind). Daraus den Index erzeugen, indem Du immer abwechselnd, aber der Reihe nach, je ein Bit von x und dann eins von y nimmst. Das ist unter dem Namen "bit interleaving" ein weit verbreitetes und sehr praktisches Indizierungsverfahren für Vektordaten (siehe z.B. c't Nr.1, 2001, S. 174).
Kannst Du Deine Datei bitte zippen? Für das rar-Format habe ich keinen Dosenöffner :-).
Ciao,
mare_crisium
Hab die bilder in ein jpg gepackt. Viel spaß am wochenende. Ich fahre auch weg.
bye
mare_crisium
26.05.2008, 12:52
Na, schon wieder da, tompcat?
Danke für die JPGs. Das sieht doch schon sehr ordentlich aus! Sollen die beiden Fähnchen links am Mast nicht auch erfasst werden? Warum ist der kleine Strich unten einmal links und einmal rechts - wertest Du Stereobilder aus?
Im Anhang findest Du meine Idee zur vollständigen Streckensuche in der Punktwolke :-). Wie Du siehst, ufert die Geschichte mit wachsender Punktezahl sehr schnell aus. Es ist aber die naheliegendste Methode, um alle möglichen Strecken in einer Punktwolke zu erfassen und in Hinblick auf die Qualität der Anpassung zu sortieren. Natürlich gibt's dazu auch Varianten: Man kann z.B. die jeder Gerade zugeordnete Binärzahl auch als Graycode ausdrücken und erhält so eine Nummerierung, in der sich jede Gerade von der nächsten in höchstens einem Punkt unterscheidet usw.
Ciao,
mare_crisium
Edit: Anhang gelöscht wg. Upload-Quota
Hi Mare
Danke für die schnelle Antwort. Der kleine Strich unten wandert nur, weil du nicht genug reingezoomt hast. Bei mir sind im unteren bild 4 Striche. Die 2 Stangen und 2 mal rauschen. Ja wir benutzen eine stereo Kamera, doch in dem Bild werte ich nur das Bild der linken Kamara aus. Die Kamera an sich mit ihrer elektronik berechnet uns aus den Stereo Bildern ein recht gutes Tiefenbild. Ist ziemlich praktisch.
Die Fähnchen werden bei mir nicht erkannt, weil meine selbst entwickelte Vorverarbeitung nach sich gegenüberstehenden Grauwertkanten sucht, die nicht weiter als 6 Pixel entfernt sein dürfen. Wenn man diese Grenze hochschraubt werden die Fahnen selbstverständlich auch mit erkannt. Das Problem ist, dass diese Fahnen genau den Grauwert des Bodens haben und somit zu 2/3 nicht zu entdeckt sind. Wenn du möchtest kann ich dir das Komplette Bild auch online stellen.
Bei deinen pdf Dokumenten könnte man auf die idee kommen du seiest Mathematiker was hast du studiert?
Kann leider dein pdf nicht vollständig verstehen... was ist "f von n" und "p von n" direkt in der ersten zeile.
Wie kann eine funktion durch weglassen oder hinzufügen eines x unstetig werden?
Wenn das geklärt ist versuche ich den Rest nocheinmal zu verstehen sonst frag ich nochmal.
Gruß
Tompcat
so.melde mich auch mal wieder, heir ist ja richtig was passiert in letzter zeit.
mein problem habe ich jetzt erst mal anders gelöst ( eine messung machen, dabei die phase schieben, dann kann man aus dem Feld die Zernikekoeffizienten berechenen und daraus die Verschiebung).. ist allerdings noch zimlich Zeitaufwendig, vorallem die berechnung der Zernikes, desswegen werde ich das nochmals mit der oben beschriebenen Methode versuchen... Ist zwarkomplizierter, aber denke dann wird es schneller..
habe grade nur keine zeit, weil ich am Wohnung renovieren bin und umziehen muss..
mare_crisium
27.05.2008, 21:15
Na, Goara,
das hört sich aber nach mega-stress an ... hoffentlich nur ein Umzug innerhalb Deutschlands. - Bin natürlich interessiert, ob die Methode funzt.
Viel Glück,
mare_crisium
ja is nur 20km weiter , zieh mit meiner Freundin zusammen :)
Glückwunsch! Das hab ich auch schon hinter mir :-)
mare_crisium
29.05.2008, 12:13
Au weia, tompcat,
ich habe Deine Fragen noch nicht beantwortet! - Also: Die p_n sind die Parameter der Anpassung, die f_n sind die Funktionen, die mit den Parametern multipliziert werden.
Als Beispiel nimm' die klassische Geradenanpassung (lineare Regression): Da sind die Parameter p_n
p_1 = Steigung und p_0 = Achsenabschnitt.
Die Funktionen f_n sind:
f_1 = x und f_0 = 1
Bei manchen Aufgaben ist es sinnvoll, statt der einfachen linearen Funktion x und der Konstanten 1 andere Funktionen zu verwenden, z.B. Sinus und Kosinus. Was dann herauskommt, ist die Fourieranalyse... Aber lassen wir das ;-)!
Die Minimierungsmethode mit dem Differenzieren nach den Parametern p_n funktioniert aber nur, weil der alte Gauss (war 18, als er die Methode 1795 erfand) so genial war, sie genau so zu formulieren, dass sie immer differenzierbar ist und immer zu Gleichungen mit dem Ergebnis Null führt, in denen die Parameter p_n nur als einfache Faktoren wieder auftauchen.
Du hast eine etwas erweiterte die Aufgabe gestellt, nämlich: Lege eine Funktion (in Deinem Fall eine Gerade) so durch die Punktwolke, dass sich die Abweichungssumme durch das Hinzunehmen eines Messpunktes um weniger als z.B. die Standardabweichung ändert. Die Lösung dieser Aufgabe liefert nicht nur die Anpassungsparameter, sondern auch noch den Anfangs- und den Endpunkt der Anpassung.
Beim Zufügen eines Messpunktes ändert sich die Abweichungssumme im allgemeinen sprunghaft, es sei denn, der neue Punkt hätte die Abweichung Null. Du kannst das leicht ausprobieren, indem Du die Anpassung mit einem Satz Punkten durchführst. Dann nimmst Du einen weiteren Punkt dazu und rechnest damit nochmal die Anpassung aus. Anschliessend wirst Du festellen: Durch das Zufügen des Punktes hat die Abweichungssumme einen Sprung gemacht. Funktionen mit solchen Sprüngen kann man nicht differenzieren. Deshalb kann man diese neue Fragestellung mit dem eleganten Differentiationsverfahren von Gauss nicht lösen. Das ist das Problem, auf das ich in dem ersten Abschnitt hinweisen wollte.
Als einzige Möglichkeit fiel mir nur diese ein: Für alle verschiedenen Kombinationen von Punkten die Anpassung durchführen, die Ergebnisse nach dem Wert der Abweichungssumme sortieren und dann die mit den geringsten Abweichungssummen herauspicken. Dazu muss man die Kombinationen aber nummerieren, damit man nach der Sortiererei noch weiss, zu welcher Punktkombination der Wert gehört. Und wie man das hinkriegt, ist der Gegenstand des zweiten Abschnitts.
Bei dem, was wir hier treiben, geht's mir nur darum, den Lesern zu zeigen, was man mit der guten alten Küchenmathematik, wie man sie auf dem Gymnasium lernt, so alles anfangen kann. Wenn man mit Geduld und Zuversicht ein bisschen damit herumspielt, kommt man nämlich erstaunlich weit. Es kann sogar ziemlich spannend werden und Spass machen. Schliesslich sitzt einem dabei auch kein Lehrer im Nacken, der morgen die Hausaufgaben kontrollieren will ;-).
Alles klaro?
Ciao,
mare_crisium
mare_crisium
29.05.2008, 22:26
tombcat,
Deine Bemerkung
...weil meine selbst entwickelte Vorverarbeitung nach sich gegenüberstehenden Grauwertkanten sucht, die nicht weiter als 6 Pixel entfernt sein dürfen. Wenn man diese Grenze hochschraubt werden die Fahnen selbstverständlich auch mit erkannt. Das Problem ist, dass diese Fahnen genau den Grauwert des Bodens haben und somit zu 2/3 nicht zu entdeckt sind.
bringt mich auf die Idee, dass Du möglicherweise für die Vorverarabeitung noch keine Laplace-Operatoren einsetzt??? Guck' Dir doch mal das angehängte Dokument an (ich weiss nicht mehr wo ich's her habe) oder google mal nach "Sobel-Filter" oder "Sobel-Operator".
@goara,
auch Glückwunsch meinerseits. Ja, ich bin auch zu meiner Freundin gezogen, die wohnte damals aber im Ausland.
Ciao,
mare_crisium
Edit: Anhang gelöscht wg. Upload-Quota
Hi Mare
Danke für den Hinweis, aber ich hab schon viele Vorlesungen gehört, die sich damit befassen. Ich habe ganz bewust nur die kleinen Balken erkennen wollen, weil dort das tiefenbild besser ist. Meine Vorverarbeitung sucht gegenüberliegende Kanten und geht vom Sobel-bild aus und sucht von jedem Punkt aus, der über dem Threshold liegt nach einem weiterem Punkt, in Gradientenrichtung um einen Punkt zu finden der eine entgegengesetzte GradientenRichtung hat und ebenso über dem Threshold liegt. Klingt wahnsinnig kompliziert ist es aber nicht und liefert saugeile Ergebnisse. Funktioniert leider nur sehr effizient, wenn nicht sehr weit nach dem Gegenüberliegendem punkt gesucht wird. Und in den Bildern sind somit die Balken ein Leuchtfeuer für den hough.
So jetzt hab ich genug zeit mir deine Idee durchzulesen. Ich lass dann von mir hören
Tompcat
mare_crisium
02.06.2008, 21:20
Hi Tompcat,
danke für die erläuternden Bilder und den Text; mir war nicht klar, wie tief Du Dich schon eingearbeitet hast - jetzt hab' ich kapiert, was Du machst. Im Grunde suchst Du nach einem benachbarten Spiegelbild des Bildbereichs um die Sobelkante. Sieht ein bisschen nach einem modifizierten optical flow aus ;-)?
Ciao,
mare_crisium
mare_crisium
06.06.2008, 12:20
Hi, tompcat,
ich habe hier die neue Version "Punktstrecke_V05.pdf" angehängt. Darin ist der Trick mit der Nummerierung der Vektorkombinationen, der ein bisschen gewöhnungsbedürftig ist, an einem Beispiel erklärt. Ausserdem ist der Fehler in der ersten Formel für r_0 korrigiert: Es muss durch I dividiert werden, nicht durch K.
Ciao,
mare_crisium
Edit: Anhang gelöscht wg. Upload-Quota
Hi. Also mitlerweile verstehe ich nun den großteil. Bin natürlich noch nicht davon begeistert, dass die anzahl der Vergleiche exponentiell zunimmt. Ich hoffe irgendewas zu schaffen, was einfach das manschliche Verstädniss von Linien nachahmt. Das geht bei uns auch irgendwie in echtzeit (vieleicht weil wir immer nur den kleinen ausschnitt interprätieren, den wir in einem Augenblick sehen). Ich würde schon gerne mit diesem algorithmus durch ein hochaufgelöstes bild gehen und an die 500 Punkte auswerten.
Ich bin nicht sehr begeistert davon im vorhinein einen Radius zu benutzen um Punkte auszuschließen. Ich denke als mensch kannst du eine lange stark verauschte Linie genausogut erkennen wie eine wenig verauschte kleine linie. Der Radius würde dazu führen, dass man die stark verrauschte große linie nicht mehr erkennen würde. Leider weiß man nicht im voraus, wie lang und wie verauscht eine Linie nun wirklich ist. Ich denke da muss eine art gewichtung rein. Je mehr elemente für eine Linie stimmen umso mehr durfen sie auseinander sein. Das darf sich aber nicht zusehr hochschaukeln können.
hab aber noch eine Fragen:
Wieso gibt es 2^i unterschiedliche gewichtsvectoren?
Tompcat
mare_crisium
14.06.2008, 15:56
tja,
als mensch kannst du eine lange stark verauschte Linie genausogut erkennen wie eine wenig verauschte kleine linie
Sehen und Erkennen ist für Menschen ein Vorgang, der weitgehend unbewussten abläuft und uns so unwahrscheinlich leicht fällt, dass es einem einfach nicht in den Kopf will, warum es dafür keinen simplen, eleganten Algorithmen gibt :-( . Es ist meines Wissens noch nicht einmal klar, nach welchen Kriterien die menschliche "Bildauswertung" dabei vorgeht. -
Ein paar Ideen habe ich noch, aber bis daraus ein Algorithmus geworden ist (wenn überhaupt), dauert das ziemlich lange :-). Ich bastele daran herum, zunächst einmal eine unverrauschte Strecke sauber zu erkennen.
Die Anzahl der Gewichtsvektoren entspricht der Anzahl aller Kombinationen von K Nullen bzw. Einsen. Weil das genau zwei verschiedene Symbole sind (0 und 1) ist die Gesamtzahl der Kombinationen 2^K. Wären es 3 Symbole (z.B. -1,0 und +1), dann wären es 3^K.
Ciao,
mare_crisium
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.