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

Image-Gradienten berechnen und anzeigen

 

Dr.Nick
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 04.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.05.2009, 17:55     Titel: Image-Gradienten berechnen und anzeigen
  Antworten mit Zitat      
Hallo zusammen,
ich versuche gerade zu einem Bild die Gradienten in x, in y und in beiden Richtungen zusammen zu berechnen und die Ergebnisse als Bilder anzuzeigen.
Der folgenden Code sollte eigentlich den Gradienten in x und y Richtung ausrechnen und anzeigen, funktioniert aber nicht:

Code:

set(handles.picture2,'HandleVisibility','ON');
im_original=imread(char('Geometryd.jpg'));
colormap(gray(256))
im_original = rgb2gray(im_original);
im_original = gradient(image(im_original));
I=image(im_original);
axes(handles.picture2);
axis equal;
axis tight;
axis off;
set(handles.picture2,'HandleVisibility','OFF');
 


Was mache ich falsch und wie lassen sich die Gradienten nur in eine Richtung ausrechnen?

Danke schonmal
Nick
Private Nachricht senden Benutzer-Profile anzeigen


LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.05.2009, 08:20     Titel:
  Antworten mit Zitat      
Hallo Dr. Nick,

der Aufruf von image in folgender Codezeile verursacht Probleme.
Code:
im_original = gradient(image(im_original));


image stellt das Bild dar und gibt ein handle zurück; gradient benötigt aber die Bildmatrix selbst und nicht ein handle. Wenn Du beide Ableitungen haben möchtest, musst Du zwei Rückgabewerte angeben (ansonsten bekommst Du nur x-Richtung.

Code:
[imgX,imgY] = gradient(im_original);

berechnet den Gradienten in x und y Richtung.
Private Nachricht senden Benutzer-Profile anzeigen
 
Dr.Nick
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 04.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2009, 15:51     Titel:
  Antworten mit Zitat      
Aaalso, hab die betreffende Zeile jetzt mal in
Code:

im_original = gradient(im_original);
 

geändert. Danach bekomme ich aber die Fehlermeldung

Code:

??? Error using ==> rdivide
Integers can only be combined with integers of the same class, or scalar doubles.

Error in ==> gradient at 70
      g(2:n-1,:) = (f(3:n,:)-f(1:n-2,:))./h(:,ones(p,1));
 


Was ist da jetzt falsch?

Übrigens: Wenn ich die Version
Code:

set(handles.picture2,'HandleVisibility','ON');
im_original=imread(char('Geometryd.jpg'));
colormap(gray(256))
im_original = rgb2gray(im_original);
im_original = gradient(image(im_original));
I=image(im_original);
axes(handles.picture2);
axis equal;
axis tight;
axis off;
set(handles.picture2,'HandleVisibility','OFF');
 

nutze, bekomme ich keine Fehlermeldung, sondern ein komplett schwarzes Bild.

Das gleiche Phänomen tritt auch auf, wenn ich den Edge-Befehl verwenden will, da lautet die Fehlermeldung (ohne image()) allerdings

Code:

??? Function EDGE expected its first input, I, to be two-dimensional.

Error in ==> edge>parse_inputs at 564
iptcheckinput(I,{'numeric'},{'nonsparse','2d'},mfilename,'I',1);
 


Das Bild was ich mit image()-Befehl erhalte, ist hier blau, was wahrscheinlich daran liegt, dass ich das Bild vorher nicht in ein grayscale umwandle.
Private Nachricht senden Benutzer-Profile anzeigen
 
LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2009, 18:37     Titel:
  Antworten mit Zitat      
Der Befehl rgb2gray gibt ein Bild von gleichem Datentyp zurück wie das Eingabebild. In Deinem Fall wohl ein uint8 oder uint16. Der Befehl gradient kann mit diesem Typ nicht umgehen, daher die Fehlermeldung. Du musst also vorher den Datentyp ändern durch einen cast double(im_original) oder den Befehl im2double.
Private Nachricht senden Benutzer-Profile anzeigen
 
Dr.Nick
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 04.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2009, 19:07     Titel:
  Antworten mit Zitat      
hey, supi, das klappt! Vielen Dank!
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.