MV1

8 posts in this topic

Posted

Hallo zusammen.

Langsam aber doch rückt der Abgabetermin für MV1 näher und ich habe schonmal die erste Frage, in diesem in Zukunft sicher sehr beliebten Thread ^^

--> Bei Punkt 2 (Kantenglättung) lasst man sich mit "fspecial" einen Sobel-Filter für horizontale Kanten erstellen. Transponiert man den, hat man einen Filter für vertikale Kanten.

Jetzt kann ich beide Filter mit "imfilter" auf mein Ursprungsbild anwenden und bekomme je ein Bild mit horizontalen und vertikalen Kanten. Soweit so schön, aber wie bekomme ich diese 2 Einzelbilder wieder in ein gemeinsames?

[edit]: Da matlab schlau ist und ich nicht, weiß matlab, dass man 2 Matrizen mit der gleichen Dimension addieren kann ;). Demnach, 2 Einzelbilder addiert = ein Gesamtbild. Das wäre also schonmal gelöst.

Einfach den Filter für horizontale Kanten über das Ursprungsbild, und dann den für Vertikale Kanten über das bereits gefilterte Bild laufen lassen haut nicht so wirklich hin (was ja auch klar is - wenn der horizontale Filter alle vertikalen Kanten raushaut, wird der Filter für vertikale Kanten nicht mehr das gewünschte ergebnis bringen).

weiters steht in dem sobel.m-file :

 output arguments

% gradient: gradients image

% orientation: orientation image

Was soll "orientation image" sein?

[edit2]: ich glaube ich habe auch hier die lösung gefunden; soll man das bild hierfür einfach mit diesen Filtern verknüpfen?

post-4462-0-15483600-1352897161_thumb.jp

Soll ich einen Vektor gradient = [bild mit horizontalen Kanten;Bild mit vertikalen Kanten] und einen Vektor grientation =['x' ; 'y'] erstellen, oder wie nun?

Siehe edit1 oben: brauche jetzt keinen Vektor mit einzelbildern mehr. Trotzdem weiß ich noch nicht, was mit orientation gemeint ist.

Teilt euer Wissen bitte mit mir :)

LG

Share this post


Link to post
Share on other sites

Posted

So wie ich das verstanden habe, soll die Matrix gradient den Betrag des Gradienten in jedem Punkt enthalten und orientation die Richtung des Gradienten in jedem Punkt.

[quoteJetzt kann ich beide Filter mit "imfilter" auf mein Ursprungsbild anwenden und bekomme je ein Bild mit horizontalen und vertikalen Kanten.

Jetzt kann ich beide Filter mit "imfilter" auf mein Ursprungsbild anwenden und bekomme je ein Bild mit horizontalen und vertikalen Kanten.

Das stimmt glaub ich nicht so ganz. Du bekommst mit den Filtern in jedem Punkt eine x- und eine y-Komponente des Gradienten. Daraus musst du dann den Betrag und die Richtung berechnen. Siehe Buch S.145

Share this post


Link to post
Share on other sites

Posted

Hi janky. Ich habs so gemacht. Hoffe es hilft.

function [gradient, orientation] = sobel(I)

h_vert = fspecial('sobel');

h_hori = -h_vert';

%replicate: Input array values outside the bounds of the array are assumed to equal the nearest array border value.

filt_hori = imfilter(I, h_hori, 'replicate');

filt_vert = imfilter(I, h_vert, 'replicate');

%Betrag und Richtung des Gradienten:

gradient = sqrt((filt_hori .* filt_hori) + (filt_vert .* filt_vert)); %.* dimensions must agree

orientation = atan2(filt_vert, filt_hori);

Is wie auf S.145

Bitte um Rückmeldung wenns anders gehört.

LG

Share this post


Link to post
Share on other sites

Posted

h_hori = -h_vert';

Wieso minus?

Sonst hab ichs genauso gemacht.

edit: fspecial('sobel') erzeugt einen horizontalen Filter.

Share this post


Link to post
Share on other sites

Posted

Also ich glaube, dass das minus egal ist... allerdings habe ich das Ergebnis, das mit Matlab für den fspecial befehl zurückgibt so umgebaut, dass ich auf die Matrizen im Buch komme.... sicher ist sicher.

Ansonsten kann ich nur sagen, mein Eröffnungsbeitrag ist so gut wie völlig falsch ;). Inzwischen habe ich ein Programm geschrieben, dass allem Anschein nach das tut was es soll - schön programmiert ist es zwar sicherlich nicht aber was solls.

So wie "snape" das hier geschrieben hat hab ichs vom Prinzip her auch implementiert.

Den Winkel hab ich mir ganz anders ausgerechnet, da ich die fkt atan2() nicht kannte... habe die x-Komponenten als realteil und die y-komponenten als imaginärteil aufgefasst und mir den Winkel mit angle() ausgeben lassen - kommt aufs exakt selbe, habs ausprobiert.

Im Allgemeinen muss ich sagen, dass ich's mir um einiges furchtbarer vorgestellt habe, da ich mir MATLAB noch nichts zu tun hatte. Ist aber eine witzige art Programme zu schreiben, gefällt mir irgendwie.

Ich finde bloß, dass man das Non-maxima Suppression verfahren dann doch genauer beschreiben hätte können... hätte mir einen Haufen Arbeit erspart.

LG

edit: wäre ja auch zu schön gewesen. Wenn ich ein selbst geschossenes Bild hereinlade, tut sich lange garnix, und dann bekomme ich einen Pixelhaufen :). Weiß einer wieso das so ist?

Mein berechnetes "Kantenbild" alias Pixelhaufen hat schon starke Ähnlichkeit mit dem, was der Befehl "imshow(originalbild, 'sobel')" liefert. Das ist nämlich auch ein Pixelhaufen.

Muss also was mit der Bildgröße zu tun haben.

LG

Imresize hat geholfen

Share this post


Link to post
Share on other sites

Posted

Hat von euch schon jemand eine Bewertung auf TUWEL bekommen?

Share this post


Link to post
Share on other sites

Posted

Ich nicht. So was find ich besonders leiwand. Ich weiß ja nicht wie's bei euch abgelaufen ist, aber ich habe von CAX noch nichtmal irgendeine Rückmeldung, obwohl ich sogar per mail nachgefragt habe, ob das Protokoll eh angekommen ist. Wurde einfach ignoriert.

Share this post


Link to post
Share on other sites

Posted

Bezüglich CAX Protokoll habe ich auch noch keine Rückmeldung bekommen.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now