Pregunta

Me estoy haciendo una matriz RGB desde un microprocesador que emite una imagen en formato RGB565. Quiero leer esto en MATLAB, convertirlo a formato RGB24, y la salida de la imagen. ¿Cómo puedo hacer esto?

¿Fue útil?

Solución

Primero hay que leer los datos del archivo de texto en una matriz en MATLAB. Ya que no sé qué formato a su archivo de texto está en, sólo puedo sugerir que probablemente tendrá que utilizar la función fscanf leer en todos sus valores (probablemente de tipo uint16 ), entonces es probable que tenga para formar de nuevo los valores en una matriz de la imagen N-por-M usando la función reshape .

Vamos a suponer que usted ha hecho todo esto, y ahora tiene una matriz img N-por-M de enteros de 16 bits sin signo. En primer lugar, puede utilizar la función bitand para extraer los bits para el rojo, verde, y los componentes azules, cuyas posiciones en el entero de 16 bits se ilustran aquí:

text alt

A continuación, puede utilizar la función bitshift y la multiplicación por un factor de escala para escalar los valores de rojo, verde y azul a un rango de 0 a 255, a continuación, convertir a un 8 bits sin signo número entero utilizando la función uint8 . Esto le dará tres componentes de color matrices del mismo tamaño 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

Ahora usted puede utilizar la función de cat para poner los tres componentes de color en una matriz de la imagen RGB N-por-M-por-3, a continuación, Guardar la imagen a un archivo de mapa de bits RGB24 utilizando la función imwrite :

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

Ejemplo:

Uso de un 100 por 100 de la matriz generada de forma aleatoria de los valores uint16 y aplicando las conversiones anteriores, aquí están los resultados:

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

Otros consejos

medios RGB565 5 bit rojo, 6 bit verde y azul de 5 bits. RGB24 es de 8 bits rojo, poco verde y azul 8 de 8 bits.

El uso de bitget y BitSet puede convertir sus datos.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top