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

Gradientenbetragsbild

 

reMi
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 11.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2009, 10:22     Titel: Gradientenbetragsbild
  Antworten mit Zitat      
Hallo!

Ich bin nocht nicht wirklich vertraut mit MATLAB, allerdings benutzen wir es auf der Fachhochschule und wir haben ne Übung über Ostern bekommen um uns ein bisschen damit auseinander zu setzen. Leider häng ich da grad bissle Wink

Ich hab ein Bild, das ich mit Gauß filtern soll und dann mit gegebenen Filtermasken (ich nenne sie mal Gy und Gy) in beide Richtungen abgeleitet wird. Bis jetz ja kein Problem, jedoch soll ich dann den gradientenbetrag berechnen und diesen durch imshow darstellen...

Gradient = sqrt(Gx.^2+Gy.^2)

So sollte er ja berechnet werden, aber wie wende ich diesen Betrag bzw diese Matrix auf jedes einzelne Pixel meines Bildes an? Hab da null Durchblick!

Vielen Dank im vorraus und hoffe die Frage is nicht zu doof... Wink

reMi
Private Nachricht senden Benutzer-Profile anzeigen


Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 12.04.2009, 20:13     Titel:
  Antworten mit Zitat      
Wie leitest du denn nach Gx und Gy ab?
Ich würd jetzt spontan sagen, den selben Algorithmus musst du nun auch mit Gradient anwenden.

Ich tippe mal auf eine 2D-Faltung mittels conv2?
_________________

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 11.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2009, 21:23     Titel:
  Antworten mit Zitat      
Hallo!

Zuerst definiere ich die Filtermasken:

Gx=[-1 0 1; -1 0 1; -1 0 1];
Gy=[-1 -1 -1; 0 0 0; 1 1 1];

und dann filter ich das bild (nachdem ich es schon mal mit gauß gefiltert habt) mit den zwei masken

LWSGx = imfilter(LWS,Gx);
LWSGy = imfilter(LWS,Gy);

danach berechne ich mir eben den gradienten

Gradient = sqrt(Gx.^2+Gy.^2);

wenn ich dann allerdings

LWSgradient = imfilter (LWS,Gradient);

mach und mir das dann durch imshow anschau, kommt halt ein total komisches bild raus, bei dem ich mir net denken kann, dass es so aussehen soll...
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 12.04.2009, 23:53     Titel:
  Antworten mit Zitat      
Ähm, doofe Frage. Smile
Ist der Gradient nicht über die Ableitungen des Bildes gegeben? Dann müsstest du doch einfach:


Code:

Gx=[-1 0 1; -1 0 1; -1 0 1];
Gy=[-1 -1 -1; 0 0 0; 1 1 1];

LWSGx = imfilter(LWS,Gx);
LWSGy = imfilter(LWS,Gy);

LWSgradient = sqrt(LWSGx.^2+LWSGy.^2);

_________________

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 11.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2009, 09:35     Titel:
  Antworten mit Zitat      
das hab ich schon mal proebiert, da sagt er dann immer:

??? Undefined function or method 'sqrt' for input arguments of type 'uint8'.

Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 13.04.2009, 12:07     Titel:
  Antworten mit Zitat      
Uint8 ist das Zahlenformat in dem die Bilder gespeichert sind. Uint8 enthält dabei alle ganzen Zahlen von 0 bis 255.
Du musst vorher die Bilder in double umwandeln.
Empfiehlt sich übrigens immer, weil du dann verhinderst, dass an den Grenzen unterhalb von 0 oder über 255 etwas abgeschnitten wird.

Code:

Gx=[-1 0 1; -1 0 1; -1 0 1];
Gy=[-1 -1 -1; 0 0 0; 1 1 1];

LWSGx = imfilter(LWS,Gx);
LWSGy = imfilter(LWS,Gy);

LWSgradient = sqrt(double(LWSGx).^2+double(LWSGy).^2);
 

_________________

>> why
The computer did it.

Zuletzt bearbeitet von Maddy am 13.04.2009, 12:55, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
reMi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 11.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2009, 12:51     Titel:
  Antworten mit Zitat      
jooo, es funktioniert, vielen dank!

eine letzte frage hab ich noch...es wird gefragt, wo das bild große werte und wo es kleine werte aufweist.
ich dachte das wäre mit einem histogramm zu lösen:

figure, imhist(LWSgradient);

wobei hier wieder ein fehler kommt. muss ich hierbei wieder was besonderes beachten ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 13.04.2009, 13:00     Titel:
  Antworten mit Zitat      
Dann stellen sich mir 2 Fragen:

Welcher Fehler erscheint? Smile

und

Warum ein Histogramm, dieses würde ja die Position unter den Tisch fallen lassen? Also könnte man dann die Frage "Wo?" gar nicht beantworten. Da denk ich eher an die Suche per Index, also z.B. alle Werte die über 250 liegen suchen und dann markieren im Bild, oder denk ich da jetzt falsch?
_________________

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 11.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.04.2009, 13:05     Titel:
  Antworten mit Zitat      
hey!

fehler:

??? Error using ==> iptcheckinput
Function IMHIST expected its first input, I or X, to be two-dimensional.

Error in ==> imhist>parse_inputs at 270
iptcheckinput(a, {'double','uint8','logical','uint16','int16','single'}, ...

Error in ==> imhist at 57
[a, n, isScaled, top, map] = parse_inputs(varargin{:});

Error in ==> R1 at 22
figure, imhist(LWSgradient)

und die frage des unterpunkts lautet:

Stellen Sie den Gradientenbetrag G mit Hilfe von imshow als Bild dar. An
welchen Stellen weist das Gradientenbetragsbild große Werte auf und wo
kleine?

da wir matlab noch nicht so lange verwenden, weiss ich halt net genau wie er das haben will Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
madlab
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 86
Anmeldedatum: 15.05.12
Wohnort: Freiburg
Version: 7.11 (R2010b)
     Beitrag Verfasst am: 12.06.2012, 09:17     Titel:
  Antworten mit Zitat      
hi

die antwort kommt sicher gute drei jahre zu spät, aber ich denke dein prof wollte mit der frage nach den großen und kleinen beträgen darauf hinaus, dass der gradient für starke änderungen (also an "kanten") im bild große werte produziert und bei homogenen flächen (z.b. unscharfe bildbereiche) kleine werte.
den gradient kann man nämlich auch zur bewertung der bildschärfe/fokus benutzen, große werte müssten demnach also im scharfen bereich des bildes auftauchen und kleine im unscharfen bereich.
Private Nachricht senden Benutzer-Profile anzeigen
 
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 - 2024 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.