データ型間でのイメージ データの変換
イメージのデータ型変換の概要
uint8
および uint16
イメージ データは MATLAB® の関数 double
を使用して double
に変換できます。ただし、データ型間で変換を行うと、MATLAB とツールボックスがイメージ データを解釈する方法が変化します。結果の配列がイメージ データとして適切に解釈されるようにするには、変換時にデータを再スケーリングするか、オフセットを適用しなければなりません。
データ型を簡単に変換するには、im2uint8
、im2uint16
、im2int16
、im2single
、および im2double
のいずれかの関数を使用します。これらの関数は、任意のイメージ データ型をもつ元のデータに再スケーリングとオフセットを自動的に適用します。たとえば次のコマンドは、範囲 [0,1] のデータをもつ倍精度の RGB イメージを、範囲 [0,255] のデータをもつ uint8
RGB イメージに変換します。
RGB2 = im2uint8(RGB1);
変換時の情報の損失
より少ないビット数を使用して数値を表現するデータ型に変換すると、通常、イメージ内の一部の情報が失われます。たとえば、uint16
グレースケール イメージは最高 65,536 の階調のグレーを格納できますが、uint8
グレースケール イメージは 256 の階調のグレーしか格納できません。uint16
グレースケール イメージを uint8
グレースケール イメージに変換すると、im2uint8
によって元のイメージのグレーの階調が "量子化" されます。つまり、元のイメージの 0 ~ 127 の値はすべて、uint8
イメージでは 0 になり、128 ~ 385 の値はすべて 1 になります。
インデックス付きイメージの変換
インデックス付きイメージを 1 つのストレージ データ型から別のストレージ データ型に変換することは必ずしも可能ではありません。インデックス付きイメージでは、イメージの行列にカラー データ自体ではなくカラーマップのインデックスのみが含まれているため、変換中にカラー データを量子化できません。
たとえば、300 色の uint16
または double
インデックス付きイメージを uint8
に変換することはできません。uint8
配列には 256 の値しかないためです。この変換を実行するには、まず関数 imapprox
を使用してイメージの色の数を減らさなければなりません。この関数は、カラーマップ内の色を量子化することで、イメージ内の各色の数を削減します。詳細については、imapprox を使用したインデックス付きイメージの色数の削減を参照してください。