MATLABでRGB565とRGB24の画像形式を変換するにはどうすればよいですか?
-
01-10-2019 - |
質問
RGB565形式で画像を出力するマイクロプロセッサからRGBマトリックスを取得しています。これをMatlabに読み、RGB24形式に変換し、画像を出力したいと思います。どうすればいいですか?
解決
最初に、テキストファイルからMatlabのマトリックスにデータを読み取る必要があります。テキストファイルがどのような形式にあるのかわからないので、おそらく機能を使用する必要があることしか提案できません fscanf
あなたのすべての価値を読むために(おそらくタイプの uint16
)、その後、関数を使用して値をn by-mイメージマトリックスに変更する必要があります reshape
.
あなたがそれをすべてしたと仮定しましょう、そしてあなたは今n by-mマトリックスを持っています img
署名されていない16ビット整数の。まず、関数を使用できます 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-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');
他のヒント
RGB565は、5ビット赤、6ビットグリーン、5ビットブルーを意味します。 RGB24は、8ビット赤、8ビットグリーン、8ビットブルーでできています。
BitetとBitsetを使用すると、データを変換できます。
http://www.mathworks.de/access/helpdesk/help/techdoc/ref/bitget.html