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 Gradient macht bildlich keinen Sinn

 

clustering_n00b
Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 06.12.2012, 20:41     Titel: Image Gradient macht bildlich keinen Sinn
  Antworten mit Zitat      
Hallo zusammen!

Ich arbeite gerade an einem Bildbearbeitungsproblem. Mein Ziel ist eine Klassifizierung der Imagepixel durchzuführen und zwar, je nachdem wie gross der Gradient am gegenwärtigen Pixel ist.

Nun habe ich mal die Standard-MATLAB Befehle benutzt und alles zu bestimmen:

Code:

img = imread('Bild.png');
img = im2double(img);
[gx, gy] = gradient(img);
figure; imshow(img)
figure; imshow(gx)
figure; imshow(gy)
figure; imshow(gx+gy)
 


Man würde jetzt erwarten, dass das letzte Bild sowohl Gradienten in x, als auch in y Richtung anzeigt. Das scheint aber nicht der Fall zu sein (siehe Attachment). Gewisse Farben fallen einfach weg.

Was mache ich falsch?


- clustering_n00b

gx+gy.png
 Beschreibung:

Download
 Dateiname:  gx+gy.png
 Dateigröße:  21.31 KB
 Heruntergeladen:  699 mal
Bild.png
 Beschreibung:

Download
 Dateiname:  Bild.png
 Dateigröße:  43.66 KB
 Heruntergeladen:  666 mal
gy.png
 Beschreibung:

Download
 Dateiname:  gy.png
 Dateigröße:  21.06 KB
 Heruntergeladen:  713 mal
gx.png
 Beschreibung:

Download
 Dateiname:  gx.png
 Dateigröße:  16.8 KB
 Heruntergeladen:  706 mal
Private Nachricht senden Benutzer-Profile anzeigen


Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 07.12.2012, 08:04     Titel:
  Antworten mit Zitat      
Moin,

versuche mal diese Funktion:

http://www.mathworks.com/matlabcent.....sgradient/gaussgradient.m


Viele Grüße
Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2012, 11:47     Titel:
  Antworten mit Zitat      
imshow kann mit negativen Werten nicht wirklich etwas anfangen:
Code:

oder mathematisch etwas sauberer:
Code:
figure; imshow((gx.^2+gy.^2).^0.5)
Private Nachricht senden Benutzer-Profile anzeigen
 
clustering_n00b
Themenstarter

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 07.12.2012, 15:25     Titel:
  Antworten mit Zitat      
Hey Hubertus!

Vielen Dank für die Referenz, jedoch arbeite ich mit RGB Bilder.


dmjr,

Das passt! Very Happy
Herzlichen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 08.12.2012, 15:03     Titel:
  Antworten mit Zitat      
Das geht natürlich auch mit Farbbilder. Du musst die Funktion nur über die RGB-Layer laufen lassen:

Code:

fim=imread('Farbtafel.tif');
R=fim(:,:,1);
G=fim(:,:,2);
B=fim(:,:,3);

[imx,imy]=gaussgradient(R,1.0);
[imx1,imy1]=gaussgradient(G,1.0);
[imx2,imy2]=gaussgradient(B,1.0);

imx(imx==0)=NaN;
imy(imy==0)=NaN;
imy1(imy1==0)=NaN;
imx1(imx1==0)=NaN;
imy2(imy2==0)=NaN;
imx2(imx2==0)=NaN;

figure; imshow(abs(imx)+abs(imy));pause; % Ergebnis prüfen
hold all
h=imshow(abs(imx1)+abs(imy1));
hold all
set(h, 'AlphaData', G); pause;  % Ergebnis prüfen

h1=imshow(abs(imx2)+abs(imy2));
hold off
set(h1, 'AlphaData', B)


Ein schönes Wochende

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
clustering_n00b
Themenstarter

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 10.12.2012, 20:30     Titel:
  Antworten mit Zitat      
Hubertus hat Folgendes geschrieben:
Das geht natürlich auch mit Farbbilder. Du musst die Funktion nur über die RGB-Layer laufen lassen:

Code:

fim=imread('Farbtafel.tif');
R=fim(:,:,1);
G=fim(:,:,2);
B=fim(:,:,3);

[imx,imy]=gaussgradient(R,1.0);
[imx1,imy1]=gaussgradient(G,1.0);
[imx2,imy2]=gaussgradient(B,1.0);

imx(imx==0)=NaN;
imy(imy==0)=NaN;
imy1(imy1==0)=NaN;
imx1(imx1==0)=NaN;
imy2(imy2==0)=NaN;
imx2(imx2==0)=NaN;

figure; imshow(abs(imx)+abs(imy));pause; % Ergebnis prüfen
hold all
h=imshow(abs(imx1)+abs(imy1));
hold all
set(h, 'AlphaData', G); pause;  % Ergebnis prüfen

h1=imshow(abs(imx2)+abs(imy2));
hold off
set(h1, 'AlphaData', B)




Ach so - ja vielen Dank, Hubertus! Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
clustering_n00b
Themenstarter

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 12.12.2012, 13:31     Titel:
  Antworten mit Zitat      
Möchte den Thread nochmals auferwecken, da sich eine neue Frage eingeschlichen hat, und zwar: Wie berechne ich den die Ableitung 2. Grades des Bildes?

Beide Varienten, die auf Mathworks vorgeschlagen sind, funktionieren bei mir nicht:

Code:
[a] = hessian(img);
Undefined function 'hessian' for input arguments of type
'double'.

[a] = jacobian(gradient(img));
Undefined function 'jacobian' for input arguments of type
'double'.



Vielleicht etwa so?

Code:
[gxx gxy] = gradient(gx);
>> [gyx gyy] = gradient(gy);
hessian = gxx + gxy + gyx + gyy
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 12.12.2012, 13:42     Titel:
  Antworten mit Zitat      
Die Fehlermeldung deutet darauf hin, dass dir die Funktion fehlt! Die kann dann auch niemals links von "=" stehen.
Private Nachricht senden Benutzer-Profile anzeigen
 
clustering_n00b
Themenstarter

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 12.12.2012, 21:02     Titel:
  Antworten mit Zitat      
Naja, ich bezweifle, dass dies der Fall ist (ist ja schliessliche eine Standardfunktion), aber mit der zweiten Methode hat's nun endliche funktioniert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 13.12.2012, 04:52     Titel:
  Antworten mit Zitat      
So einfach ist das nicht! Wenn du die Funktion hessian anwenden willst kannst du sie nicht links von = setzen. Da stehen eine oder mehrere Variablen. Außerdem kannst du das leicht prüfen, wenn du statt hessian einfach nur x nimmst. Du bekommst das gleiche Ergbnis. Hessian ist in deinem Beispiel ohne Funktion!

Prüfe, ob die Funktion hessian vorhanden ist oder ob es vielleicht ein 2. File mit gleichem Namen gibt:

Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
clustering_n00b
Themenstarter

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 13.12.2012, 09:53     Titel:
  Antworten mit Zitat      
Code:
which hessian -all
/Applications/MATLAB_R2012b.app/toolbox/symbolic/symbolic/@sym/hessian.m  % sym method
 



Mit hessian = (...) habe ich hessian diesmal als VARIABLE benutzt und den Hessian manuell ausgerechnet.

Wieso ist das falsch? Die Formel stimmt doch.
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 13.12.2012, 10:05     Titel:
  Antworten mit Zitat      
Jetzt ist irgendwie alles durcheinander. Du hast zunächst die Funktion:

Zitat:
[a] = hessian(img);


mit Fehler gemeldet. D.h. du möchtest diese Funktion nutzen, aber es kommt eine Fehlermeldung. Daraufhin habe ich als 1 Möglichkeit auf das Fehlen dieser Funktion hingewiesen. Danach hast du die gleiche Funktionsbezeichung als Variable angewendet und darauf hingewiesen:

Zitat:
aber mit der zweiten Methode hat's nun endliche funktionier


Es entstand der Eindruck, dass du den gemeldeten Fehler so umgehen willst, in dem du die Funktion vor dem Gleichheitszeichen setzt. Das ist falsch.

Ich denke, jetzt müsste alles klar sein. Natürlich kannst du diese Variable so benennen. Es ist aber nicht ratsam das zu tun, denn in längeren Scripten könnten sich Fehler einschleichen, weil Matlab dann diese Funktion starten will.
Private Nachricht senden Benutzer-Profile anzeigen
 
clustering_n00b
Themenstarter

Forum-Century

Forum-Century


Beiträge: 129
Anmeldedatum: 05.09.11
Wohnort: ---
Version: R2011a, R2012b
     Beitrag Verfasst am: 13.12.2012, 12:15     Titel:
  Antworten mit Zitat      
Hubertus hat Folgendes geschrieben:

Es entstand der Eindruck, dass du den gemeldeten Fehler so umgehen willst, in dem du die Funktion vor dem Gleichheitszeichen setzt. Das ist falsch.

Ich denke, jetzt müsste alles klar sein. Natürlich kannst du diese Variable so benennen. Es ist aber nicht ratsam das zu tun, denn in längeren Scripten könnten sich Fehler einschleichen, weil Matlab dann diese Funktion starten will.



Stimmt - da hast du Recht. Werde das nun berichtigen.
Danke für den Hinweis! Smile
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.