Forum: PC-Programmierung Canny-Filter Hysterese


von Sarah (Gast)


Lesenswert?

Hallo!

Ich bin gerade am Implementieren vom Canny-Filter und hänge bei dem 
Hysterese-Verfahren. Ich bekomme immer ein ganz schwarzes Bild. Ich 
denke es hat was mit den Schwellwerten zu tun. Kann man da nun 
willkürlich irgendwelche Werte eingeben oder muss ich irgendein 
Verfahren für die Schwellwertbestimmung beachten?? Rumgespielt habe ich 
auch schon mit den Schwellwerten jedoch immer noch dasselbe Ergebnis... 
Bitte dringend um Hilfe und danke schonmal! :(

Grüße
Sarah

von Candy (Gast)


Lesenswert?

Hallo Sarah,

es wäre wirklich super, wenn wir noch zusätzliche informationen bekommen 
würden, z.b. was für eine programmiersprache verwendest du, ....

lg
Candy

von apr (Gast)


Lesenswert?

Die Sprache ist meiner Meinung nach ein unwichtiges Detail: Wichtiger 
wären wie sind deine Daten organisiert? Welche Algorithmen benutzt du? 
Was ist wirklich das Problem? Wenn bei der Binarisierung nur schwarze 
Bilder rauskommen ist die Schwelle zu gering oder es gibt keine Kanten 
im Bild.

Also: teste es. Benutze (synthetische) Bilder und überlege was du 
erwartest und schau dir an was raus kommt.
Wenn dein Problem wirklch nur die Schwellwerte sind, dann hast du ja 
schon ein Gradientenbetragsbild (oder kannst es wohl relativ leicht 
erzeugen?) -- schau das an, dann hast du ja für das einzelne Bild 
Schwellwerte zum Testen.

von Sarah (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Danke euch erstmal für die Antworten... Ich habe herausgefunden 
dass meine Non-Maximum-Supression gar nicht richtig funktioniert und ich 
denke dass mein Hystere-Verfahren deshalb ein schwarzes Bild ausgibt. 
Nun hat sich die Fragestellung geändert :S

Und zwar, ich bekomme nach der Non-Maximum-Supression ein Bild mit 
einigen Kanten die nicht "ausgedünnt" werden. Ich habe schon alles 
mögliche probiert und bekomme aber nicht raus, warum es nicht 
funktioniert.

Ich habe mal einen Auszug aus meinem code angehängt. Kann mir vielleicht 
jmd bitte bestätigen, dass es stimmt bzw. auf einen Fehler 
hinweisen....?

von Sarah (Gast)


Lesenswert?

Ach ja, sorry wegen den Details....

Ich programmiere in Java und mein Programm ist folgendermaßen aufgebaut: 
Ich führe zunächst eine Glättung des Bildes mit einem 3x3 - Gaußfilter 
durch und erzeuge anschließend ein Gradientenbild mit dem Sobel-Filter. 
Dann berechne ich die Kantenrichtungen, mittels denen ich dann in der 
Non-Maximum-Supression weiterarbeite. Vielleicht könnte es auch daran 
liegen dass ich irgendetwas bei der Berechnung der Kantenrichtungen 
falsch mache... Wie würdet ihr denn vorgehen?

von Karl H. (kbuchegg)


Lesenswert?

Sarah schrieb:

> falsch mache... Wie würdet ihr denn vorgehen?

Ein synthetisches 5*5 Pixel Einfachst-Bild durchjagen, von dem ich im 
Vorfeld genau weiß, was in jeder Zwischenstufe rauskommen muss.
Und da ich das weiß, dumpe ich mir die Zwischenstufen und seh nach, ob 
auch tatsächlich das Erwartete rauskommt.

Das blödeste was du tun kannst: Ein Bild von deiner Digitalkamera mit 
4096*2048 Pixel durchjagen, am Ende feststellen, dass nichts 
funktioniert und in Panik verfallen, weil du nicht weißt, wo du mit 
Fehlersuche anfangen sollst.


Debuggen bedeutet meistens, sich selbst einen möglichst einfachen, 
reproduzierbaren Fall herstellen, der den beobachteten Fehler noch 
zeigt. Und mit diesem Fehlerfall wird dann das Verfahren durchleuchtet, 
wobei (wenn man nichts anderes weiß) erst mal alles in Frage gestellt 
wird. Es gibt kein Subsystem, welches als Fehlerverursacher sofort 
ausgeschlossen wird. Erst nachdem man nachgewiesen hat, dass es dieser 
Teil nicht ist, scheidet er aus der Liste der Kandidaten aus.

von Sarah (Gast)


Lesenswert?

Das Problem hat sich behoben! Vielen Dank euch! :D

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.