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

LogLuv Tiff Bilder mit Tiff Class schreiben, laden, tonemap

 

asxoniles
Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 05.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2010, 20:44     Titel: LogLuv Tiff Bilder mit Tiff Class schreiben, laden, tonemap
  Antworten mit Zitat      
Hallo Matlab Forum,

ich wollte von der neuen Tiff Klasse die Möglichkeit ausprobieren float daten im SGILogL bzw. SGILogLuv zu speichern. Dies habe ich mittels der tags
Code:
tagstruct.ImageLength = size(img,1);
tagstruct.ImageWidth = size(img,2);
tagstruct.Photometric = Tiff.Photometric.LogLuv;
tagstruct.Compression = Tiff.Compression.SGILog;
tagstruct.SGILogDataFmt = Tiff.SGILogDataFmt.Float;
tagstruct.RowsPerStrip = 5;
tagstruct.PlanarConfiguration = Tiff.PlanarConfiguration.Chunky;

einigermaßen hinbekommen (zusätzlich setze ich noch X,Y Resolution und ResolutionUnit). Soweit Matlab gibt keine Fehlermeldung von sich.
Wenn ich jetzt dieses tiff Bild einlese und mit der Matlab Funktion tonemap in den normalen 8Bit für imshow bringe
Code:
tiffobj = Tiff('bild.tif','r');
tiffobj.setTag('SGILogDataFmt', Tiff.SGILogDataFmt.Float);
img=tiffobj.read();
ldr=tonemap(img);


wirft mir Matlab folgenden Fehler aus:
Code:
??? Error using ==> iptcheckinput
Function ADAPTHISTEQ expected its
first input, I, to be real.

Error in ==> adapthisteq>parseInputs
at 420
iptcheckinput(I, {'uint8', 'uint16',
'double', 'int16', 'single'}, ...

Error in ==> adapthisteq at 155
[I, selectedRange, fullRange,
numTiles, dimTile, clipLimit,
numBins, ...

Error in ==> tonemap>toneOperator at
157
Lab(:,:,1) = adapthisteq(Lab(:,:,1),
'NumTiles', numtiles);

Error in ==> tonemap at 62
    RGBldr =
    toneOperator(RGBlog2Scaled, ..,


Das Bild das mit der Tiff Klasse gespeichert wird ist in Single/Double, das Bild was durch read() gelesen wird ist vom Typ Single. Von macht für mich der Fehler erstmal keinen Sinn. Jedoch kann es sein, das ich vielleicht beim Speichern bereits bei der Tag Einstellung Fehler gemacht habe!? Im vergleich der Bildimformationen meiner erstellten LogLuv Tiff und einer aus einer hdr Datenbank sind mir folgende Unterschiede aufgefallen:
Code:
FormatSignature: [73 73 42 0]
ByteOrder: 'little-endian'

Code:
StoNITS: 126.5721
FormatSignature: [77 77 42 0]
ByteOrder: 'big-endian'


Laut dem Author der SGILogLuv Erweiterung des Tiff Standards http://www.anyhere.com/gward/pixformat/tiffluv.html#calibration gibt das SToNITS den maximalen Wert des hdr Bildes an. Matlab generiert diesen Wert nicht und es ist nicht möglich, SToNITS zu setzen. Weis jemand ob dieser Wert relevant ist für den oben genannten Fehler?
In der Quelle von Ward (siehe Link) gibt Ward den Bildinput im XYZ Format an. Matlab Doku zur Tiff Klasse macht diesbzgl. keine Angaben und gibt auch kein Beispiel für LogLuv an.

vielleicht kann mir jemand von euch helfen und hat Erfahrung mit der Tiff Klasse.
Vielen Dank für alle Hilfe

greetz
Andreas
Private Nachricht senden Benutzer-Profile anzeigen


asxoniles
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 42
Anmeldedatum: 05.08.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2010, 14:50     Titel:
  Antworten mit Zitat      
stellt sich heraus das die resultierenden Fehler durch einen nicht augelisteten Fehler entstehen. die tonemap funktion wandelt die rgb werte in den Lab Farbraum. In dieser Funktion wird das rgb bild via reshape zu einem 2d array umgeformt. Hierbei entstehen auf mysteriöse Weise aus real Werten imaginäre Werte.

aus matlab "tonemap.m" :
Code:
function Lab = sRGB2Lab(rgb)
% Convert sRGB values in the range [0,1] to Lab via XYZ.

dims = size(rgb);
rgb = reshape(permute(rgb, [3 1 2]), [3, dims(1) * dims(2)]);


ich habe rgb zuvor mit iptcheckinput überprüft, wobei alle werte real sind. nach reshape entsteht der fehler. Leider ist reshape nicht einsehbar Sad
was kann ich jetzt noch machen?
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.