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

Bilder normalisieren

 

Polis Tyrol
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 08.01.10
Wohnort: Leoben
Version: 7.9.0.529 (R2009b)
     Beitrag Verfasst am: 08.01.2010, 11:35     Titel: Bilder normalisieren
  Antworten mit Zitat      
Ich habe folgendes Problem zu lösen:

Ich habe fünf gleich fotographierte Bilder einer Oberfläche.
Diese fünf Bilder sollten untereinander theoretisch kaum Unterschiede
zeigen, da es fünf mal die gleiche Oberfläche ist, und sie unter den gleichen
Bedingungen aufgenommen wurden. Tatsächlich ist aber ein relativ großer
Helligkeitsunterschied zwischen ihnen. Ich möchte diese Bilder nun
rechnerisch so aneinander angleichen, dass sie einander möglichst ähnlich
sind, ohne die Informationen über die Oberfläche zu verlieren.

Bisher habe ich versucht, von jedem dieser Bilder seinen eigenen mean
abzuziehen; das hilft zwar ein wenig, da nun der durchschnittliche
Helligkeitswert bei allen fünf gleich ist. Dennoch gibt es nach wie vor große
Unterschiede in der Verteilung der Helligkeitswerte.

Ich habe zwei dieser Bilder angehängt. Sie sollten eigentlich praktisch
gleich aussehen, tun sie aber offensichtlich nicht. Hat jemand eine Idee,
wie ich die beiden Bilder einander anähneln kann?

Bild 1.tif
 Beschreibung:

Download
 Dateiname:  Bild 1.tif
 Dateigröße:  2.09 MB
 Heruntergeladen:  1491 mal
Bild 2.tif
 Beschreibung:

Download
 Dateiname:  Bild 2.tif
 Dateigröße:  2.09 MB
 Heruntergeladen:  1427 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: 08.01.2010, 12:24     Titel:
  Antworten mit Zitat      


Zuletzt bearbeitet von Hubertus am 08.01.2010, 12:32, insgesamt einmal bearbeitet
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.01.2010, 12:29     Titel:
  Antworten mit Zitat      
Sorry, da ist etwas schief gelaufen! Du kannnnst den Bildinhalt über Histogrammnormierung anpassen. Etwa wie nachfolgend, muß dazu sagen, dass ich diese Funktion auch übernommen habe.

function X = histo(a,gamma) % a=Bild
imax=255;
amin=double(min(a((:)));
amax=double(max(a(:)));
diff=(imax-imin);
X=uint8( (((double(a)-imin)/diff).^gamma)*diff+amin);
Private Nachricht senden Benutzer-Profile anzeigen
 
Polis Tyrol
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 08.01.10
Wohnort: Leoben
Version: 7.9.0.529 (R2009b)
     Beitrag Verfasst am: 08.01.2010, 13:47     Titel:
  Antworten mit Zitat      
Wie würdest Du gamma berechnen? Denn das müsste dann ja für jedes Bild ein anderer Wert 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: 08.01.2010, 14:16     Titel:
  Antworten mit Zitat      
Das wüßte ich auch gerne. Dürfte aber schwierig sein, denn das Gamma sagt etwas über den visuellen und vor allem geschmacklichen Bildinhalt (Bildaussage) aus. Ein höheres Gamma als üblich kann einen interessanten Effekt verursachen. An was soll man sich orientieren - gibt es ein allgemeingültiges Gamma für jeden Bildinhalt? Da helfen wohl nur Erfahrungen. Handelt es sich um mehrere Aufnahmen mit gleichem Bildinhalt, läßt sich das Gamma übertragen oder muß sogar übertragen werden. Vielleicht wirst Du durch probieren mit unterschiedlichem Gamma sehr schnell Dein eigenes, spezifisches finden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Polis Tyrol
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 08.01.10
Wohnort: Leoben
Version: 7.9.0.529 (R2009b)
     Beitrag Verfasst am: 08.01.2010, 14:58     Titel:
  Antworten mit Zitat      
Ich hab das jetzt einmal ausprobiert:

Code:
gamma1 = log(0.4)/log(mean(g(:)));
s = (g + eps).^gamma;
imshow(s)


Das bringt einmal alle Bilder auf einen ähnlichen Helligkeitswert (~0.4) und auch die Histogramme sind nicht mehr all zu unterschiedlich.

Der Weisheit letzter Schluss ist das allerdings noch nicht.
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: 11.01.2010, 08:47     Titel:
  Antworten mit Zitat      
Moin,moin,

mal abgesehen davon, dass sich nicht glaube, unterschiedliche Grauwertverteilungen über ein Gamma auf gleichem Niveau zu bringen (vielleicht hat zu diesem intressanten Thema jemand eine Meinung), würde ich Deine Funktion gerne anwenden. Dazu habe ich die Frage, ob: "^gamma" eine Variable ist (0.4 ist schon eine) oder wie muss ich den Zusammenhang verstehen. Ist es ein Tippfehler und müßte: gamma1 heißen, bekomme ich eine Fehlermeldung. "gamma" ist auch eine bekannte Funktion. Nehme ich diese, erhalte ich auch eine Fehlermeldung.

Schönen Wochenanfang

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Polis Tyrol
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 08.01.10
Wohnort: Leoben
Version: 7.9.0.529 (R2009b)
     Beitrag Verfasst am: 11.01.2010, 11:02     Titel:
  Antworten mit Zitat      
Muss natürlich "gamma1" heißen. Hab das erste gamma in "gamma1" umbenannt, weil er es sonst als Funktion interpretiert hätte. Aber beim zweiten hab ich das dann vergessen.

Code:
gamma1 = log(0.4)/log(mean(g(:)));
s = (g + eps).^gamma1;
imshow(s)


Wie gesagt, es ist nicht der Weisheit letzter Schluss. Die vorher helleren Bilder haben nach der Korrektur einen höheren Kontrast, die vorher dunkleren einen geringeren. Es ist eine Verbesserung, allerdings müsste die Funktion noch um ein Element erweitert werden, das auch den Kontrast normalisiert.
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: 11.01.2010, 11:13     Titel:
  Antworten mit Zitat      
Danke für Deine Antwort,

ich bekomme mit Werten unter 1 ein invertiertes Bild und über 1 - 2 ein Bild mit sehr geringen Änderungen und sehr hohen Kontrasten. Hast Du den gleichen Effekt oder liegt das am Bildinhalt?
Private Nachricht senden Benutzer-Profile anzeigen
 
Polis Tyrol
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 08.01.10
Wohnort: Leoben
Version: 7.9.0.529 (R2009b)
     Beitrag Verfasst am: 12.01.2010, 10:58     Titel:
  Antworten mit Zitat      
Mein Bild ist Format double [0 1]. Liegt vielleicht daran.

Eigentlich sollte ein Bild mit mean unter 0.4 aufgehellt werden, eines mit mean über 0.4 abgedunkelt. Das funktioniert bei mir ganz gut.
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.01.2010, 11:02     Titel:
  Antworten mit Zitat      
Jo, auch double. Versuch mal das Bild 'cameraman.tif'. Das ist bekannt.
Unter 1 = invers!

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Polis Tyrol
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 08.01.10
Wohnort: Leoben
Version: 7.9.0.529 (R2009b)
     Beitrag Verfasst am: 13.01.2010, 17:11     Titel:
  Antworten mit Zitat      
Code:
cam = im2double(imread('cameraman.jpg'));
gamma1 = log(0.4)/log(mean(cam(:)));
s = (cam + eps).^gamma1;
imshow(s)
figure, imshow(cam)


Verändert bei mir nur die Helligkeit.
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.01.2010, 17:37     Titel:
  Antworten mit Zitat      
Danke für Deine Antwort, mir ist ein Fehler unterlaufen. Ich habe nicht im2double sondern nur double verwendet. Das mag "es" nicht haben.
Alles prima jetzt.

Hubertus
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.