rgbImage = grayImage/max(max(grayImage));
oderWie konvertiert man in MATLAB eine Graustufenmatrix in eine RGB-Matrix?
rgbImage = grayImage/255;
Welche der oben rechts ist, und Grund?
rgbImage = grayImage/max(max(grayImage));
oderWie konvertiert man in MATLAB eine Graustufenmatrix in eine RGB-Matrix?
rgbImage = grayImage/255;
Welche der oben rechts ist, und Grund?
Um ein grayscale image zu einem RGB image, zu konvertieren gibt es zwei Fragen müssen Sie Adresse:
double
-Datentyp sollten die Bildpixelwerte Gleitkommazahlen im Bereich von 0 bis 1 sein. Bei Speicherung als -Datentyp sollten die Bildpixelwerte Ganzzahlen im Bereich von 0 bis 255 sein. Sie können Überprüfen Sie den Datentyp einer Bildmatrix mit der Funktion class
.Hier sind drei typische Bedingungen auftreten können:
Um ein uint8
oder double
Graustufenbild in ein RGB-Bild von den gleichen Datentyp, konvertieren können Sie die Funktionen nutzen repmat
oder cat
:
rgbImage = repmat(grayImage,[1 1 3]);
rgbImage = cat(3,grayImage,grayImage,grayImage);
Um einen uint8
gra zu konvertieren yscale Bild zu einem double
RGB-Bild, sollten Sie double
zuerst konvertieren, dann Skala von 255:
rgbImage = repmat(double(grayImage)./255,[1 1 3]);
Um ein double
Graustufenbild zu einem uint8
RGB-Bild zu konvertieren, sollten Sie von 255 zuerst skalieren, umwandeln dann uint8
:
rgbImage = repmat(uint8(255.*grayImage),[1 1 3]);
Per Definition hat ein RGB-Bild 3 Kanäle, was bedeutet, dass Sie eine dreidimensionale Matrix benötigen, um das Bild darzustellen. Also, die richtige Antwort ist:
rgbImage = repmat(255*grayImage/max(grayImage(:)),[1 1 3]);
Vorsicht beim grayImage
normalisieren. Wenn grayImage
uint8
ist, werden Sie in der Operation 255*grayImage/max(grayImage(:))
etwas Genauigkeit verlieren.
Auch das Normalisieren grayImage
hängt von den Daten ab. In Ihrer Frage, verwendete man zwei Methoden:
rgbImage = grayImage/max(max(grayImage));
, die das Graustufenbild so normalisiert, dass der Maximalwert in dem Bild zu 1
und
rgbImage = grayImage/255;
, die nur dann Sinn macht, wenn die Werte in grayImage
liegt in der 0-255
Bereich.
So hängt es wirklich davon ab, was Sie tun möchten. Wenn Sie jedoch ein RGB-Bild wünschen, müssen Sie Ihre Einkanal-Matrix in eine 3-Kanal-Matrix konvertieren.
ich dachte, dass der maximale Wert von 'rgbImage' per Definition ist '1', das' bezeichnet white', aber dies scheint nicht der Fall? – user198729
Nicht wirklich, es hängt von Ihrer Verwendung des Bildes ab. – Jacob
Ich habe gerade einen Test gemacht, scheint 'double (grayImage)' ist das gleiche wie 'grayImage'? Und sind'./'Und'. * 'Teile und Produktoperatoren in MATLAB? Scheint '. /' Ist das gleiche wie '/'? – user198729
@ user198729: Die Operatoren '. /' Und '. *' Bezeichnen * elementweise * Division und Multiplikation, so dass jedes Element der Bildmatrix durch 255 geteilt oder multipliziert wird. Sie können die Klasse (dh den Datentyp) überprüfen) einer Matrix durch Eingabe von 'class (greyImage)'. Während "double (greyImage)" und "greyImage" * als identisch erscheinen mögen, können sie jeweils eine andere Klasse sein (so dass sie ihre Werte auf unterschiedliche Weise speichern). – gnovice
Ich habe verschiedene Operationen ausprobiert, aber '/' und '. /' Geben nie ein anderes Ergebnis ... Und weil 'double (greyImage)' dasselbe wie 'greyImage' ist, ist' double (greyImage) ./ 255' auch das gleiche wie 'grayImage./255'.So, können Sie zwei Beispiele angeben, warum'./'und' double' notwendig sind? – user198729