質問

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

役に立ちましたか?

解決

最初に、テキストファイルからMatlabのマトリックスにデータを読み取る必要があります。テキストファイルがどのような形式にあるのかわからないので、おそらく機能を使用する必要があることしか提案できません fscanf あなたのすべての価値を読むために(おそらくタイプの uint16)、その後、関数を使用して値をn by-mイメージマトリックスに変更する必要があります reshape.

あなたがそれをすべてしたと仮定しましょう、そしてあなたは今n by-mマトリックスを持っています img 署名されていない16ビット整数の。まず、関数を使用できます bitand 16ビットの整数の位置をここに示します。

alt text

次に、関数を使用できます 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-by-m by-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 x 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');

alt text

他のヒント

RGB565は、5ビット赤、6ビットグリーン、5ビットブルーを意味します。 RGB24は、8ビット赤、8ビットグリーン、8ビットブルーでできています。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top