2010-08-26 39 views
6

Tôi nhận được ma trận RGB từ bộ vi xử lý xuất ra hình ảnh ở định dạng RGB565. Tôi muốn đọc điều này vào MATLAB, chuyển đổi nó sang định dạng RGB24 và xuất hình ảnh. Làm thế nào để tôi làm điều này?Làm cách nào để chuyển đổi giữa các định dạng hình ảnh RGB565 và RGB24 trong MATLAB?

+0

Các bạn đã cố gắng đọc hình ảnh RGB565 của bạn vào MATLAB sử dụng [imread] (http://www.mathworks.com/access/helpdesk /help/techdoc/ref/imread.html)? Thông tin nào được liệt kê cho 'X' và' map' khi bạn làm điều này ?: '[X, map] = imread ('your_file.bmp'); whos' – gnovice

+0

không có tệp.bmp. Đây là các giá trị RGB thô đến từ một uP – NewImageUser

+0

Được rồi, vậy làm cách nào bạn nhận được các giá trị này vào MATLAB? Nếu bạn đã quản lý để đặt chúng trong một biến, các biến đó là gì? Có phải uint16 không? – gnovice

Trả lời

8

Trước tiên, bạn cần phải đọc dữ liệu từ tập tin văn bản vào một ma trận trong MATLAB. Vì tôi không biết định dạng tệp văn bản của bạn là gì, tôi chỉ có thể gợi ý rằng bạn có thể cần sử dụng hàm fscanf để đọc tất cả các giá trị của bạn (có thể là loại uint16), sau đó bạn có thể phải định lại lại các giá trị vào ma trận hình ảnh N-by-M bằng cách sử dụng hàm reshape.

Giả sử bạn đã thực hiện tất cả điều đó và giờ đây bạn có ma trận N-by-M img của số nguyên 16 bit chưa ký. Trước tiên, bạn có thể sử dụng chức năng bitand để trích xuất các bit cho các thành phần màu đỏ, xanh lá cây, và màu xanh, có vị trí trong số nguyên 16-bit được minh họa ở đây:

alt text

Tiếp theo, bạn có thể sử dụng chức năng bitshift và nhân với hệ số tỷ lệ để chia tỷ lệ các giá trị đỏ, xanh lá cây và xanh lam thành phạm vi từ 0 đến 255, sau đó chuyển đổi chúng thành số nguyên 8 bit không dấu bằng cách sử dụng hàm uint8. Điều này sẽ cung cấp cho bạn ba thành phần màu ma trận cùng kích thước như 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 

Bây giờ bạn có thể sử dụng chức năng cat để đặt các thành phần ba màu vào một ma trận hình ảnh RGB N-by-M-by-3, sau đó lưu hình ảnh vào một tập tin bitmap RGB24 sử dụng chức năng imwrite:

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

VÍ DỤ:

sử dụng được tạo ngẫu nhiên 100-by-100 ma trận của uint16 giá trị và áp dụng các chuyển đổi ở trên, đây là kết quả:

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

+0

Câu trả lời hay nhất! Nó thực sự đã giúp! – NewImageUser

2

RGB565 có nghĩa là 5 bit đỏ, xanh lục 6 bit và xanh lam 5 bit. RGB24 được làm bằng màu đỏ 8 bit, xanh lá cây 8 bit và xanh lam 8 bit.

Sử dụng bitget và bitet bạn có thể chuyển đổi dữ liệu của mình.

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

+0

Vì vậy, một khi tôi đã chuyển đổi nó sang RGB24, làm thế nào tôi có thể làm cho MATLAB hiển thị nó như một hình ảnh? – NewImageUser

+1

'imshow (rgbImage)' – Jonas

Các vấn đề liên quan