こんにちは、画像の品質を 8 ビットから 3 ビットに下げる簡単な方法を探しています。
これを達成する最も簡単な方法は何ですか?乾杯
こんにちは、画像の品質を 8 ビットから 3 ビットに下げる簡単な方法を探しています。
これを達成する最も簡単な方法は何ですか?乾杯
線形にスケーリングする場合は、各ピクセル値を 255/7 で除算します (つまり、元の画像が行列 I に格納されている場合、低解像度画像を J = I/(255/7) とします)。
更新:スケーリング定数の誤りが原因です。
次に例を示します。
MATLAB にタイプとして保存されているイメージがある場合uint8
、ピクセル値の範囲は 0 ~ 255 です。値を 3 ビットの精度のみに制限する (つまり、0 ~ 7 の数値のみを使用する) には、次のようにスケーリングできます。次の例のようなデータ:
>> data = uint8([0 23 128 200 255]); % Create some data of type uint8
>> scaledData = data*(7/255)
scaledData =
0 1 4 5 7
>> class(scaledData)
ans =
uint8
スケーリングされた値は 0 から 7 の範囲に制限されていますがuint8
、これが MATLAB で使用される最小の値であるため、それらを格納する変数は依然としてデータ型であることに注意してください。未使用の上位ビットは単に 0 です。
スケーリングされた画像データをファイルに出力する方法によっては (そうしたい場合)、格納された値の精度を 8 ビット未満に減らすことができる場合があります (たとえば、PNG ファイルは 4 ビット タイプを格納できます)。 )。
int8
Matlab の最小の整数値です。画像内の任意のピクセルの任意の値を右にシフトすることにより、int8 で 8 ビットのうち 3 つしか使用できません。
代わりにFixed-Point Toolboxにアクセスできる場合は、次numerictype
の簡単な表記法でオブジェクトを使用できます。
T = numerictype(s,w)
引用。Matlabのマニュアルから:
T = numerictype(s,w) は、固定小数点: 未指定のスケーリング、Signed プロパティ値 s、および語長 w をもつ numerictype オブジェクトを作成します。