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

2D Amplitudenbild in Grauwerte umwandeln

 

victor
Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 25.08.08
Wohnort: Maastricht
Version: R2007b
     Beitrag Verfasst am: 03.03.2011, 14:40     Titel: 2D Amplitudenbild in Grauwerte umwandeln
  Antworten mit Zitat      
Hallo Zusammen,


ich habe bei meinem Problem ein 2D Bild mit Amplitudenwerten zur Verfügung. Es handlet sich dabei um ein 2D Array, also jeder Pixel im Bild ist einer bestimmten gemessenen Amplitude zugewiesen.

Nun möchte ich aus diesem Bild ein Grauwertbild machen, also eine Grauwertskala mit 255 Werten für dieses Bild zuweisen. Ist sowas überhaupt machbar?

Danke im voraus
Private Nachricht senden Benutzer-Profile anzeigen


Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2011, 14:47     Titel:
  Antworten mit Zitat      
Klar zumindest lässt sich alles recht einfach segmentieren. Ich weiß nur nicht ob die Segmentierung logarithmisch oder linear vorkommt.

Sprich dein Maximum ist 255 und der Restwird gerundet in die Segmente verschoben.Wo ist dein Problem?
Private Nachricht senden Benutzer-Profile anzeigen
 
victor
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 25.08.08
Wohnort: Maastricht
Version: R2007b
     Beitrag Verfasst am: 03.03.2011, 14:54     Titel:
  Antworten mit Zitat      
Mein eigntliches Problem ist, dass ich nicht weiß wie das gehen soll?

Ich möchte nur ein Konvertierung in ein Grauwertbild und die Segmentierung sollte linear sein.
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: 03.03.2011, 16:12     Titel:
  Antworten mit Zitat      
Moin victor,

irgendwie habe ich das noch nicht richtig verstanden. Wenn Du eine 2-dimensionale Matrix mit Amplitudenwerten hast, würde ich davon ausgehen, dass sie das Ergebnis einer FFT ist, also aus komplexen Werten besteht. Wenn Du davon ausgehend wieder auf ein normales Bild, also dem Eingangsbild zurück willst, mußt Du den umgekehrten Weg gehen:

Code:

I=imread('clown.tif');
figure(1); imshow(I)
c=fft2(double(I));
d=log(1+abs(c));
figure(2); imshow(d,[])
f=fftshift(d);
figure(3); imshow(f,[])
h=ifft2(c);
g=real(abs(h));
figure(4); imshow(g,[])


Hierzu die gesamte Vor- und Zürücktransformation. Demnach müßtest Du Dich mit Deinem Bild an der Variable "c" befinden.

Viele Grüße
Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
victor
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 25.08.08
Wohnort: Maastricht
Version: R2007b
     Beitrag Verfasst am: 03.03.2011, 16:30     Titel:
  Antworten mit Zitat      
Danke Hubertus,

aber ich habe keinen komplexen Werte. Mit der FFT hat dass ganze eigentlich gar nix zutun.

Die Pixelwerte meines Bildes sehen ungefähr so aus:

4.3316 4.1879 3.6919 3.6150 3.3161 3.3008 3.2126 3.2248
4.6168 4.5434 3.9369 3.8685 3.4812 3.4469 3.2533 3.2494
4.6155 4.4698 4.2839 4.1857 3.7089 3.6311 3.3517 3.3057
4.0571 4.2596 4.4875 4.3514 3.9549 3.7869 3.4665 3.3722 3.2532 3.2547 3.3137 3.3491 3.3293 3.3169 3.3358 3.3257

Also sie besitzen Werte zwischen 3 und 4 und werden mir in Matlab mittels RGB colormap dargestellt. Ich möchte jetzt diese Werte auf eine Grauwertskala (0-255) skalieren und das Bild als Grauwertbild darsellen...
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 03.03.2011, 16:43     Titel:
  Antworten mit Zitat      
Ich habe zwar keine Ahnung von Bildverarbeitung, wenn es aber nur um Skalierung geht, gibt es doch folgenden Ansatz.

Du suchst das Minimum und Maximum deiner Amplituden und definierst sie als 0 bzw 255. Die Schrittweite der Skala wäre dann doch (Max-Min)/256. Alle Amplituden die nun von Min aus innerhalb dieser Schrittweite liegen, erhalten den selben Grauwert. Oder irre ich mich da Question
Private Nachricht senden Benutzer-Profile anzeigen
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2011, 16:56     Titel:
  Antworten mit Zitat      
wenn du den weg kennst,woran scheiterts, dass du überhaupt keine Ahnung von matlab hast? Dann schau dir erstmal in der Hilfe den "getting startet" Teil an.
Private Nachricht senden Benutzer-Profile anzeigen
 
Ajax
Forum-Century

Forum-Century


Beiträge: 176
Anmeldedatum: 09.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.03.2011, 18:17     Titel:
  Antworten mit Zitat      
Wenn du das Bild nur darstellen willst, dann müsste dir
Code:

weiterhelfen. Evtl. noch mit colormap('gray'). Die Skalierung deiner Werte ändert ja nichts an der Darstellung - soll heißen: ob deine Werte zwischen 0 und 255 oder zwischen 3 und 4 liegen ist für die Darstellung egal (wenn man jetzt mal von den "Rundungsfehlern" absieht, die du dir bei der "Umwandlung" einfängst).

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
victor
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 25.08.08
Wohnort: Maastricht
Version: R2007b
     Beitrag Verfasst am: 03.03.2011, 19:54     Titel:
  Antworten mit Zitat      
Ja, mit colormap(gray) hab ich es probiert, es geht mir aber mehr um die Werte und nicht die Darstellung. Ich dachte es gibt in Matlab eine Funktion die das Skalieren und konvertieren einfacher macht
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: 03.03.2011, 20:17     Titel:
  Antworten mit Zitat      
Jo, Deine Antwort habe ich verstanden. Die Terminologie hat mich in die falsche Richtung geführt. Trotzdem versuche ich noch mal einen Anlauf, ist ja kein Problem, wenn das auch noch falsch ist: So ist das nun mal eben.

Also, wenn Deine Matrix eine echte 2D-Matrix ist (Dein Beispiel ist dann fehlerhaft), dann kann sein:

Code:
a=Deine Matrix;
X=uint8(a/max(a(:))*255);


ergibt aus dem obigen Beispiel (als Matrix!):

239 231 204 200 183 182 177 178
255 251 217 214 192 190 180 179
255 247 237 231 205 201 185 183
224 235 248 240 218 209 191 186

Ist es das????

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
victor
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 44
Anmeldedatum: 25.08.08
Wohnort: Maastricht
Version: R2007b
     Beitrag Verfasst am: 04.03.2011, 09:07     Titel:
  Antworten mit Zitat      
Ja, mein Beispiel hat da ein Fehler sorry. Aber mit deinem Vorschlag klappt dass eignetlich ganz gut, danke dir !!!
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.03.2011, 12:36     Titel:
  Antworten mit Zitat      
Hi,
Wenn du die Werte besser zwischen 0 und 255 verteilen willst, kannst du auch
Code:

X=uint8(((A-min(A(:)))/((max(A(:))-min(A(:)))))*255)
 



verwenden. Da werden deine Werte auf den Bereich 0 bis 255 normiert.
 
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.