Main Content

データ型間でのイメージ データの変換

イメージのデータ型変換の概要

uint8 および uint16 イメージ データは MATLAB® の関数 double を使用して double に変換できます。ただし、データ型間で変換を行うと、MATLAB とツールボックスがイメージ データを解釈する方法が変化します。結果の配列がイメージ データとして適切に解釈されるようにするには、変換時にデータを再スケーリングするか、オフセットを適用しなければなりません。

データ型を簡単に変換するには、im2uint8im2uint16im2int16im2single、および 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 を使用したインデックス付きイメージの色数の削減を参照してください。