1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Matlab - Gradient mit Sobel-Operator und Richtung bestimmen

    • Frage
  • nabla
  • 14. Dezember 2006 um 11:42
  • Unerledigt
  • nabla
    2
    nabla
    Mitglied
    Punkte
    15
    Beiträge
    2
    • 14. Dezember 2006 um 11:42
    • #1

    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:

    Code
    for i = 2: (imagesize(1)-1)  %rows
    
        for j = 2:(imagesize(2)-1) %columns
    
            % calculate sx and sy
            SX = threshold*( Image(i-1,j+1) + 2* Image(i,j+1) + Image(i+1,j+1) - Image(i-1,j-1) - 2*Image(i,j-1) - Image(i+1,j-1) );
            SY = threshold*( Image(i+1,j+1) + 2* Image(i+1,j) + Image(i+1,j-1) - Image(i-1,j+1) - 2*Image(i-1,j) - Image(i-1,j-1) );
    %         SX = (-1)*threshold*( Image(i-1,j+1) + 2* Image(i,j+1) + Image(i+1,j+1) - Image(i-1,j-1) - 2*Image(i,j-1) - Image(i+1,j-1) );
    %         SY = (-1)*threshold*( Image(i+1,j+1) + 2* Image(i+1,j) + Image(i+1,j-1) - Image(i-1,j+1) - 2*Image(i-1,j) - Image(i-1,j-1) );
            edge_x(i,j)=SX;
            edge_y(i,j)=SY;
    
    
            %calculate Magnitude
            GMAG = sqrt( double(SY*SY) + double(SX*SX));
            %calculate direction array GDIR
            GDIR(i,j) = 360/(2*pi)*(atan2 ( double(SY) , double(SX) )) ; 
    
            EDGE(i,j)=GMAG;
    
    
        end;
    end;
    Alles anzeigen


    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

  • buschti
    5
    buschti
    Mitglied
    Punkte
    220
    Beiträge
    42
    • 14. Dezember 2006 um 13:55
    • #2

    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).

  • nabla
    2
    nabla
    Mitglied
    Punkte
    15
    Beiträge
    2
    • 14. Dezember 2006 um 14:02
    • #3

    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...

  • buschti
    5
    buschti
    Mitglied
    Punkte
    220
    Beiträge
    42
    • 18. Dezember 2006 um 11:30
    • #4
    Zitat von nabla

    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.

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern