Matlab - Gradient mit Sobel-Operator und Richtung bestimmen

  • Hallo, ich möchte mit Hilfe des Sobeloperators eine Kantendetektion durchführen. Außerdem möchte ich nachher für eine Klassifizierung mit den Richtungen der Gradienten weiterarbeiten. Hier mal der Matlab-Code:


    Leider erhalte ich nun in x-Richtung die jeweilige Richtungsangabe von Dunkel nach Hell und in Y-Richtung die Angabe für Hell nach Dunkel. Hat einer eine Idee woran das liegen könnte?

    Danke
    Nabla

  • Ich würde für die Ableitung in x- und y-Richtung die gradient-Funktion nehmen. Außerdem braucht man diese verschachtelten for-Schleifen nicht, man kann in Matlab meist Funktionen auf die ganze Matrix anwenden (for-Schleifen sind langsam in Matlab)

    also

    [SX,SY]=gradient(Image);
    GMAG = sqrt( SY.^2 + SY.^2));

    Der Gradient an jeder Stelle (i,j) ist jetzt ein Vektor mit den Komponenten SX(i,j) und SY(i,j).

  • Ja schonmal vielen Dank, aber mir ist es halt wichtig, dass ich auch verstehe, was in den Funktionen abläuft und generell müsste es ja über den SOBEL-Operator auch funktionieren, oder?

    Der Betrag scheint bei mir ja auch zu stimmen, aber das Problem liegt in der Richtung. Weiß einer, wie man die berechnet. Ich würde folgendes Vorschlagen:

    GDIR = 360/(2*pi)*(atan2 ( double(edge_y) , double(edge_x) )) ;

    Bekomme aber nur in eine Richtung "richtige" Werte...

  • Ja schonmal vielen Dank, aber mir ist es halt wichtig, dass ich auch verstehe, was in den Funktionen abläuft und generell müsste es ja über den SOBEL-Operator auch funktionieren, oder?

    Ja, mit dem Sobel sollte es auch gehen. Mach dir aber lieber eine Filtermaske und falte das Bild damit, also für die Ableitung in x-Richtung:

    sobelx = [-1 0 1; -2 0 2; -1 0 1];
    SX = conv2(Image,sobelx);

    Zitat


    Der Betrag scheint bei mir ja auch zu stimmen, aber das Problem liegt in der Richtung. Weiß einer, wie man die berechnet. Ich würde folgendes Vorschlagen:

    GDIR = 360/(2*pi)*(atan2 ( double(edge_y) , double(edge_x) )) ;

    Bekomme aber nur in eine Richtung "richtige" Werte...

    Die Richtung dürfte schon "richtig" sein, die 0° fangen aber wahrscheinlich woanders an. Schau Dir mal die Hilfe zu atan2 an.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!