|
|
lens distortion: Bestimmung relevanter Kanten |
|
Hans Peter |
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 27.01.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 27.01.2013, 01:37
Titel: lens distortion: Bestimmung relevanter Kanten
|
|
|
|
|
Hallo liebes Forum!
Ich sitze nun schon seit einer halben Ewigkeit über folgendem Problem:
Ich möchte aus einem Bild die Linsenverzerrung herausrechnen. Eine einfache Kantendetektion mit Reduzierung der Kantenbreite auf einen Pixel bekomme ich hin. Jedoch hapert es bei der Umsetzung der Bedingung welche Kanten auch relevant zur Behebung der Linsenverzerrung sind. Ich habe eine Folgende Arbeit im Internet gefunden: http://www.cs.ait.ac.th/vgl/faisal/paper/JMIV-Paper.pdf (Relevanter Code steht auf Seite 5).
Hier wird beschrieben, dass nur Konturen mit mindestens 10 Pixeln Länge und Kreisbogen-Anordnung genommen werden. Doch wie realisiert man das in Matlab? Ich habe durch die Kantendetektion und die Binarisierung des Bildes nur 1 und 0 als Werte in meiner Bildmatrix. Aber wie kann man nur aus einzelnen Werten auf die Länge einer Kante schließen? Oder überprüfen ob es sich bei der Kante um einen Kreisbogen handelt?
Ihr würdet mir sehr mit einer Erklärung, einem Ansatz oder einer kurzen Lösung helfen!
Tausend Dank schon mal im Voraus
|
|
|
|
|
Hans Peter |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 27.01.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.01.2013, 21:26
Titel:
|
|
Ich habe ein Bild mit fisheye Verzeichnung.
Nun bin ich wie folgt vorgegangen:
>> bw=rgb2gray(im);
>> bi=edge(bw,'canny');
>> bi2=bwareaopen(bi,100);
Nach der Kantenerkennung möchte ich nun eine Kreiserkennung, um den Radius und den Kreismittelpunkt zu bestimmen, machen. Mit dem Befehl imfindcircles kann ich jedoch keine Kreise finden. Kann es daran liegen, dass ich die Kreise zu groß sind? Welchen anderen Befehl könnte ich nehmen?
Im Anhang befindet sich das kantendetektierte Bild.
Bitte helft mir!
Beschreibung: |
|
Download |
Dateiname: |
im.jpg |
Dateigröße: |
80.02 KB |
Heruntergeladen: |
960 mal |
|
|
|
Hubertus |
Forum-Meister
|
|
Beiträge: 1.034
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: Hamburg
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.01.2013, 09:07
Titel:
|
|
|
|
Hans Peter |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 27.01.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.01.2013, 12:45
Titel:
|
|
Ahh okay, hier funktioniert es allerdings auch:
http://www.mathworks.de/products/im.....ng/images/ipexradius.html
Was ich jedoch machen möchte, ist weniger eine komplett lens distortion oder undistortion auf mein bild anwenden, als viel mehr nur die für die Verzeichnung relevanten Kanten extrahieren und deren Funktion herausfinden. Dabei reichen 3 durch lens distortion gebogene Kanten. Das erste Problem wäre also die relevanten Kanten zu filtern. Das Zweite, die Funktionen der gefilterten Kanten herausfinden.
Gibt es zb einen Befehl welcher in meiner binären Kanten-Bildmatrix plötzliche Richtungswechsel herausfiltert? dass Praktisch nur noch lange, leicht gebogene Kanten übrig bleiben, in der sich die Linsenverzerrung deutlich zeigt.
|
|
|
Hans Peter |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 27.01.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.01.2013, 12:46
Titel:
|
|
Ahh okay, hier funktioniert es allerdings auch:
http://www.mathworks.de/products/im.....ng/images/ipexradius.html
Was ich jedoch machen möchte, ist weniger eine komplett lens distortion oder undistortion auf mein bild anwenden, als viel mehr nur die für die Verzeichnung relevanten Kanten extrahieren und deren Funktion herausfinden. Dabei reichen 3 durch lens distortion gebogene Kanten. Das erste Problem wäre also die relevanten Kanten zu filtern. Das Zweite, die Funktionen der gefilterten Kanten herausfinden.
Gibt es zb einen Befehl welcher in meiner binären Kanten-Bildmatrix plötzliche Richtungswechsel herausfiltert? dass Praktisch nur noch lange, leicht gebogene Kanten übrig bleiben, in der sich die Linsenverzerrung deutlich zeigt.
|
|
|
Hubertus |
Forum-Meister
|
|
Beiträge: 1.034
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: Hamburg
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.01.2013, 13:36
Titel:
|
|
Also, das Beispiel ist gut gemacht. Aber alleine wird der Radius und Mittelpunkt auch nicht gefunden. Du gibst 3 Variable vor und wenn man im Bild die Grauwerte innerhalb des Kreises angleicht,wird der Kreis auch nicht erkannt. Beide Werte werden auch nicht gefunden, wenn das Kreissegment verformt wird. Es muss wohl ein exakter Kreis sein! Im Moment habe ich für deine anderen Fragen noch kein Bespiel. In ähnlichen Fällen wird immer die Hough-Transformation angewendet - kenne mich da leider nicht aus, nur Beispiele gesehen.
Wenn ich etwas passendes finde melde ich mich.
|
|
|
Hubertus |
Forum-Meister
|
|
Beiträge: 1.034
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: Hamburg
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.01.2013, 14:16
Titel:
|
|
Bei deinem Bild fällt mir zunächst auf, dass sehr viel Doppelkontouren vorhanden sind. Die würde ich zunächst entfernen, um die Breiche zu isolieren, die du untersuchen willst. Ich habe das so gemacht:
Wenn das dir nicht weiter hilft, gebe einen kurzen Hinweis!
|
|
|
Hans Peter |
Themenstarter
Forum-Newbie
|
|
Beiträge: 5
|
|
|
|
Anmeldedatum: 27.01.13
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.01.2013, 15:44
Titel:
|
|
Ja, dankeschön, hat ein wenig geholfen.
imopen macht in deinem Code quasi eine Kantenglättung, oder? Was ich mir überlegt hatte, war eigentlich eine Funktion, die einen schnellen Richtungswechsel der Kantenstrukturen in der Bildmatrix erkennt und diese dann heraus filtert. Oder eine Funktion, die die kreisförmige Darstellung in der Realität gerader Kanten nutzt, um daraus die Kanten herauszufiltern welche für die Linsenentzerrung relevant sind.
Im Anhang nochmal das originale Bild.
Beschreibung: |
|
Download |
Dateiname: |
fisheye1.jpg |
Dateigröße: |
130.97 KB |
Heruntergeladen: |
885 mal |
|
|
|
Hubertus |
Forum-Meister
|
|
Beiträge: 1.034
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: Hamburg
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.01.2013, 15:54
Titel:
|
|
Meine Idee war, den oberen großen Kreisbogen auszuschneiden. Dann hast du ein Kreissegment, auf das man den Durchmesser errechnen kann. Mit "find" lassen sich alle schwarzen Pixel finden. find gibt dir einen 2-spaltigen Vektor zurück.
|
|
|
Hubertus |
Forum-Meister
|
|
Beiträge: 1.034
|
|
|
|
Anmeldedatum: 08.01.09
|
|
|
|
Wohnort: Hamburg
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.01.2013, 07:56
Titel:
|
|
Ich habe mir das Bild jetzt noch einmal genauer angesehen und versucht, mit CS6 die Verzeichnung zu begradigen. Da kommt kein sauberes Bild bei raus.Es müssen einzelne Bereiche mit unterschiedlichen Richtungsänderungen bearbeitet werden. Diese wiederum haben verzerrenden Einfluss auf andere Bildteile.
Ich denke, dass eine Fisheye-Aufnahme nichts mit einer Linsenverzerrung im Allgemeinen zu tun hat. Die Verzerrungen der Fisheye-Aufnahme sind in den Dimensionen zu groß. Die Linsenverzerrungen, die auch in Kameras heraus gerechnet werden, liegen in kleineren Dimensionen. Vielleicht ist dein Bild nicht der richtige Ansatzpunkt, zumal es für eine Fisheye-Aufnahme irgendwie asymmetrisch wirkt - ist es nur ein Bildausschnitt?
|
|
|
Phate |
Forum-Guru
|
|
Beiträge: 283
|
|
|
|
Anmeldedatum: 09.11.09
|
|
|
|
Wohnort: Stuttgart
|
|
|
|
Version: R2008b
|
|
|
|
|
|
Verfasst am: 22.02.2013, 12:19
Titel:
|
|
Hallo,
also wenn es nur darum geht die Linsenverzeichnung zu korrigieren, kann ich dir folgende Toolbox nahe legen:
http://www.vision.caltech.edu/bouguetj/calib_doc/.
Mit der Toolbox war es möglich starke Verzeichnungen die auch druch eine Fischaugenlinse erzeugt wurden in meinen Projekt zu kompensieren. Einziger Kritikpunkt ist, dass bei starker Verzeichnung die automatische Kantendetektion nicht funktioniert.
Falls du allerdings selbst einen Algorithmus schreiben bzw. umsetzten möchtest hilft dir das natürlich nicht weiter, auser als Vergleich zum Stand der Technik.
Viele Grüße
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|