2017-09-24 13 views
0
Iは、(ピクセル値が範囲内にあるべきである7ビット深度グレースケール画像に自分の元の8ビット深度のグレースケール画像を変換する

[0 127]変換8ビットグレースケール画像に7ビットのグレースケール画像

以下の構文を使用しますが、値が255のピクセルは128に変更されます(127.5128に変更されます)。この問題を解決するにはどうすればよいですか?[0 127]分割?

RGB = imread('camera_man128x128.png')% read 8-bit image 
RGB = RGB*0.5; %change pixel value to be in range to 0~127 
       %however pixels with value 255 change to 128. 
+0

MATLABでは7ビットのデータ型を使用できません。あなたは0-127の整数にデータを再スケーリングすることができます。あなたはそれが欲しいですか? –

+0

@SardarUsamaはい、それは正しいです。私は 'unit8'で値を保存したいだけですが、データのスケールを0〜127に変更したいだけです。 – VSB

+1

データをフロア化するか、除算後のデータの最大値で除算し、乗算する127 – Adriaan

答えて

1

データ型をdoubleに変換し、0.5を掛けます。負の無限大に丸めてからuint8に変換するには、floorを使用します。

RGB = uint8(floor(double(RGB)*0.5)); 
2

それを行うための最も簡単な方法は、bitshiftを使用することです:

RGB = bitshift(RGB, -1); 

これは2 による乗算に相当右側の各uint8値1のビットパターン、-1(すなわちシフト2で除算すると、255127になります。

関連する問題