7

RGB565 形式で画像を出力するマイクロプロセッサから RGB マトリックスを取得しています。これをMATLABに読み込み、RGB24形式に変換して画像を出力したい。どうすればいいですか?

4

2 に答える 2

9

最初に、テキスト ファイルから MATLAB の行列にデータを読み取る必要があります。テキスト ファイルの形式がわからないので、関数を使用しfscanfてすべての値 (おそらく 型uint16)を読み込む必要があることを示唆することしかできません。関数 を使用した N 行 M 列の画像行列reshape

ここまでの作業がすべて完了し、img符号なし 16 ビット整数の N 行 M 列の行列が得られたとします。まず、この関数bitandを使用して、赤、緑、青のコンポーネントのビットを抽出できます。16 ビット整数での位置は次のとおりです。

代替テキスト

次に、関数bitshiftと倍率による乗算を使用して、赤、緑、青の値を 0 ~ 255 の範囲にスケーリングし、関数 を使用して符号なし 8 ビット整数に変換しますuint8。これにより、 と同じサイズの 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て 3 つの色成分を N x M x 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

例:

ランダムに生成された uint16 値の 100 行 100 列の行列を使用し、上記の変換を適用すると、次の結果が得られます。

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

代替テキスト

于 2010-08-26T20:55:46.810 に答える
2

RGB565 は、5 ビットの赤、6 ビットの緑、5 ビットの青を意味します。RGB24 は、赤 8 ビット、緑 8 ビット、青 8 ビットで構成されています。

bitget と bitset を使用すると、データを変換できます。

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

于 2010-08-26T20:45:48.970 に答える