Antwort von
nach 2 Stunden
hilfreich
Re: Geraden suchen (Dig.Bildverarbeitung)
Hi,
Folgendes Problem:
Ich habe ein Grauwertbild (8 Bit) und
weiß,
daß sich darin zwei Geraden verstecken.
Es kann u.U. auch nur eine sein, aber
nicht mehr. Eine davon startet im
Mittelpunkt des Bildes. Das Problem ist
nun, die Länge, und die Winkel beider
Linien zu finden. U.u. ist das Bild
verrauscht und die Linien sind nat. auch
nicht unendlich dünn.
Ich suche einen Algorithmus, der das
Problem möglichst schnell (geringer
Rechenaufwand) und nat. sicher/genau
löst.
Das mit dem geringen Rechenaufwand koennte schwierig werden ;)
Ich hoffe, Du kannst programmieren, sonst hilft Dir das nicht viel:
Das Bild muss in mehreren Schritten abgearbeitet werden. Als erstes wuerde ich einen (nicht zu breiten!) Tiefpassfilter drueberschicken (Binominalfilter sind schnell).
Dann muessen die Linien rausgeholt werden. Dazu eignet sich der Linienfilter des Canny-Kantenfilter (schau mal im I-Net nach John Canny edge detect).
Das Resultat ist ein Schwarz-/Weissbild in dem sich die Linien finden (wenn Du nicht weisst, ob die Lienen dunkel auf hell sind oder umgekehrt, muss noch ein Schritt eingeschoben werden um das rauszufinden).
Der Canny-Algorithmus hinterlaesst nicht unbedingt Linien der Staerke ein Pixel. Zum ausduennen gibt es einen kleinen feinen Algorithmus, weiss nicht mehr von wem der ist, kann ich Dir aber notfalls mailen (den C-Code).
Als naechstes muessen die Loecher geschlossen werden, die der Canny-Algorithmus hinterlassen kann. Dazu gibt es auch Loesungen im Netz. Ich habe auch eine (allerdings ziemlich simmple = nicht perfekte) Loesung, die ich Dir Schicken kann. Beide Probleme (Ausduennen und Luecken schliessen) lassen sich auch mit dem Programm Thin-Link loesen. Das habe ich aber nicht zum laufen gekriegt.
Mein Code erfasst beim linken gleich alle Pixel einer Linie (Thin-Link macht das glaube ich auch) und dann kannst Du Deine Linien nach bestimmten Kriterien daraus holen ("Geradigkeit", Laenge usw).
Ich dafuer zwar Code, aber der muesste fuer Deine Zwecke umgeschrieben werden, da es sich um einen Kantenfilter (und SEHR viel mehr) handelt, mit dem Du nichts anfangen kannst, da ein Kantenfilter Dir aus jeder Linie zwei machen wuerde. Wenn Du einigermassen programmieren kannst und Dich mit Bildverarbeitung etwas auskennst, kannst Du das in ein zwei Wochen hinkriegen ;)
Wenn das fuer Dich interessant klingt, mail mich mal an oder so.
Gruss
Thorsten