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?

È stato utile?

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:

alt text

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');

alt text

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top