Schreiben Sie ein Bild mit floating-point-Werte
Mein code liest ein RGB-Bild, die Verarbeitung zu produzieren floating-point-Ergebnisse. Wie kann ich schreiben Sie diese Werte als Bild, die Aufrechterhaltung dieser floating-point-Werten in Matlab 7.6.0 (R2008a)?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es tatsächlich möglich, Passform 64 bit der pixel-Daten (D. H. die Anzahl der bits, die benötigt werden darstellen double-precision-floating-point-Wert) in bestimmte Bild-Formate, insbesondere eine PNG. Und Sie können sogar Daten wiederherstellen, die genau. Der Schlüssel zu codieren alles wie
uint16
Werte und verwenden Sie eine Truecolor-RGB-Bild (3 Farbebenen von 16-bit-Daten) zusammen mit alpha-Transparenz anzeigen (weitere 16 bits). Hier ist die Codierung Schritt:Haben Sie jetzt eine gültige Bild-Datei, obwohl es wahrscheinlich aussieht wie random Müll, wenn Sie es sehen. Nun, Sie können entschlüsseln, wie also:
Und eine überprüfung auf Gleichheit:
Die Anzahl der verwendeten bits zur Darstellung jedes element eines digitalen Bildes bezeichnet, ist das bit-Tiefe des Bildes. Die bit-Tiefe sagt uns die Anzahl der diskreten Stufen, die ein element des Bildes nehmen kann. Ob diese Elemente gespeichert werden, als einen integralen Typ oder einen floating-point-Typ ist irrelevant: die bit-Tiefe legt fest, wie viele diskrete Stufen es auch sein mag.
Wie die bit-Tiefe interpretiert wird, hängt davon ab, ob ein Bild in Graustufen oder Farbe. Zum Beispiel, ein 8-bit-Graustufen-Bild wird Intensitäten in [0,255], während eine 24-bit-Farbe Bild auch haben-Intensitäten in [0,255]. Diese Nomenklatur wird verwendet, da die Speicherung einer Farbe, die pixel mit 8-bit-rot -, grün-und blau-Komponenten benötigt 24-bit. Um Verwirrung zu vermeiden, color-Bilder werden oft als durch die Anzahl der bits pro Farbkanal. Zum Beispiel das PNG-format unterstützt bis zu 16 bit pro Kanal oder 48-bits insgesamt für truecolor (RGB) mit einem alpha-layer.
In der Dokumentation für imwrite listet die Formate und bit-tiefen verfügbar in MATLAB.
Speichern einer color-Bild (MxNx3-matrix) von MATLAB mit dem höchsten Maß an Präzision:
Wenn Sie mehr Präzision, müssen Sie Sie speichern Ihr Bild in einem Allgemeinen Daten-format eher als eine spezialisierte Bild-format.
Bild mit floating-point-Werte können geschrieben werden in tiff-format. Hier ist ein Beispiel:
Folgende Funktion schreibt eine single-precision-Graustufen-oder RGB-Bild in einer tif-Datei. Und Sie werden feststellen, dass diese Tage, Windows explorer kann mit den single-precision-Bild ist sehr gut, wenn die pixel-Werte liegen im Bereich von (0,1). Wenn Sie Lesen Sie es wieder, können Sie
imread
wie gewohnt.Wenn Ihr RGB-Wert ist außerhalb der Reichweite (0,1),knapp Transformation der RGB-Wert zwischen 0 und 1. Wenn Sie möchten, wiederherstellen der ursprünglichen float-Wert,Sie können speichern Sie das transformieren-Wert als Bestandteil des Bild-Datei-name.
Beim speichern eines Bildes, die der Betrachter braucht, um zu wissen, was ist die volle mögliche Bandbreite der Werte.
Die übliche Konvention ist, dass die Werte sind float, der Wertebereich ist [0..1], wenn die Werte uint8 den Bereich [0..255] etc.
Wenn Sie speichern Sie das Bild mit float-Werte wie 2.34, sollten Sie sich Fragen, wie die Zuschauer wissen, wie Sie zu interpretieren?
Meine Antwort ist: das können Sie nicht. Sollten Sie konvertieren Sie Ihre Werte zu einem gültigen Bereich und speichern Sie es dann. Zum Beispiel, wenn Ihr float-Wertebereich ist [0..10], können Sie multiplizieren alle Werte durch 1000 und sparen Sie als uint16. Auf diese Weise können Sie (fast) die Erhaltung der Genauigkeit der float-Wert.
Tiff
Klasse.