Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

プロファイルベースの色空間変換

2 つの色が、同じ CIE 色調の場合、同じ条件下で、見え方が一致するはずです。しかし、カラー イメージは、可視化環境の幅広い変化に対して作成されるので、CIE システムの簡単なアプリケーションの範囲を超えたものである必要があります。

このため、International Color Consortium (ICC) は、入力、出力、表示デバイスの間でのカラー データの通信に関して、Color Management System (CMS) を定義します。CMS は、特定のデバイス固有のカラー情報を含む "デバイス プロファイル" を使用します。CMS をサポートしているベンダーは、そのデバイスのカラー再生を特徴付けるプロファイル、すなわち、個々のプロファイルの内容を解釈し、必要なイメージ処理を行う Color Management Modules (CMM) を提供します。

デバイス プロファイルは、カラー マネージメント システムが、デバイス間でのカラー データを変換するために必要な情報を含んでいます。色空間間での変換は、ある領域空間からある範囲空間への数学的な変換です。プロファイルベースの変換において、領域空間は "ソース スペース" と呼ばれます。範囲空間は "デスティネーション スペース" と呼ばれます。ICC カラー マネージメント モデルにおいて、プロファイルは、ソース スペース、デスティネーション スペースを表すために使われます。

カラー マネージメント システムの詳細については、International Color Consortium の Web サイト https://www.color.org を参照してください。

ICC プロファイルの読み取り

ICC プロファイルをワークスペースに読み取るには、関数 iccread を使用します。この例で、関数は、カラー モニターを記述する色空間に関するものをプロファイルの中から読み取ります。

P = iccread('sRGB.icm');

関数 iccfind を使用してシステム上の ICC カラー プロファイルを検索するか、説明に特定のテキスト文字列を含む特定の ICC カラー プロファイルを検索することができます。ICC プロファイルの既定のシステム リポジトリであるディレクトリの名前を取得するには、iccroot を使用します。

iccread は、構造体 P にプロファイルの内容を出力します。すべてのプロファイルに、ヘッダー、タグテーブル、一連のタグ付き要素に関する情報が含まれています。ヘッダーには、デバイス クラス、デバイス色空間、ファイル サイズのようなプロファイルに関する一般的な情報を含んでいます。タグ付き要素またはタグは、CMM で使用される情報を含むデータ構造です。この構造体の内容の詳細については、関数 iccread のリファレンス ページを参照してください。

iccread を使用して、Version 2 (ICC.1:2001-04) と Version 4 (ICC.1:2001-12) ICC の両方のプロファイル形式を読み取ることができます。これらの仕様およびその相違点の詳細については、ICC Web サイト https://www.color.org を参照してください。

ICC プロファイル情報のファイルへの書き込み

ワークスペースから ICC プロファイル情報をファイルにエクスポートするには、関数 iccwrite を使用します。この例では、プロファイルをワークスペースに読み取ってから、プロファイル情報を新しいファイルに書き込みます。

P = iccread('sRGB.icm');
P_new = iccwrite(P,'my_profile.icm');

iccwriteP_new のファイルに書き込んだプロファイルは入力プロファイル P とは異なる可能性があるため、書き込んだプロファイルが返されます。たとえば、iccwrite は 2 番目の引数で指定されたファイル名と一致するように PFilename フィールドを更新します。

iccwrite は、出力ファイルを作成する際に入力のプロファイル構造体の有効性をチェックします。必須フィールドが表示されない場合、iccwrite はエラー メッセージを返します。ICC プロファイル データのファイルへの書き込みの詳細については、関数 iccwrite のリファレンス ページを参照してください。構造体が有効な ICC プロファイルであるかどうかを確認するには、関数 isicc を使用します。

iccwrite を使用すると、Version 2 (ICC.1:2001-04) または Version 4 (ICC.1:2001-12) ICC プロファイル形式の両方でプロファイル情報をエクスポートできます。プロファイル ヘッダーの Version フィールドの値によって形式のバージョンが決まります。これらの仕様およびその相違点の詳細については、ICC Web サイト https://www.color.org を参照してください。

ICC プロファイルを使用した RGB の CMYK への変換

この例では、モニターで使用される RGB 色空間からプリンターで使用される CMYK 色空間にカラー データを変換する方法を説明します。この変換には、モニター プロファイルとプリンター プロファイルの 2 つのプロファイルが必要です。この例では、ソースの色空間はモニター RGB、デスティネーションの色空間はプリンター CMYK です。

RGB 色空間データをインポートします。この例では RGB カラー イメージをワークスペースにインポートします。

I_rgb = imread('peppers.png');

ICC プロファイルを読み取ります。ソース プロファイルとデスティネーション プロファイルをワークスペースに読み取ります。この例では、ソース プロファイルとして sRGB プロファイルを使用します。sRGB プロファイルは、カラー モニターを記述する業界標準の色空間です。

inprof = iccread('sRGB.icm');

デスティネーション プロファイルの場合、この例では特定のカラー プリンターを記述するプロファイルを使用します。このプロファイルはプリンターのベンダーによって提供されています (次のプロファイルおよび役に立つ他のプロファイルは、www.adobe.com からダウンロードできます)。

outprof = iccread('USSheetfedCoated.icc');

色変換構造体を作成します。プロファイル内の色空間間の変換を定義する色変換構造体を作成しなければなりません。変換タイプ文字列を引数として、関数 makecform を使用して構造体を作成します。この例では、RGB カラー データから CMYK カラー データへの変換を定義する色変換構造体を作成します。色空間変換には、プロファイル接続空間 (PCS) と呼ばれるデバイス非依存の色空間への中間的な変換が含まれる場合がありますが、これはユーザーには透過的に実行されます。

C = makecform('icc',inprof,outprof);

変換を実行します。変換するカラー データと変換を定義する色変換構造体を引数として関数 applycform を使用して変換を実行します。この関数は、変換されたデータを出力します。

I_cmyk = applycform(I_rgb,C);

変換されたデータをファイルに書き込みます。CMYK データをエクスポートするには、形式を TIFF として指定して関数 imwrite を使用します。形式が TIFF でデータが m x n x 4 の配列の場合、imwrite によって CMYK データがファイルに書き込まれます。

imwrite(I_cmyk,'pep_cmyk.tif','tif')

CMYK データがファイルに書き込まれたことを確認するため、imfinfo を使用してファイルに関する情報を取得し、PhotometricInterpretation フィールドを参照します。

info = imfinfo('pep_cmyk.tif');
info.PhotometricInterpretation
ans =
   'CMYK'

プロファイルベースの変換におけるレンダリング インテントとは

多くのデバイスに対して、再生成された色の範囲は、PCS で表されている色の範囲よりかなり狭いものになります。このため、4 つのレンダリング インテント (または色域マッピング手法) をプロファイル形式で定義します。個々の描画意図は、美観と色の精度とのトレードオフになります。

プロファイルベースの色変換構造体を作成するときは、ソースのレンダリング インテントとデスティネーション プロファイルを指定できます。詳細については、makecform のリファレンス情報を参照してください。