View Full Version : [FRAGE] - Bsp4a
sodala, wir haben jetz alles durchgekaut von punkt 1-5 und kommen auf folgendes ergebnis bei BildA.jpg (nit erschrecken, kann sein, dass schwarz und weiß vertauscht san, aber des sollt ja koa rolle spielen...)
habts ihr des a so? oder lieg i da irgendwie daneben?
Hm, die Kanten sollten schon "durchgehender" sein. Kann sein, daß beim Verdünnen etwas schiefgelaufen ist.
Ihr müßt beachten, daß Matlab ein anderes Koordinatensystem für Bilder hat, d.h. das gilt auch für die Gradienten.
LG
Sebastian (GDBV-Tutor)
Apropos:
Welche Punkte soll man jetzt in die myedge Funktion packen, 2 - 5?
Lg
Spite
Frage zur Angabe (siehe oben):
Muss man alle Punkte von 2 - 5 in die myedge funktion Packen, oder soll man zB 1 - 4 in der Bsp4.m und die Punkte 2-5 in die myedge-Funktion packen??
Muß zugeben das ist nicht so ganz klar für mich...., denn u.U. muss man dann ja 2-4 ja doppelt einbaun.... (wegen den verschiedenen Ausgabe-Anforderungen von BildA und BildB oder?
Lg
Spite
Ja, die Punkte 2-5 müssen in myedge.
Schreibt es halt zweimal, macht ja nichts.
LG
Sebastian (GDBV-Tutor)
@brösel:
Ich denke ich weiß, welchen Fehler du machst:
vertausche mal den horizontalen und den vertikalen Filter, wenn du deine Nachbarpixel bestimmst, denn den Fehler hatte ich auch, daß ich das hatte:
deltax = round(IHor(j, i)/IGradient(j, i));
aber das Brauchte:
deltax = round(IVer(j, i)/IGradient(j, i));
Wobei IVer mein mit dem [-1 0 1; -1 0 1; -1 0 1] Filter conv2-tes Bild ist, und IGradient der Gradient vom Bild....
Bei mir schaute es auch so aus, jetzt passt glaube ich.
Ich hatte jetzt ein anderes Problem:
Ich habe Hilfsvariablen, die den Index meiner beiden Nachbarn angibt auf int8 gekastet, und es wurde immer nur links oben ein kleiner Bereich bearbeitet.....
Siehe da:
ein cast auf int16 brachte die Lösung ;)
Lg
Spite
PS:
bei mir schauts jetzt so aus "myedge(bildA, 0.7, 128)", wie im Anhang, aber beim BildB habe ich keine Ahnung, wie ich die Parameter wählen soll....
ich kapier irgendwie nicht wie dieser algorithmus (bzw die formel) gemeint is - kann man das irgendwo genauer nachlesen?
mfg, brain
edit: ok - einfach genauer die angabe lesen :)
d.h. die Funktion myedge stellt nur den Kantenoperator zur Verfügung, wird aber im MATLAB-Code niemals aufgerufen -> hab ich das richtig verstanden?
Noch eine Frage... in der Angabe steht ja
INPUTS [...] SIGMA [...] the size of the filter is chosen automatically based on SIGMA.
Wie soll man das realisieren? (if - else? :confused: ) Die fspecial-Funktion stellt das ja glaub ich nicht zur Verfügung.
So, hab jetzt alles gemacht. Im Anhang mein Ergebnis - kann das so stimmen?
lg, brain
d.h. die Funktion myedge stellt nur den Kantenoperator zur Verfügung, wird aber im MATLAB-Code niemals aufgerufen -> hab ich das richtig verstanden?
Noch eine Frage... in der Angabe steht ja
Wie soll man das realisieren? (if - else? :confused: ) Die fspecial-Funktion stellt das ja glaub ich nicht zur Verfügung.
ok - das würd mich auch interessieren :)
So, myedge() ergibt bei mir dieses Ergebnis (Anhang) für Bild B und ein bißchen Spielen mit den Parametern.
sieht das gut aus?
mfg, brain
d.h. die Funktion myedge stellt nur den Kantenoperator zur Verfügung, wird aber im MATLAB-Code niemals aufgerufen -> hab ich das richtig verstanden? (...)
jep, myedge() stellt den entwickelten operator in einer funktion zur verfügung. d.h. du solltest myedge ein bild + die 2 parameter übergeben können und die funktion soll ein binäres kantenbild zurückgeben.
Wie soll man das realisieren? (if - else? :confused: ) Die fspecial-Funktion stellt das ja glaub ich nicht zur Verfügung.
bzgl. fspecial: h = fspecial('gaussian', hsize, sigma) (aus der matlab hilfe) wobei hsize die filter größe ist.
für euch gilt dann: gauss = fspecial('gaussian', 6*sigma+1, sigma);
mit mesh() könnt ihr den filter (z.b.: mesh(gauss)) als 3D plot ausgeben und so überprüfen ob die größe richtig gewählt wurde.
grüße markus
So, myedge() ergibt bei mir dieses Ergebnis (Anhang) für Bild B und ein bißchen Spielen mit den Parametern.
sieht das gut aus?
mfg, brain
jep, das schaut richtig aus...
grüße markus
für euch gilt dann: gauss = fspecial('gaussian', 6*sigma+1, sigma);
aber das funktioniert ja nur bei ganzzahligen Sigmas, denn hsize muss ja ein integer sein...
klaustaler
18-11-2007, 20:26
hab ich irgendwo in der matlab hilfe gefunden:
n = ceil(SIGMA*3)*2+1;
he, könnte mir vllt. jemand etwas genauer erklären wie man beim 4a punkt 5 vorgehen sollte?? checke echt weder 5a,b od. c??
hilfreiche tipps/verweise/... sind gern gesehen :cool:!
danke
hab ich irgendwo in der matlab hilfe gefunden:
n = ceil(SIGMA*3)*2+1;
stimmt natürlich, tut mir leid das hab ich vergessen...
grüsse markus
beim punkt 5a;
wie mache ich dass das ich für jeden kantenpixel in die dx/b und dy/b richtung gehe bzw. wie ist das gemeint??
und was bedeutet es wird einfach zum nächsten der 8 Nachbarn gerundet??
Und in welchem Zusammenhang kommt der Winkel hierbei vor??
beim punkt 5a;
wie mache ich dass das ich für jeden kantenpixel in die dx/b und dy/b richtung gehe bzw. wie ist das gemeint??
und was bedeutet es wird einfach zum nächsten der 8 Nachbarn gerundet??
Und in welchem Zusammenhang kommt der Winkel hierbei vor??
an jeder Stelle/Kantenpixel hast Du ja einen Wert für b, dx und dy. (dx/b,dy/b) ist dann der normierte Gradientenvektor, d.h. der Gradientenvektor zeigt Dir auf den Nachbarn und der negative Gradient auf den anderen Nachbarn.
In der Regel ist (dx/b,dy/b) nicht ganzzahlig, deswegen einfach mit round() runden.
LG
Sebastian (GDBV-Tutor)
an jeder Stelle/Kantenpixel hast Du ja einen Wert für b, dx und dy. (dx/b,dy/b) ist dann der normierte Gradientenvektor, d.h. der Gradientenvektor zeigt Dir auf den Nachbarn und der negative Gradient auf den anderen Nachbarn.
In der Regel ist (dx/b,dy/b) nicht ganzzahlig, deswegen einfach mit round() runden.
LG
Sebastian (GDBV-Tutor)
... naja, ich bin total verwirrt! mir ist klar das ich das alles habe also b, dx und dy... nur weis ich jetzt nicht soll ich jetzt für das berechnete dx wider dx/b und für das dy das dy/b nehmen und ausrechnen also pixel für pixel, oder was auch immer... oder ist da was anderes durch das schauen sie sich...
naja, bevor ich weiter nerve werde ich mir wieder das skriptum vor die augen führen und versuchen aus iregendwo iregendetwas darüber herauszulesen... vllt. wirds mir dann klarer.. aber bis jetzt, heavy :shinner:
danke!!
Schau Dir mal den Theorie-Teil an, v.a. Kapitel 4.2 "Non-Maximum Unterdrückung". Diese Methode zum Verdünnen wird nämlich auch beim Canny Edge Detector verwendet und ist hier prima erklärt.
LG
Sebastian (GDBV-Tutor)
"Wenden Sie die Funktion auf BildB.jpg an und zeigen Sie sowohl das verdünnte als auch das unverdünnte Ergebnis."
-> ist damit gemeint, dass ich in E zwei Bilder zurückgeben soll?
wenn ja, wie funktioniert sowas?
// hat sich erledigt, habs schon herausgefunden.
vBulletin® v3.7.1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.