Question

Je reçois une matrice RVB à partir d'un microprocesseur qui délivre une image au format RGB565. Je veux lire ceci dans Matlab, le convertir au format RGB24, et la sortie de l'image. Comment puis-je faire?

Était-ce utile?

La solution

Vous devez d'abord lire vos données à partir du fichier texte dans une matrice dans Matlab. Comme je ne sais pas ce que le format de votre fichier texte est, je ne peux que suggérer que vous aurez probablement besoin d'utiliser la fonction fscanf à lire dans toutes vos valeurs (probablement de type uint16 ), alors vous aurez probablement à remodeler les valeurs dans une matrice d'image N par M en utilisant la fonction reshape .

Supposons que vous avez fait tout cela, et vous avez maintenant une matrice N par M img d'entiers non signés 16 bits. Tout d'abord, vous pouvez utiliser la fonction bitand pour extraire les bits pour la rouge, vert, bleu et des composants, dont les positions dans le nombre entier sont illustrés ici sur 16 bits:

text alt

Ensuite, vous pouvez utiliser la fonction bitshift et la multiplication par un facteur d'échelle à l'échelle les valeurs de rouge, vert et bleu à une gamme de 0 à 255, puis de les convertir en huit bits non signé entier en utilisant la fonction uint8 . Cela vous donnera trois composants de couleur matrices la même taille que 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

Vous pouvez maintenant utiliser la fonction cat pour mettre les trois des composantes de couleur en un N par M par 3 matrice d'image RGB, puis enregistrer l'image dans un fichier bitmap d'RGB24 en utilisant la fonction imwrite :

imgRGB = cat(3, imgR, imgG, imgB);  % Concatenate along the third dimension
imwrite(imgRGB, 'myImage.bmp');     % Output the image to a file

Exemple:

En utilisant une matrice de 100 par 100 aléatoire des valeurs de uint16 et d'appliquer les conversions ci-dessus, voici les résultats:

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

text alt

Autres conseils

RGB565 moyens de 5 bits rouge, vert 6 bits et 5 bleu de bit. RGB24 est en 8 bits rouge, vert 8 bits et 8 bits bleu.

Utilisation bitget et BITSET vous pouvez convertir vos données.

http://www.mathworks.de/access /helpdesk/help/techdoc/ref/bitget.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top