WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Filter anwenden: Sobel, Prewitt

 

strobl_erwin
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 14.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.04.2009, 20:03     Titel: Filter anwenden: Sobel, Prewitt
  Antworten mit Zitat      
Hallo, habe eine Frage:

Wenn ich jetzt ein Bild habe, welches zweidimensional ist, und ich will einen Filter, bzw. Kantendetektor darauf anwenden, wie schaffe ich es, einen Filter selbst zu erstellen ohne den Befehl fspecial?

Der Code sollte nachher so aussehen:
bearbeitetes_Bild = faltung (Eingangsmatrix, Kern);

wie schaffe ich das?
Private Nachricht senden Benutzer-Profile anzeigen


Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 23.04.2009, 07:52     Titel:
  Antworten mit Zitat      
Du nimmst dir ein neues m-file und schreibst in die Kopfzeile

Code:

function [Ausgangsmatrix]=faltung(Eingangsmatrix, Kern);

% hier kommt der selbst erstellte Filter rein (ohne Vordefinition von Eingangsmatrix und Kern, denn die stehen der Funktion bereits zur Verfügung

% Ausgangsmatrix war ja das gefilterte Bild, wenn ich mich recht entsinne

 


Das m-file speicherst du unter dem Namen faltung.m
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
strobl_erwin
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 14.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2009, 17:47     Titel:
  Antworten mit Zitat      
Es tut mir leid, ich habe es überhaupt nicht verstanden.

Was genau macht der Befehl function? Wie kann ich meinen Filter selbst erstellen, sodass ich ihn anschließend mit imfilter implementieren kann?

Habe dann noch weitere Fragen: Wenn ich den Sobel Filter selbst implementiert habe über imfilter, muss ich dann irgendetwas mit Gradienten machen.

Ich habe soviel verstanden: Wenn ich eine Grafik mithilfe von Sobel ableite, einmal in x und einmal in y-Richtung, dann bekomme ich jeweils Gradienten.

Und jetzt: Wie kann ich nun den Winkel und somit die Richtung dieser Gradienten feststellen? Und wie kann ich im Anschluss auch den Betrag dieser Gradienten im Bild festellen? Als Ergebnis muss ein neues Bild erzeugt werden, dass mir diese Informationen liefert.

Was genau ist eigentlich der Betrag? Die Richtung habe ich verstanden. Es zeigt mir den Winkel an, den Pixel mit ähnlichen Werten zur x-Achse haben. Das geht irgendwie mit dem Arcus-Tangens (atan).

Hoffe auf eine möglichst erklärende Antwort, damit ich dieses Problem möglichst schnell lösen kann.

Lg Erwin
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 23.04.2009, 18:18     Titel:
  Antworten mit Zitat      
Hm, die Code-Zeile die du gepostet hast, hat mich wohl verwirrt. Ich dachte, du weißt nicht wie du eine Funktion erstellst aus dem Code den du schon bereits hast. Sry.

Beim Rest musst dir diesmal jemand anderes helfen.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
strobl_erwin
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 14.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.04.2009, 18:37     Titel:
  Antworten mit Zitat      
wenn es jemanden gibt, denn letztens hast auch nur du allein gepostet, wofür ich heute noch sehr dankbar bin.
Private Nachricht senden Benutzer-Profile anzeigen
 
strobl_erwin
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 14.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2009, 11:48     Titel:
  Antworten mit Zitat      
Bin jetzt schon weiter gekommen.

Habe nur eine Frage: Was genau macht der Befehl quiver?

Wenn ich sage: B = imread ('Bild.jpg');
wieso kommt da nichts, wenn ich sage: quiver (B); ?

Wenn ich ein Bild ableite, dann entstehen so Gradienten. Wie kann ich mit dem Befehl quiver die Richtung der Gradienten interpretieren?

Bitte um Antwort.

Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2009, 13:31     Titel:
  Antworten mit Zitat      
Hallo Erwin

Code:
ist eine "plot" function.
Damit meine ich, dass 'quiver' nichts rechnet sondern nur zeichnet.
Du musst 'quiver' einerseits Koordinaten bzw. andererseits den dazugehörigen Gradienten übergeben; also
Code:
quiver(x, y, dx, dy)
.

Mit
Code:
B = imread ('Bild.jpg')
quiver(B)
kann es nicht funtkionieren.

Ich empfehle einen Blick in die Matlabhilfe Wink .

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
strobl_erwin
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 14.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2009, 20:54     Titel:
  Antworten mit Zitat      
Tut mir leid, diese Matlab-Hilfe verstehe ich nicht, denn Englisch ist meine absolute Schwäche, wenn es um Matlab geht.

Würde mich über eine konkrete Erklärung freuen!
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.04.2009, 09:14     Titel:
  Antworten mit Zitat      
Lass uns mal die Quelltextzeilen sehen, in denen Du Dein Bild einliest und den Gradienten bildest.

Ich kenn mich mit Bildbearbeitung nicht aus und weiß nicht wie Du den Gradienten für das Bild bildest.
Ein JPG entspricht eingelesen in Matlab einem (n x m x 3) array.

lg
Martin

PS.: Englisch ist auch meine Schwäche; nicht nur wenn es um MATLAB geht.
Aber irgendwie wäre es mir unangenehm wegen jeder nicht verstandenen Funktion das Forum zu bedienen.
Auch Du solltest lernen die Matlabhilfe zu benutzen.
Versteh das bitte nicht falsch, aber ich habe mir auch die Hilfe zu "quiver" angesehen um Dir helfen zu können.
Private Nachricht senden Benutzer-Profile anzeigen
 
Ursl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2011, 16:08     Titel:
  Antworten mit Zitat      
Hey, ich habe es mal so probiert:

Code:
%%Mein Sobel
function [D] = mein_sobel(A)


%Sobel Kerne in x- und y-Richtung
Kernx = double([1 0 -1;2 0 -2;1 0 -1]);
Kerny = double([1 2 1;0 0 0;-1 -2 -1]);
Dx = conv2(Kernx,A);
Dy = conv2(Kerny,A);
D = sqrt(Dx.^2 + Dy.^2);

%plot
figure
contourf(D)
title('Gradient des Sobel-Operators')
xlabel('x');
ylabel('y');
colorbar ('eastoutside')
colormap gray %spring
end
 


Das Programm soll den Sobeloperator anwenden und zeichnen, funktioniert aber noch nicht.

Weiß jemand, wo der Fehler liegt?

Grüßle
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.