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

Keine Ahnung warum bei imwrite keine Graustufen gesetzt werd

 

xwinnipuhx
Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 23.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2012, 11:48     Titel: Keine Ahnung warum bei imwrite keine Graustufen gesetzt werd
  Antworten mit Zitat      
wenn ich ein Bild(Graustufenbild) aus meiner bildserie einlese es durch FFT transformiere und anschließend durch IFFT wieder zurücktransformiere kann ich es über imwrite nicht mehr "richtig" speichern.
Max = 242
Min = 0
auch nach der Tranaformation
Code:

a = fft(img)
b = ifft(a)
 

mit
Code:

imshow(b, [0 242])
 

bekomm ich das bild wieder richtig mit den originalfarbwerten dargestellt.

wie bekomm ich das nun bei imwrite hin?
das einfügen einer colormap(gray) hat mir bis jetzt noch nicht richtig geholfen.
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: 16.05.2012, 12:07     Titel:
  Antworten mit Zitat      
Ist dein Bild wirklich ein Graustufenbild oder grauer Inhalt als m*n*3 gespeichert oder ist es Index-Bild. Ich kann bei einem m*n Bild kein Problem sehen. Du schreibst einerseits von einem Graustufenbild und von "originalfarbwerten"! Ein Colorbild wird aber verfälscht wiedergegeben.

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
xwinnipuhx
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 23.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2012, 12:17     Titel:
  Antworten mit Zitat      
danke erstmal für deine antwort. im anhang eins der bilder. die info sagt mir colortyp = grayscale

ich mein mit farbwerten die graustufen Smile

striped_raw_00.tif
 Beschreibung:

Download
 Dateiname:  striped_raw_00.tif
 Dateigröße:  144.55 KB
 Heruntergeladen:  781 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: 16.05.2012, 12:34     Titel:
  Antworten mit Zitat      
Leider zeigt das Bild nicht dein Problem, du müstest schon das Eingangs- und Ausgangsbild anhängen. Die ifft gibt double zurück. Wandel nach uint8 um, dann müßte das Problem behoben sein.

Etwas ist merkwürdig. Ich habe ein Testbild 512*512 mit weißem Untergrund und 1 schwarzer Balken. Das Bild wird mit deiner Befehlsfolge korrekt gespeichert ( auch in anderen Programmen zu öffnen ). Der gleiche Versuch mit dem bekannten cameraman.tif zeigt die typische leere figure, wenn nicht nach uint8 gewandelt wurde.
Private Nachricht senden Benutzer-Profile anzeigen
 
xwinnipuhx
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 23.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2012, 12:47     Titel:
  Antworten mit Zitat      
danke dir Smile


leider sieht es immer noch nicht so aus wie es aussehen soll Sad
ich habe 9 bilder die alle so ähnlich sind wie das bereits gepostete. alle 9 werden fourier transformiert aufsummiert und die entstandene matrix zurücktransformiert.

in meinem anderen post:
http://www.gomatlab.de/hilfe-colorm.....it-graustufen-t23649.html

habe ich das problem schon einmal geschildert

bin absolut ratlos
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: 16.05.2012, 13:12     Titel:
  Antworten mit Zitat      
Du schreibst in dem Beitrag:

Zitat:
das beste ergebnis war bis jetzt mit
Code:
imshow(realImg,[9 1383]);


Wenn du Werte über 255 hast, dann normieren diese mit:

Code:
norm=b-min(b(:));
norm=255*b/max(b(:));
imwrite(norm.....)
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: 16.05.2012, 13:19     Titel:
  Antworten mit Zitat      
Wenn Du Bilder aufsummiert ist eigentlich zu erwarten, dass sich die Grauwerte erheblich verschieben. Dann hilft nur Bildverarbeitung und dann liegt das nicht an der FFT.
Private Nachricht senden Benutzer-Profile anzeigen
 
xwinnipuhx
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 23.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2012, 13:23     Titel:
  Antworten mit Zitat      
hört sich gut an nur wie stell ich das am besten an kann schon nicht mehr klar denken heut

meine variante ist ja offensichtlich falsch ich muss doch beide normierungen irgendwie in einer variablen zusammen fassen oder?

Code:

newimg = ifft(S);
realImg = real(newimg);
norm = realImg-min(realImg(:));
norm = 255*realImg/max(realImg(:));
%finalImg = uint8(realImg);


imwrite(norm,"neu2.tif")
 
Private Nachricht senden Benutzer-Profile anzeigen
 
xwinnipuhx
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 23.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2012, 13:25     Titel:
  Antworten mit Zitat      
@ hubertus

und warum sieht das bild als txt-file über imageJ geöffnet dann super aus?
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: 16.05.2012, 13:32     Titel:
  Antworten mit Zitat      
Die Darstellung von Bilder ist in vielen Programmen sehr unterschiedlich und auch Matlab macht einem das Leben nicht leicht. Denn was Matlab abbildet ist nicht immer das, was gespeichert wird. Da kann man sich ja auch mal fragen, warum das nicht einfacher gemacht wurde. Ich vermute aber, das dein Überlagern das eigentliche Problem ist. Wenn ich 2 gleiche Bilder überlager, entsteht je nach dem, wie die beiden Bilder verrechnet werden ein dunkleres, kontrastreicheres Bild.

Sehe dir erst einmal 2 Bilder an, die du überlagern willst und dann das Ergebnis. Wenn sich die Graustufen erheblich ändern, mußt du zwischen den beiden Bilder eine Hístogrammnormierung vornehmen und dann auf jedes weitere Bild. Ich kenne deinen Auftrag nicht und was du darstellen willst. Soll das Bild insgesamt heller und/ oder kontrastreicher werden?
Private Nachricht senden Benutzer-Profile anzeigen
 
xwinnipuhx
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 23.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2012, 13:37     Titel:
  Antworten mit Zitat      
es sind 9 bilder die alle anders belichtet wurden (mikroskopie-Aufnahmen) durch eine streifenweise belichtung. ziel ist es mittels FFT die laterale Auflöung (x-y) zu verbessern also aus den 9 einzelbildern ein bild machen
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: 16.05.2012, 13:47     Titel:
  Antworten mit Zitat      
Ich denke Mikroskopbilder sind auch nur Graustufenbilder. Man kann bestimmte Bildinhalte nicht einfacher übereinanderlegen. In vielen Programmen wird durch Überlagerung der Gesamtkontrast verbessert, wenn die Bilder eine flache Gradation haben. Daraus kannst du entnehmen, dass Überlagerungen - ohne kontrastveränderten Berechnungen - zu einem dichteren und kontrastreicherem Bild führen.

Wenn du das an einem Beispiel mit 2 Bilder prüfst, kannst du beurteilen, ob noch ein paar Schritte dazwischen ausgeführt werden müssen.

Wenn die Bilder ohnehin unterschiedlich belichtet sind, bleibt dir schon mal gar nichts anderes übrig. Überlager erst einmal 2 Bilder und normiere das Histogram. Dann überlagerst du das 3. Bild mit dem vorherigen Ergebnis und normierst wieder usw.
Private Nachricht senden Benutzer-Profile anzeigen
 
xwinnipuhx
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 34
Anmeldedatum: 23.03.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.05.2012, 14:25     Titel:
  Antworten mit Zitat      
sorry aber ich habe keine ahnung wie ....

werd auch nicht aus dem vorgeschalgenem code zur normierung schlau, ich kann doch in imwrite keine weitere funktion mit übergeben
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: 16.05.2012, 15:04     Titel:
  Antworten mit Zitat      
Alles kein Problem. Hier sind viele, die dir helfen wollen. Ich glaube nicht, dass dein Problem FFT heißt sondern die Überlagerungen bewirken das unzufriedende Resultat. Was passiert, wenn man Bilder zusammenrechnet, siehst du hier:

Code:
I=imread('cameraman.tif');
figure; imshow(I)
I2=I+I;
figure; imshow(I2)
I3=I-I;
figure; imshow(I3)
I4=I+I/2;
figure; imshow(I4)


In diesem Beispiel wurde das gleiche Bild mit sich selbst verrechnet. Probiere das mal mit 2 unterschiedlichen Bildern, die aber alle gleich groß sein müssen, also alle 512*512 oder so ähnlich. Wenn du 2 unterschiedliche Bilder zusammen rechnest, ergibt das ein andere Darstellung. Es kommt aber immer auf den Bildinhalt an.

Dann verrechne ein normales Bild mit einem Bild, dass du vorher heller oder dunkler gemacht hast. Und das wie folgt:

Code:
I=imread('cameraman.tif');
I2=I+100; % das Bild wird aufgehellt um den Offset 100
I3=I*0.5; % das Bild wird abgedunkelt

Verrechnet jetzt die Bilder miteinander und sehe dir an, wie sich die Ergebnisse zu den verrechneten Bildern verhalten.

Der nächste Schritt ist eine Funktion zur Hisogrammnormierung, also nicht einfach nur heller oder dunkler.

Melde dich wieder und beschreibe mal genauer, was an deinem Bild falsch ist ( zu dunkel, zu kontrastreich oder....)


Mach dir zusätzlich zu diesem Versuch mal ein Bild vom Histogramm. Das ist aufschußreicher als nur das reine Bild. Dazu folgendes Beispiel:

Code:
i=imread('cameraman.tif');
i=double(i);
figure; imshow(i,[0 255])
inh=histc(i(1:prod(size(i))),0:255);
figure; bar(inh)


Ein gut durchgezeichnetes Bild sollte bei 0 beginnen und bei 255 enden.
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.