rgbImage = grayImage/max(max(grayImage));
lubJak przekonwertować macierz skali szarości na macierz RGB w programie MATLAB?
rgbImage = grayImage/255;
Które z wyżej ma rację, a powód?
rgbImage = grayImage/max(max(grayImage));
lubJak przekonwertować macierz skali szarości na macierz RGB w programie MATLAB?
rgbImage = grayImage/255;
Które z wyżej ma rację, a powód?
przekonwertować grayscale image do RGB image istnieją dwa problemy trzeba rozwiązać:
double
wartości pikseli obrazu powinny być liczbami zmiennoprzecinkowymi z zakresu od 0 do 1. W przypadku zapisywania jako typ danych o wartości uint8
wartości pikseli obrazu powinny być liczbami całkowitymi z zakresu od 0 do 255. Można sprawdź typ danych matrycy obrazu za pomocą funkcji class
.Oto 3 typowe warunki mogą wystąpić:
Aby przekonwertować uint8
lub double
obraz w skali szarości na obraz RGB ten sam typ danych, można korzystać z funkcji repmat
lub cat
:
rgbImage = repmat(grayImage,[1 1 3]);
rgbImage = cat(3,grayImage,grayImage,grayImage);
Aby przekonwertować uint8
GRA yScale obraz do double
RGB obrazu, należy przekonwertować do double
, potem skali przez 255:
rgbImage = repmat(double(grayImage)./255,[1 1 3]);
Aby przekonwertować double
obraz w skali szarości do uint8
RGB obrazu, należy przeskalować przez 255, potem przekonwertować uint8
:
rgbImage = repmat(uint8(255.*grayImage),[1 1 3]);
Z definicji obraz RGB ma 3 kanały, co oznacza, że do przedstawienia obrazu potrzebna jest trójwymiarowa matryca. Tak, więc właściwą odpowiedzią jest:
rgbImage = repmat(255*grayImage/max(grayImage(:)),[1 1 3]);
Należy zachować ostrożność podczas normalizowania grayImage
. Jeśli grayImage
jest uint8
, stracisz pewną precyzję w operacji 255*grayImage/max(grayImage(:))
.
Również normalizacja grayImage
zależy od danych. W swoim pytaniu, należy stosować dwie metody:
rgbImage = grayImage/max(max(grayImage));
który normalizuje obraz w skali szarości tak, że maksymalna wartość na obrazie jest 1
i
rgbImage = grayImage/255;
który ma sens tylko wtedy, gdy wartości w grayImage
leżą w zakres 0-255
.
Więc to naprawdę zależy od tego, co chcesz zrobić. Ale jeśli chcesz uzyskać obraz RGB, musisz przekonwertować macierz jednokanałową na macierz 3-kanałową.
Myślałem, że z definicji maksymalna wartość '' 1 'rgbImage' jest, co oznacza 'white', ale to nie wydaje się dzieje? – user198729
Niezupełnie, to zależy od sposobu użycia obrazu. – Jacob
Właśnie wykonałem test, wydaje się, że 'double (grayImage)' jest tym samym co 'grayImage'? I czy operatory dzielenia i operatory'./'I'. * 'W MATLAB? Wydaje się, że '. /' Jest takie samo jak '/'? – user198729
@ user198729: Operatory '. /' I '. *' Oznaczają * element-mądry * dzielenie i mnożenie, tak aby każdy element matrycy obrazu był dzielony przez lub pomnożony przez 255. Możesz sprawdzić klasę (tj. Typ danych) macierzy, wpisując 'class (grayImage)'. Podczas gdy 'double (grayImage)' i 'grayImage' mogą * wyglądać tak, jakby były takie same, to każda z nich może być inną klasą (tak, że przechowują swoje wartości na różne sposoby). – gnovice
Próbowałem różnych operacji, ale '/' i '. /' Nigdy nie dają innego wyniku ... A ponieważ 'double (grayImage)' jest taki sam jak 'grayImage',' double (grayImage) ./ 255' jest również taki sam jak "grayImage./255". Czy możesz podać dwa przykłady pokazujące, dlaczego '. /' i 'double' są potrzebne? – user198729