Come posso convertire tra RGB565 e RGB24 formati di immagine in MATLAB?
-
01-10-2019 - |
Domanda
sto ottenendo una matrice RGB da un microprocessore che emette un'immagine in formato RGB565. Voglio leggere questo in MATLAB, convertirlo in formato RGB24, e in uscita l'immagine. Come posso fare questo?
Soluzione
Per prima cosa dovete leggere i dati dal file di testo in una matrice in MATLAB. Dal momento che non so che cosa formattare il file di testo è, posso solo suggerire che si avrà probabilmente bisogno di utilizzare la funzione di fscanf
da leggere in tutti i valori (probabilmente di tipo uint16
), allora si dovrà probabilmente per rimodellare i valori in una matrice dell'immagine N-per-M utilizzando la funzione di reshape
.
Supponiamo che hai fatto tutto questo, e ora avete un N-by-M matrice img
di unsigned interi a 16 bit. In primo luogo, è possibile utilizzare la funzione bitand
per estrarre i bit per il rosso, verde, blu e componenti, le cui posizioni nella interi a 16 bit sono illustrati qui:
Successivamente, è possibile utilizzare la funzione bitshift
e moltiplicazione per un fattore di scala per scalare i valori di rosso, verde e blu ad una gamma da 0 a 255, poi convertire in 8 bit senza segno intero utilizzando la funzione uint8
. Questo vi darà tre componente di colore matrici delle stesse dimensioni di img
:
imgR = uint8((255/31).*bitshift(bitand(img, 63488), -11)); % Red component
imgG = uint8((255/63).*bitshift(bitand(img, 2016), -5)); % Green component
imgB = uint8((255/31).*bitand(img, 31)); % Blue component
Ora è possibile utilizzare la funzione cat
di mettere i tre componenti di colore in una matrice immagine RGB N-per-M-by-3, quindi salvare l'immagine in un file bitmap RGB24 utilizzando la funzione imwrite
:
imgRGB = cat(3, imgR, imgG, imgB); % Concatenate along the third dimension
imwrite(imgRGB, 'myImage.bmp'); % Output the image to a file
Esempio:
Utilizzando una generata in modo casuale 100-by-100 matrice di valori Uint16 e applicando le conversioni precedenti, ecco i risultati:
img = randi([0 65535], 100, 100, 'uint16');
% Perform the above conversions to get imgRGB
subplot(1, 2, 1);
imshow(img);
title('Random uint16 image');
subplot(1, 2, 2);
imshow(imgRGB);
title('Corresponding RGB image');
Altri suggerimenti
mezzi RGB565 5 po 'rosso, 6 bit verde e 5 bit blu. RGB24 è fatto di 8 bit rosso, verde 8 bit e 8 bit blu.
bitget Utilizzare e bitset è possibile convertire i dati.
http://www.mathworks.de/access /helpdesk/help/techdoc/ref/bitget.html