最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

クラス間でのイメージ データの変換

イメージ クラスの変換の概要

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 を使用したインデックス付きイメージの色数の削減 を参照してください。