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

Bild einlesen und Grauwerte darstellen

 

holistic
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 29.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2011, 23:26     Titel: Bild einlesen und Grauwerte darstellen
  Antworten mit Zitat      
Hi,

ich hab gerade festgestellt, dass ich das eventuell auch mit Matlab machen kann ohne jetzt groß meine C++ Kenntnisse auszugraben.

Auf jedenfall würde ich gerne ein Bild in Graustufen einlesen und die Intensitäten der Grauwerte dann in einem Koordinatensystem darstellen lassen. Aber nicht unbedingt wie ein Histogramm, sondern eher in 3D, so dass die x -und y-Achsen die Koordinaten im bild bezeichnen und die Höhe durch die Intensität der Grauwerte beschrieben wird.

Es soll quasi darum gehen einen Kreis im Bild, der etwas hellere Grauwerte irgendwie zu finden. Vielleicht ist mein Zugang dazu auch nicht unbedingt der Beste, evtl. habt ihr da noch bessere Vorschläge, bin für alles offen Wink
Private Nachricht senden Benutzer-Profile anzeigen


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 13.02.2011, 13:50     Titel:
  Antworten mit Zitat      
Hallo,

mit deine Methode sollte es etwa so funktionieren (hab leider kein besseres Bild gefunden):
Code:

I = double(imread('cameraman.tif'));
[X,Y] = meshgrid(1:256,1:256);
figure, surf(X,Y,I,'Edgecolor','none');
 


Natürlich könntest du auch einfach einen Threshold setzen und alle Werte die kleiner als dein Kreis sind auf 0 setzen. Nehmen wir an du möchtest im obrigen Bild nur Pixel mit dem Wert größer als 200 angezeigt haben:
Code:

I(I<200) = 0;
figure, surf(X,Y,I,'Edgecolor','none');
 

Wenn du die image processing toolbox besitzt, so ist der Befehl:
Code:

praktisch um interaktiv mit dem Threshold zu spielen. Ansonsten gibt es auch derartige Tools im Matlab Exchange.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
holistic
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 29.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2011, 18:19     Titel:
  Antworten mit Zitat      
Wenn ich den genauen Code von dir oben verwende, dann funktioniert das super, danke!

Wenn ich jetzt allerdings ein eigenes Bild verwende, bekomme ich eine Fehlermeldung:

Error in ==> hhanalyse at 11
figure, surf(X,Y,I,'Edgecolor','none');
??? Error using ==> surf at 78
Data dimensions must agree.

Error in ==> hhanalyse at 11
figure, surf(X,Y,I,'Edgecolor','none');

Was stimmt da mit meinem Bild nicht? Habe es in Graustufen umgewandelt und als tif gespeichert (vorher war es ein jpeg)

Zuletzt bearbeitet von holistic am 13.02.2011, 19:09, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.02.2011, 18:25     Titel:
  Antworten mit Zitat      
Hallo,

wenn du das auf eines deiner Bilder ummünzen willst, solltest du natürlich auch die Dimensionen von 256x256 entsprechend anpassen. Allerdings werden die ersten beiden Eingabeargumente hier nicht gebraucht, da MATLAB die darin enthaltene Annahme automatisch macht:
Code:
surf(I,'Edgecolor','none');


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
holistic
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 29.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2011, 19:12     Titel:
  Antworten mit Zitat      
Zitat:
wenn du das auf eines deiner Bilder ummünzen willst, solltest du natürlich auch die Dimensionen von 256x256 entsprechend anpassen


Wie mache ich das? Denn irgendwie klappt das momentan so überhaupt nicht Wink

EDIT: Hab nochmal nachgeschaut und mein Bild hat die Dimensionen: <459x384x3 double>

das cameraman.tif hat : <256x256 double>

Verstehe ich jetzt nicht ganz, warum es bei zwei tif-Dateien so unterschiedlich ist

Zuletzt bearbeitet von holistic am 13.02.2011, 19:34, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.02.2011, 19:33     Titel:
  Antworten mit Zitat      
Hallo,

bitte noch zwei Zeilen weiterlesen; da steht, wie du das auch ohne hinbekommst.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 13.02.2011, 19:34     Titel:
  Antworten mit Zitat      
Hallo,

Code:

[X,Y] = meshgrid(1:size(I,2),1:size(I,1));
 

Oder eben einfach bei surf weglassen wie Harald schon sagt. Ich habe es nur aus pädagogischen Gründen mit meshgrid gezeigt.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
holistic
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 29.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2011, 19:37     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

bitte noch zwei Zeilen weiterlesen; da steht, wie du das auch ohne hinbekommst.

Grüße,
Harald


Habe ich probiert mit folgendem Code:

Code:
I = double(imread('test2_2.tif'));
[X,Y] = meshgrid(1:256,1:256);
surf(I,'Edgecolor','none');


Dann kommt die Warnmeldung: Warning: Matrix dimensions must agree, not rendering mesh

Und es wird nichts angezeigt. Irgendwo hängts wohl noch Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 13.02.2011, 19:45     Titel:
  Antworten mit Zitat      
Hallo,

dann liegt es an deinem Bild. Welche dimension hat I wenn du das Bild einliest? Handelt es sich möglicherweise um ein true-color Bild?

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.02.2011, 19:55     Titel:
  Antworten mit Zitat      
Hallo,

weiter oben wurde noch "<459x384x3 double> " eingefügt.
Das ist also ein Echtfarb- und kein Graustufenbild.

Wenn es um eine Visualisierung der Intensitäten geht, könnte man die Intensität vorher als Mittelwert der R, G, und B-Werte berechnen:
Code:


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 13.02.2011, 20:00     Titel:
  Antworten mit Zitat      
Hallo,

naja ich lese jetzt nicht jedesmal alle Posts aufs Neue und suche nach editierten Beiträgen...
Man könnte das RGB Bild auch z.B. in ein Graustufenbild oder indexiertes Bild umwandeln und dann anzeigen lassen:
Code:


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
holistic
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 29.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2011, 20:31     Titel:
  Antworten mit Zitat      
Hey, danke für die schnellen und hilfreichen Antworten.

Mit folgendem Code funktioniert es ungefähr wie ich es mir vorgestellt habe:

Code:
% I = double(imread('test2_2.tif'));
% I = mean(I, 3);
% surf(I,'Edgecolor','none');


Wenn ich allerdings eine Umwandlung in Grauwerte vornehme, sieht der Plot etwas seltsam aus:

Code:
I = double(imread('test2_2.tif'));
J=rgb2gray(I)
surf(J,'Edgecolor','none');


Sind die Grauwerte immer zwischen 0 und 1?


Sorry für das viele editing: Was muss ich denn am oberen Code verändernt, so dass ich die Intensitätswerte invertieren kann, d.h. die niedrigsten Werte sind dann im Plot die höchsten und umgekehrt.

Danke für die bisherigen Mühen Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 13.02.2011, 21:02     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Sind die Grauwerte immer zwischen 0 und 1?

ja bei der Umwandlung werden die Werte auf 0-1 normiert.

Zitat:

Was muss ich denn am oberen Code verändernt, so dass ich die Intensitätswerte invertieren kann, d.h. die niedrigsten Werte sind dann im Plot die höchsten und umgekehrt.

Code:

Iinv = imcomplement(I);
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
holistic
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 29.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2011, 21:37     Titel:
  Antworten mit Zitat      
Super, danke! Jetzt kann ich etwas rumprobieren Wink

Zwei Fragen hätte ich da noch:

Du hattest etwas vom interaktiven rumspielen mit einem Threshold gemeint und das man dafür imtool verwenden kann.

Wie benutze ich das denn am besten?


Die andere Frage wäre, wie ich ein Histogramm erstellen kann. Am besten wäre es, wenn ich das histogramm für eine von mir markierte Stelle erstellen kann.

Was da gerade noch jemand Rat?
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 13.02.2011, 22:10     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Du hattest etwas vom interaktiven rumspielen mit einem Threshold gemeint und das man dafür imtool verwenden kann.

Wie benutze ich das denn am besten?

Hierbei hilft die Matlab Hilfe, einfach mal nach imtool suchen!

Zur 2. Frage. Allgemein geht ein Histogram mit hist (das hättest du auch über die Matlab Hilfe gefunden). Mit bestimmten Intervall würde es folgendermaßen gehen:
Code:

mat = round(rand(1,50).*10); % 50 Zufallszahlen von 0 bis 10 (integer)

figure,hist(mat,min(mat):max(mat)) % ohne Intervall
figure,hist(mat(~or(mat<=3,mat>=7)),min(mat):max(mat)); % mit Intervall zwischen 3 und 7
% figure,hist(mat(~or(mat<=3,mat>=7)),4:6) % dann in neuen Grenzen angezeigt (x-Achse)
 


Wenn du wirklich nur eine Stelle, also das Vorkmmen eines Wertes , ermitteln möchtest, brauchst du natürlich kein Histogramm:
Code:

count = sum(mat == 5); % wie oft kommt die Zahl 5 vor
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.