2010-08-26 63 views
6

我從一個輸出RGB565格式圖像的微處理器獲取RGB矩陣。我想將它讀入MATLAB,將其轉換爲RGB24格式並輸出圖像。我該怎麼做呢?如何在MATLAB中轉換RGB565和RGB24圖像格式?

+0

您是否嘗試過使用[IMREAD閱讀了您的RGB565圖像到MATLAB(http://www.mathworks.com/access/helpdesk /help/techdoc/ref/imread.html)?當你這樣做時,什麼信息被列出來用於'X'和'map'?:'[X,map] = imread('your_file.bmp'); whos' – gnovice 2010-08-26 19:28:54

+0

沒有file.bmp。這是來自uP – NewImageUser 2010-08-26 19:37:23

+0

的原始RGB值,那麼您如何將這些值轉換爲MATLAB?如果你已經設法將它們放入一個變量中,那麼這個變量類型是什麼?它是uint16嗎? – gnovice 2010-08-26 19:42:04

回答

8

首先必須從文本文件中讀取數據到MATLAB中的矩陣。由於我不知道您的文本文件的格式,因此我只能建議您可能需要使用函數fscanf來讀取所有值(可能是類型uint16),那麼您可能需要重新設計值使用函數reshape轉換爲N×M圖像矩陣。

假設您已經完成了所有這些工作,並且您現在有一個無符號16位整數的N×M矩陣img。首先,你可以使用函數bitand提取位爲紅,綠,藍的成分,其位置在16位整數此處所示:

alt text

接下來,你可以使用函數bitshift並乘以比例因子以將紅色,綠色和藍色值縮放到0到25​​5的範圍,然後使用函數uint8將它們轉換爲無符號的8位整數。這會給你3個顏色分量矩陣的大小相同,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 

現在可以使用該函數cat把三個顏色成分爲N由-M×3 RGB圖像矩陣,則將圖像保存到一個RGB24位圖文件使用功能imwrite

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

實施例:

使用隨機生成的100逐100 UINT16的矩陣價值和應用上述轉換,這裏的結果:

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

Wow great answer!它真的幫了大忙! – NewImageUser 2010-08-26 23:39:29

相關問題