次の方法で共有


WCS 色域マップ モデル プロファイルのスキーマとアルゴリズム

概要

このスキーマは、色域マップ モデル プロファイル (GMMP) のコンテンツを指定するために使用されます。 関連するベースライン アルゴリズムについては、次のトピックで説明します。

基本的な GMMP スキーマは、一般的なヘッダー情報、推奨される Gamut Map Model プラグインへの省略可能な参照、および拡張タグで構成されます。

さらに、GMMP は、対象となる Gamut マップ モデルに関する明示的な情報を提供し、ターゲット モデルが使用できない場合に使用するベースライン フォールバック Gamut Map Model に関するポリシーを提供します。 スキーマにはプライベート拡張情報を含めることができますが、他の余分な情報は含まれません。

Gamut マップ モデル プロファイルのアーキテクチャ

Gamut Map モデル プロファイルを示す図。

出力デバイスの着色剤空間のサンプリングは、分数ステップで 0.0 から 1.0 までの着色剤を反復処理し、各ステップで各色材のすべての組み合わせを蓄積し、DM::D eviceToColorimetricColors メソッドを使用してデバイスの着色剤空間から色の外観空間に変換し、CAM::ColorimetricToAppearanceColors メソッドを使用して行います。 RGB に対してこれを行う方法の例を次に示します。

For (red= 0.0; red <= 1.0; red += redStep) {

     For (green = 0.0; green <= 1.0; green += greenStep) {

          For (blue = 0.0; blue <= 1.0; blue += blueStep) {

               Colorants[0] = red; colorants[1] = green; colorants[2] = blue;

               pRGBDM->DeviceToColorimetricColors(1, colorants, &amp;XYZ);

               pCAM->ColorimetricToAppearanceColors(1, &amp;XYZ, &amp;JCh);

          }

     }

}

色域境界の生成

色域境界には、プライマリ、ニュートラル サンプル、シェルの 3 つのコンポーネントがあります。 プライマリは、デバイスのプライマリを取得し、DeviceToColorimetric/ColorimetricToAppearance 変換を適用することによって生成されます。 ニュートラルサンプルは、中性領域のデバイス着色剤空間をサンプリングし、同じ変換を適用することによって生成されます。 3 つの着色剤デバイス (RGB または CMY) の場合、中性サンプルは、すべての着色剤が等しい (例: R == G == B) と定義されます。CMYK の場合、ニュートラル サンプルは C == M == Y == 0 と定義されます。

色域境界の作成に使用されるデータに影響を与える要因は、データ サンプル (ベースライン デバイスのみ) と表示条件です。 色材空間の完全サンプリングを行うために使用されるステップ サイズ (モニター用と妥当なシェル用) は内部定数であり、外部操作には使用できません。 表示条件を変更すると、色の外観モデル (CAM) の動作が変わり、色域境界の形状が変更されるため、表示条件プロファイルに関連付けられた色域境界を生成する必要があります。 ベースライン プリンターやキャプチャ デバイスの場合と同様に、サンプル データを使用する場合、サンプルは参照色域の形状に大きな影響を与え、モデル自体の動作に影響します。

カメラやスキャナーなどの入力デバイスでは、参照シェルともっともらしいシェルを生成するためにさまざまなサンプリングが使用されます。 参照シェルは、デバイス モデルの初期化に使用される測定値から生成されます。 もっともらしいシェルは、出力デバイスの前の図と同様に生成されます。 違いは、一般的なターゲットを入力すると、完全に飽和した値 (R、G、または B = 255) が得られない点です。 これらの値を推定するには、デバイス モデルを使用して推定する必要があります。

GMMP スキーマ

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
  xmlns:gmm="http://schemas.microsoft.com/windows/2005/02/color/GamutMapModel"
  xmlns:wcs="http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes"
  targetNamespace="http://schemas.microsoft.com/windows/2005/02/color/GamutMapModel"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  elementFormDefault="qualified"
  attributeFormDefault="unqualified"
  blockDefault="#all"
  version="1.0">

  <xs:annotation>
    <xs:documentation>
      Gamut Map Model profile schema.
      Copyright (C) Microsoft. All rights reserved.
    </xs:documentation>
  </xs:annotation>

  <xs:import namespace="http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes" />

  <xs:element name="GamutMapModel">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ProfileName" type="wcs:MultiLocalizedTextType"/>
        <xs:element name="Description" type="wcs:MultiLocalizedTextType" minOccurs="0"/>
        <xs:element name="Author" type="wcs:MultiLocalizedTextType" minOccurs="0"/>
        <xs:element name="DefaultBaselineGamutMapModel">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="HPMinCD_Absolute"/>
              <xs:enumeration value="HPMinCD_Relative"/>
              <xs:enumeration value="SGCK"/>
              <xs:enumeration value="HueMap"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <xs:element name="PlugInGamutMapModel" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:any namespace="##other" processContents="skip"
                minOccurs="0" maxOccurs="unbounded" />
            </xs:sequence>
            <xs:attribute name="GUID" type="wcs:GUIDType" use="required"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="ID" type="xs:string" use="optional" />
    </xs:complexType>
  </xs:element>
</xs:schema>

GMMP スキーマ要素

GamutMapModel

この要素は、次のサブ要素のシーケンスです。

  1. ProfileName 文字列、
  2. DefaultBaselineGamutMapModel、
  3. 省略可能な説明文字列、
  4. 省略可能な Author 文字列、
  5. 省略可能な PlugInGamutMap、および
  6. オプションの ExtensionType。

検証条件 : 各サブ要素は、独自の型によって検証されます。

名前空間

xmlns:gmm="http://schemas.microsoft.com/windows/2005/02/color/GamutMapModel"

targetNamespace="http://schemas.microsoft.com/windows/2005/02/color/GamutMapModel"

バージョン

Windows Vista の最初のリリースを含むバージョン "1.0"。

検証条件 : Windows Vista では 1.0。 <バージョン 2.0 は、形式の破壊的変更をサポートするためにも有効です。

ドキュメント

Gamut Map Model Profile スキーマ。

Copyright (C) Microsoft。 All rights reserved.

検証条件 : 各サブ要素は、独自の型によって検証されます。

DefaultBaselineGamutMapModel 型

UINT 型

列挙値:

"MinCD\_Absolute" "MinCD\_Relative" "SIG\_KNEE" "HueMap"

検証条件 : 値は、上記のいずれかの列挙と一致する必要があります。

PlugInGamutMapType

この要素は、GUID GUIDType と任意のサブ要素のシーケンスです。

検証条件 : GUID は、GMM PlugIn DLL GUID と一致するために使用されます。 最大 100,000 個のカスタム サブ要素があります。

ExtensionType

この要素は、任意のサブ要素のシーケンスです。

検証条件 : 最大 100,000 個のサブ要素を指定できます。

GMMP ベースライン アルゴリズム

ニュートラル軸の配置

ほとんどの色域マッピング アルゴリズムは、ソース デバイスのニュートラル軸をターゲット デバイスのニュートラル軸にマッピングするという目標を持っています。つまり、白は白、黒から黒、灰色から灰色になります。 これは、ターゲット デバイスの明るさ範囲に合わせてソースカラーの明るさをスケーリングすることによって部分的に対処されます。 しかし、それは問題に完全には対処しません。

ほとんどのイメージングデバイスの物理的性質は、白のデバイスの色度がデバイスの黒の色度と正確に一致しないということです。 たとえば、モニターの白は 3 つのプライマリの色度と相対輝度の合計に依存し、モニター黒は表示面の反射率に依存します。 プリンターの白は紙の色度に依存し、プリンターの黒は使用するインクまたはトナーに依存します。 デバイスの白を外観空間のニュートラル軸 (ゼロとまったく等しいクロマ) にマップする外観モデルでは、デバイスの黒がニュートラル軸にマップされません。 明度が高まるにつれて目は彩度の違いに敏感であるため、中間灰色はデバイスの黒よりもさらに多くの色として表されます。 (図 1 は、中立軸の曲率を 2 次元で示しています。実際、ニュートラル軸は 3 次元でより複雑な曲線を形成します)。

CAMは、これらのデバイスニュートラルカラーが色に見えると予測していますが、実際のオブザーバーはこれを補っているようです。 ほとんどの人は、これらのデバイスのニュートラル値を色分けとは見なしません。 したがって、ほとんどの色域マッピング モデルでは、ソースニュートラルをデバイスニュートラルにマップし続ける必要があります。

ソース ニュートラルをデバイスのニュートラルにマップするには、色域マッピング アルゴリズムを適用するときに、ソースとターゲットの色域の境界と各ピクセルを調整します。 まず、ソース カラーの明るさにあるソース デバイスのニュートラル軸が、外観空間のニュートラル軸に直接当たるように、ソースカラーの各値を調整します。 (図 1 の左側を参照)。次に、ターゲット デバイスの色域境界の説明を調整して、ターゲット デバイスの色域境界の色の明度が、ターゲット デバイスのニュートラル軸の各色が、外観空間のニュートラル軸に直接当たるようにします。 (図 1 の右側を参照)。

左側の [ソースの色域境界] グラフと右側の [変換先の色域境界] を示す図。

図 1 : ニュートラル軸の配置を示します。 左: ソース デバイスのニュートラル軸を基準にソース ポイントを調整します。 右: 移動先の色域境界の説明を基準にして、移動先の色域境界の説明を調整します。

各ソース ピクセル値は、その明度値でニュートラル軸に対して調整されることに注意してください。 これにより、ソース デバイスのニュートラルが外観モデルのニュートラル軸に確実に当たります。 また、その明るさで他のすべての色を同じ量だけシフトして、ソースの色域の表現に不連続性がないようにします。 ソース デバイスのニュートラルは、異なる明るさレベルで均等に色分けされないので、異なる明るさレベルで異なる量だけシフトする必要があります。 明らかに、これは単純な変換ではありません。

宛先デバイスの値の処理は、もう少し難しくなります。 最初は、宛先の色域境界全体を同様の方法で調整しますが、ターゲット デバイスのニュートラル軸に対して相対的に調整します。 これは、右側の図 1 に示されています。 この調整により、ソース グレーの値が宛先の灰色の値にマップされるようになります。 これは、色域マッピング アルゴリズムが動作する空間です。

ただし、この領域では、宛先デバイスの実際の動作が正確に記述されていません。 色域マップされた色が外観モデルとターゲット デバイス モデルに渡される前に、マッピングを反転する必要があります。 マップされたすべての値を、先ほどターゲット デバイスのニュートラル軸に適用されたオフセットの反対の値でオフセットします。 これにより、変換先のニュートラル軸が CAM によって最初に表された値にマップされます。 これは、色域境界とすべての中間値に対して同じ処理を行います。

ターゲット デバイスのニュートラル軸の配置を元に戻すためのグラフを示す図。

図 2 : ターゲット デバイスのニュートラル軸の配置を元に戻す

最小色差 (MinCD)

最小色差 (MinCD) 相対バージョンと絶対バージョン - ICC 比色意図に相当します。

Note

MinCD GMM は、"ロゴ" 色 (スポット カラー) を含むグラフィックスとライン アートのマッピング、色域外の色を持つロゴの色のグラデーション、および変換の校正の最終段階に適しています。 MinCD GMM は、完全にコピー先の色域内にある写真画像に使用できますが、写真画像の一般的なレンダリングにはお勧めしません。 色域外の色を目的の色域の色にマッピングすると、色域境界を越える滑らかなグラデーションのトーンやクロマの不規則性など、不要なアーティファクトが発生する可能性があります。 写真画像には BasicPhoto をお勧めします。 写真またはコントーンイメージに BasicPhoto 以外の色域マッピングが必要な場合は、MinCD を使用する代わりに、そのマッピングを実装するプラグイン GMM を作成する必要があります。

 

色域内の色は変更されません。 色域外の色の場合、色域外入力ポイントからの最小色距離を持つ宛先の色域内の点を見つけることで、明度と彩度が調整されます。 色の距離は JCh 空間で計算されます。 ただし、明度 (J) の距離とクロマ (C) または色相 (h) の距離は異なる方法で重み付けされます。 彩度に依存する重み関数は、明度の距離に使用され、しきい値のクロマに達するまで、小さなクロマの場合は重量が小さく、大きなクロマの場合は大きくなります。その後、重量は 1 に留まります。つまり、クロマまたは色相の距離と同じ重量になります。 これは、CMC と CIEDE2000 の推奨される使用方法に従います。 相対比色と絶対比色の 2 つのバリエーションがあります。

相対比色: まず、前に説明したように、ソースとターゲットのニュートラル軸を揃えます。 次に、調整されたソースの色を調整された宛先の色域境界にクリップします。 (図 4 を参照してください。一定の明度に沿ったクロマ マッピング。前に説明したように、宛先デバイスの値を再調整します。 モノクロ先の色域境界の場合、クロマクリッピングとは、クロマ値(C)がゼロ(0.0)に設定されていることを意味する。

絶対比色: これは相対比色に似ていますが、ソースとターゲットのニュートラル軸の配置はありません。 ソース値は、変換先のニュートラル軸に直接クリップされます。 ソースとターゲットの両方の色域境界がモノクロの場合、動作は相対比色バリアントと同じであることに注意してください。つまり、ニュートラル軸の配置が実行され、クロマが 0 にクリップされます。 これにより、媒体と着色剤が大きく異なる場合でも、合理的な出力が得られます。

調整された色域への MinCD クリッピングのグラフを示す図。

図 3 : 調整された色域への MinCD クリッピング

BasicPhoto

概要

BasicPhoto - ICC 優先、図、または知覚の意図に相当します。

このアルゴリズムは、CIE156:2004 の CIE TC8-03 によって記述されたクロマ依存のシグモイドの明度マッピングとカスプ膝スケーリング (SGCK) のバリアントです。 このバリアント アルゴリズムでは、デュアル色域シェルを使用した色域境界記述子 (GBD) がサポートされます。つまり、参照シェルともっともらしいシェルを持つ GBD。 SGCK アルゴリズムは、もともと GBD 内の 1 つの色域シェルのみを前提としており、GCUSP (Morovic、1998) からのクロマ依存と組み合わせて、Braun と Fairchild によって提案されたシグモイドの明度マッピングと膝関数スケーリング (1999 年) を組み込んだSIG_KNEE アルゴリズム (Braun 1999) に基づいています。 これは、認識された色相の一定 (たとえば、色相補正 Jab の色相角度) を維持し、クロマに依存する方法で適用される汎用 (画像に依存しない) シグモイドの明度スケーリングと 90% の膝関数クロマを使用します。 バリアントは、一定の明るさの線に沿ってスケーリングされます。

単一色域シェルの場合

ソースとターゲットの両方の GBD に 1 つの色域シェルしかない場合は、アルゴリズムを確認すると役立ちます。 この場合、アルゴリズムは次の計算で構成されます。

最初に、次の式を使用して初期明度マッピングを実行します。

初期明度マッピングの数式を示します。 (1)

Jₒは本来の明るさであり、JRは再生明度です。

2 番目の明度マッピングの数式を示します。 (2)

ソースの色域境界がモノクロの場合、中間軸の配置により、モノクロ境界のクロマ値は 0 になります。 これにより、C が 0 に等しい場合に縮退します。 この場合、 pC は 1 に設定されます。

pCは、元の色の彩度に依存するクロマ依存重み係数(Morovic、1998)であり、CおよびJSは、シグモイド関数を使用してマップされる元の明度の結果である。

 

JS(ブラウンとフェア子、1999)を計算するために、元と再生の明度値の間の1次元ルックアップテーブル(LUT)は、最初に離散累積正規関数(S)に基づいて設定される。

J s を計算する数式を示します。 (3)

ここで、x ₀ と S はそれぞれ正規分布の平均と標準偏差であり、i = 0,1,2...m,m は、LUT で使用されるポイントの数です。 s i は、im% の累積正規関数の /値です。 パラメータは、再生色域の黒点の明度に依存し、表1から補間することができる。 これらのパラメーターの計算の詳細については、「Braun and Fairchild (1999, p. 391)」を参照してください。

J minOut

5.0

10.0

15.0

20.0

x ₀

53.7

56.8

58.2

60.6

S

43.0

40.0

35.0

34.5

表 1 : BasicPhoto の光度圧縮パラメーターの計算

S を明度マッピングの LUT (S LUT ) として使用するには、まず [0,100] の明度範囲に正規化する必要があります。 正規化されたデータは、式 4 に示すように、変換先デバイスの動的範囲にスケールされます。 ここで、Jmin\ OutJmax\ Out は、それぞれ再生媒体の黒点と白点の明度の値です。

明度マッピングの LUT としての S の数式を示します。 (4)

この時点で、S LUT から J S 値を取得するには、それに含まれる対応する J O' 値と J S 値の m ポイント間を補間し、次の式を入力として使用します。

J S 値を取得する数式を示します。 (5)

J minIn は元の媒体の黒点の明度値、J maxIn は元の媒体の白色点の明度値、J O は元の明度です。 後で参照する場合は、次の図 4 に示すように、概要を示す方法で定義されたシグモイド関数を S で示すことができます。

一定の明度に沿った彩度マッピングのグラフを示す図。

図 4 : 一定の明度に沿った彩度マッピング

第2に、宛先色域境界が色である場合は、一定の明度(l)の線に沿って彩度を圧縮し、次のように圧縮を行う。

彩度圧縮を実行する数式を示します。 (6)

ここで d、lE からの距離を表します。g は中色域境界を表します。r は再生を表します。元の図 5 を参照してください。

BasicPhoto の彩度と明度圧縮のグラフを示す図。

図 5 : BasicPhoto での彩度と明度の圧縮

コピー先の色域境界がモノクロの場合、彩度の値は 0 に切り取られます。

3 つ目は、MinCD クリップ (前述) を使用して、残留エラーを排除します。

ブラック エンハンスメント

上記のアルゴリズムは、コピー先がプリンター デバイスの場合に黒を改善するように変更できます。 この問題は 、JminOut の選択に関係しています。これは通常、プリンターが生成できる最も暗い色には対応していません。

より具体的には、最も密度の高い色は、100%のインクを入れて得られる(または可能な限り最大のカバレッジ、GCR/インク制限が有効である場合)、通常、色の外観空間に「中立」ではない。 図 6 を参照してください。 つまり、ターゲットデバイスにニュートラル最小明度が使用されている場合、構築された明度スケーラーは、プリンターで達成できる最も高い密度ではない最小の明度にマップされます。 プリンターに対するモニターのその他のユース ケースを検討してください。 モニターの黒の R=G=B=0 は、最も密度が高くないものとして印刷されます。 画質への影響は、深度とコントラストが不足していることです。

デバイスの黒いポイントがニュートラルの最小明度よりも暗くなる可能性があることを示す図。

図 6 : デバイスの黒い点は、ニュートラルの最小明度よりも暗い場合があります。

宛先の "device black point" が Jkakbk/JkCkh k であるとします。 C k が 0 でない場合、デバイスの黒い点は CAM02 に対して中立ではありません。 光度スケーラーの構築において宛先「中立最小明度」にJkを使用する場合;つまり、次の設定を行います。

JminOut = Jk

ソースガマット シェルに適用すると、図 7 に示す構成が取得されます。 この図では、色相平面は h k に対応しています。

宛先デバイスの黒いポイントを持つ変更された明度スケーラーを示す図。

図 7 : 宛先デバイスの黒い点を持つ変更された明度スケーラーを使用したジオメトリ

後続の彩度圧縮アルゴリズムを続行できるようにするには、ソースシェルとターゲットシェルの最大および最小の明度を調整する必要があります。 これは、J neutralMin と J k の間でターゲット シェルを調整し、ポイントを左にシフトすることで実現できます。 さらに、この変換は、h k に対応する色相平面だけでなく、Jab 空間全体に適用する必要があります。

変換は次の値です。

変換の数式を表示します。

図 8 は、変換の効果を示しています。

宛先デバイスの黒いポイントを持つ変更された明度スケーラーの効果を示す図。

図 8 : 宛先デバイスの黒い点を持つ変更された明度スケーラーを使用したジオメトリ

通常の彩度圧縮アルゴリズムを適用した後、ポイントを "シフトバック"する必要があります。つまり、最終的にマップされた色を取得するには、逆変換を適用する必要があります。

逆変換の数式を表示して、最終的なマップされた色を取得します。

デュアルガマットシェルの場合

目標は、単一の色域シェルのSIG_KNEEを、ソース デバイス GBD または宛先デバイス GBD が 2 シェル構造である場合に一般化することです。 内部シェルは参照シェルと呼ばれ、外側のシェルは Plausible シェルと呼ばれます。 次のケースを検討する必要があります。

(a) ソース GBD と宛先 GBD の両方に 2 シェル構造があります。

(b) ソース GBD には 2 シェル構造があります。宛先 GBD にはシェルが 1 つだけ含まれています。

(c) ソース GBD のシェルは 1 つだけです。宛先 GBD には 2 シェル構造があります。

(d) ソース GBD と宛先 GBD の両方にシェルが 1 つしかありません。

Case (d) は、前に説明した単一のガマット シェルの場合です。 ケース (a)、(b)、および (c) の場合は、明度の再スケーリングを一般化して、デュアル シェル構造の追加情報を使用できます。 (b) と (c) で、ソースまたは宛先にシェルが 1 つしかない場合は、後続のセクション「誘導参照シェル」で説明する "誘導参照シェル" を導入します。2 つのシェルの一般的なアルゴリズムについては、case (a) について説明します。 誘導参照シェルの構築を説明した後、ケース (b) と (c) にもアルゴリズムを適用できます。 彩度圧縮の場合、圧縮率は使用可能な最大シェルによって決定されます。 言い換えると、もっともらしいシェルと参照シェルの両方が使用可能な場合は、もっともらしいシェルが使用されます。それ以外の場合は、参照シェルが使用されます。

一般化された明度の再スケーリング

ソース GBD と宛先 GBD の両方に 2 つのシェルが存在するということは、ソース GBD から宛先 GBD 内の対応するセットに 4 つのポイントのセットをマップする必要があることを意味します。

4 つのポイントのセットを対応するセットにマップする方法を示します。

下付き文字の意味は次のとおりです。

o または r: "original" (source) または "reproduction" (destination)

min または max: 最小ニュートラル明度または最大ニュートラル明度

pla または ref: もっともらしいシェルまたは参照シェル

各 4 倍の順序は、これらのポイントの予想される相対的な大きさでもあります。

明度再スケーリング マップでは、1 つのシェルと同じ最初の 2 つの数式が使用されますが、 J S は次のように段階的に定義されます。

J S の数式を段階的に示します。 (7)

言い換えると、参照シェル内ではシグモイドであり、外側は線形です。 図 9 を参照してください。

2 シェル GBD の Lightness Rescaling 関数のグラフを示す図。

図 9 : 2 シェル GBD の明度再スケーリング関数

誘導参照シェル

1 つの GBD に 1 つのシェルがあり、もう 1 つの GBD に 2 つのシェルがある場合は、1 つのシェルのみを含む GBD 用の "参照シェル" を作成する必要があります。 参照シェルと呼ばれる既存のシェルは、"Plausible Shell" に変更されます。実際、完全な Jab 空間にシェルを作成する必要はありません。 明度再スケーリングでは J maxJ min のみが使用されるため、誘導される参照シェルに対してこれらの値を構成するだけで済みます。 2 つのシェルを持つ GBD に応じて、2 つのケースがあります。

ケース 1: ソース GBD には 2 つのシェルがあります。宛先 GBD には 1 つのシェルがあります。

中立軸上のターゲット誘導参照シェルを決定します。つまり、シェルの J r,\ min,\ ref と J r,\ max,\ ref 。 これは、次のアルゴリズムを使用して行われます。

変換先の誘導参照シェルを決定するアルゴリズムを示します。

要因は? low と ? 高は 、もっともらしいシェルと参照シェルの分離を制御します。 値 1 は、J 最小値 または J mₐₓ 値が一致することを意味します。 これらの値は、ソース参照シェルとソースの Plausible Shell から "誘導" されます。

ソース参照シェルとソースの Plausible Shell の値の数式を示します。

"ファッジ係数" F low と F high は、0 から 1 の間にある必要がある 調整可能なパラメーター です。 値が 0 の場合、J min または J mₐₓ はソース シェルから直接誘導されます。 この場合は、F low = 0.95、F high = 0.1 を選択します。

ケース 2: ソース GBD には 1 つのシェルがあります。宛先 GBD には 2 つのシェルがあります。

中立軸上のソース誘導参照シェルを決定します。つまり、シェルの J o,\ min,\ ref と J o,\ max,\ ref 。 これは、次のアルゴリズムを使用して行われます。

中立軸上の誘導先参照シェルを決定するアルゴリズムを示します。

繰り返しますが、要因は? low と ? 高は 、妥当なシェルと参照シェルの間の分離を制御します。 値が 1 の場合、J 最小値 または J mₐₓ 値が一致します。 これらの値は、ソース参照シェルとソースの Plausible Shell から "誘導" されます。

参照シェルとソースの妥当性シェルの分離を制御するアルゴリズムを示します。

CIE TC8-03 推奨事項からの変更の理由

BasicPhoto は、次の点で CIE TC8-03 の推奨事項とは異なります。

  1. クロマは、カスプに向かって圧縮されるのではなく、一定の明度の線に沿って圧縮されます。
  2. 明るさの範囲では、色域境界が中立軸を横切る点ではなく、色域で最も暗い色の明るさが使用されます。
  3. 変換内の任意の色域境界に 2 つのシェルがある場合、BasicPhoto は参照色域シェルともっともらしい色域シェルの両方をサポートします。
  4. BasicPhoto は CIECAM02 を使用します。CIECAM97s を使用して 400 cd/m2 で D65 に変換してから、RIT IPT カラー スペースを使用する代わりに。

最初の変更は、cusp に圧縮を使用するときに発生する可能性があるトーン反転の問題を防ぐために行われました。 図 10 に示すように、cusp 圧縮によってトーン反転が発生する可能性があります。 これは、高い彩度の色が低い彩度の色よりも明るい場合に発生する可能性があります。 SGCK は明度と彩度の両方で各ピクセルを個別に圧縮するため、圧縮後のピクセル値間の明度関係を維持することは保証されません。 一定の明るさの線を圧縮するこの決定のよく知られている欠点は、明るい黄色で起こるように、先の色域境界が非常に平坦な領域で、クロマの損失を受ける可能性があるということです。

SGCK によって引き起こされるトーン反転を示す図。

図 10 : SGCK によるトーン反転

ティーポットの元の画像を表示します。ティーポット イメージの SGCK 結果を示します。ティーポット イメージの BasicPhoto の結果を示します。

図 11 : 元の画像、SGCK の結果、および BasicPhoto の結果

図 11 は、このトーン反転を示しています。 左側には、デジタルカメラによってキャプチャされた元の画像があります。中央では、SGCKによって再現された画像。右側には、BasicPhoto で再現された画像が表示されます。 左側の画像はデジタルカメラのカラースペースにあり、中央と右の画像はLCDビデオディスプレイのカラースペースにあります。 元の画像では、下が座っているテーブルクロスを反映しているため、急須の上部は下部よりも暗くなります。 SGCK画像では、トーン反転のため、上の部分は実際には下部よりも軽くなります。 また、急須の下部に反映されたアイテムを見るのは困難です。 右側では、BasicPhoto はトーンの反転を修正し、反映された記事はより明確に区別できます。

2 つ目の変更は、最も黒い黒が CIECAM02 中立軸に直接落ちないプリンターでのほぼ黒い色の再現を改善するために行われました。 次の図 12 は、sRGB に変換されたイメージを示しています。SGCKを使用したRGBインクジェットプリンタ用に再現された。と BasicPhoto を使用して同じプリンター用に再現します。 中央の画像は完全なデバイスを黒で使用していないため、元のデバイスに見られるコントラストが欠けています。 コントラストは BasicPhoto で復元されます。

プレイセットの元の画像を表示します。SGCK を使用した R G B インクジェット プリンターで再現されたプレイセットの画像を示します。BasicPhoto を使用した R G B インクジェット プリンターで再現されたプレイセットの画像を示します。

図 12 : 強化された黒

3つ目の変更は、デジタルカメラの色再現を改善するために行われました。 特に、基準ターゲットを使用してデジタルカメラがプロファイリングされている場合、測定された色から構築された色域境界の説明には、実際のシーンでキャプチャされる可能性のあるすべての色が含まれていない可能性があります。 すべての色を測定された色ターゲットの色域にクリッピングするのではなく、外挿で妥当な色域境界を生成できます。 BasicPhoto アルゴリズムは、このような外挿された色域境界をサポートするように設計されています。

CIECAM02 は色域マッピングに適しているため、4 番目の変更が行われました。 TC8-03 が推奨する、400 cd/m2 でデバイスの色を D65 に変換してから、RIT IPT 色空間を使用するプロセスは、計算負荷が高く、時間がかかります。

Hue マッピング

HueMap は ICC 飽和意図に相当します。

ソースの色域境界またはコピー先の色域境界にプライマリが含まれていない場合、このモデルは前のセクションで説明した MinCD (相対) モデルに戻ります。たとえば、プライマリを決定できないデバイス (4 つ以上のチャネルを持つ ICC プロファイル) またはモノクロ ICC プロファイル。

このアルゴリズムは、最初に入力色の値の色合いを調整します。 次に、せん断マッピングを使用して、明度と彩度を同時に調整します。 最後に、色の値をクリップして、色域内にあることを確認します。

最初の手順は、"Hue ホイール" を決定することです。ソースデバイスと宛先デバイスの両方のプライマリカラーとセカンダリカラーのJCh値を見つけます。 色相コンポーネントのみを検討しています。 これにより、デバイスごとに 6 つのカラー ポイントを持つプライマリまたはセカンダリの色相ホイールが作成されます。 (図 13 を参照)。

6 つのカラー ポイントを持つ色相ホイールを示す図。

図 13 : フエ ホイール

ソースブループライマリがターゲットブループライマリに回転されていない場合は、より良い結果が得られます。 代わりに、ソースブルーの一次色相角が宛先青一次色相角として使用されます。

次に、ソース画像から入力色ごとに色相回転を行い、

a)入力色の色相角度を使用して、2つの隣接するプライマリカラーまたはセカンダリカラーに対するソース色相ホイール上の色の位置を決定します。 この場所は、プライマリ間の距離に対する割合と考えることができます。 たとえば、入力色の色合いは、マゼンタの色相値から赤の色相値までの 40% です。

b)宛先の色相ホイールで、関連する色相角度 (マゼンタから赤への 40%) を見つけます。 この値は、宛先の色合いの角度になります。

一般に、ソースプライマリとセカンダリは、宛先のプライマリやセカンダリと同じ色相角度ではありません。つまり、宛先の色相角は、通常、ソースの色相角とは異なります。

たとえば、色相ホイールによって次の値が生成されたとします。

ソース M = 295 度、ソース R = 355 度。

変換先 M = 290 度、変換先 R = 346 度。

入力色の色相角が 319 度の場合、ソース M からソース R までの角度の 40% (24 度) になります。M から R までの角度は 60 度で、M から入力色相までの角度は 24 度です。 変換先の M から目的地 R までの 40% の角度 (22 度) を計算します。そのため、変換先の色の色合い角度は 312 度です。

次に、ソースフエと宛先色相の色相基準点を計算する。 特定のh(hue)値の色相基準点を計算するには、J(明度)値とC(クロマ)値を見つけたい。

  • 色相の相対位置を使用して、隣接する1次または2次点のJ値間を補間することによって、色相参照点のJ値を求める。たとえば、この例では 40% です。
  • この J 値と h 値で最大 C 値を見つけます。 これで、その色相の色相基準点の JCh が作成されました。

色相リーフを示す図。

図 14 : 色相リーフ (特定の色相での色域境界スライスの視覚化)

次の手順では、各ピクセルのせん断マッピングを計算します。 まず、ソースカラーの色相角に対するソース色域からの色相リーフと、色相回転中に計算された宛先色相角に対する宛先色域からの色相リーフを視覚化する。 色相の葉は、特定の色相角で JCh 色域境界面から "スライス" を取ることによって作成されます (図 14 を参照)。

注: パフォーマンスの最適化の理由から、色相の葉は実際には作成されません。これらは、視覚化のみを目的として説明され、ここに示されています。 操作は、指定された色相で色域境界サーフェス上で直接実行されます。 次に、色相参照ポイントを計算して、せん断マッピングを決定します。

  • 明度の再スケーリングを実行して、ソース リーフの白黒ポイントをターゲット リーフにマップします (図 15 を参照)。 ソースフエリーフの白黒点は、ソース境界のすべてのJ座標をスケーリングすることによって、宛先の色相リーフの白黒点に直線的にマップされる。 色合いにマップされた入力色の値は、同じ方法でスケーリングされます。

明度マッピングを示す図。

図 15 : 明度マッピング

  • 各色相リーフの色相参照点を決定します。 ソース リーフにせん断マッピングを適用して、ソースとターゲットの参照ポイントが一致するようにします (図 16 を参照)。 特定の色相における色域の参照点は、隣接するプライマリ間の補間された色相参照点です。 ソースフエリーフの参照点は、J軸をロックする「せん断」操作を使用して、先のフエリーフの基準点に直線的にマップされ、黒点と白点は静止した状態に保たれる。 ソースと宛先の色相の葉の黒い点、白い点、および参照点は一致している必要があります。
  • 明度調整された入力色の値にせん断マッピングを適用します。 ソースカラー値のJ座標とC座標は、J軸からの距離に対して比例してスケーリングされます。
  • 次に、色相基準点のJ値に向けて微妙なクロマ依存明度圧縮を、せん断マップ色点に対して行う。 色相参照Jに向けた圧縮はガンマのような方法で行われ、ここで、白色、黒、灰色、および色相参照J上の点は影響を受けない。 他のすべての点は、滑らかな方法で色相基準Jに向かう傾向があり、色相参照Jの近くにわずかに束ね、クロマが一定のままである。 彩度の依存関係により、中間色は影響を受けず、より高い彩度の色に対して効果が増加します。

以下は、色相基準Jに向かって圧縮する明度、又は目的地点のJ値を調整する数学的な説明である。 これは、先の色域にせん断マップされているため、宛先ポイントと呼ばれます。

まず、変換先のポイントに対して "factorC" (クロマ依存関係係数) を計算します。これにより、光度圧縮にどの程度の影響が及ぶかを決定します。 J 軸の近くのポイントまたは J 軸上のポイントは、圧縮がほとんどまたはまったく行われません。J 軸 (高彩度) から離れたポイントでは、より多くの圧縮が適用されます。 sourceC が referenceC よりわずかに大きく、2 倍も大きくない可能性があるため、factorC が 1 未満であることを確認するには、0.5 を乗算します。

factorC = (destinationC / referenceC) ? 0.5

ここで、

destinationC は、変換先ポイントの C 値です。

referenceC は、Hue 参照ポイントの C 値です。

次に、先の点Jが色相基準Jの上か下かを判断する。上記の場合は、次の操作を行います。

  1. 参照Jに対する相対位置の "factorJ" を計算します。 この factorJ 値は 0 から 1 の間になります (参照J の場合は 0、maxJ の場合は 1)。

  2. factorJ = (destinationJ - referenceJ) / (maxJ - referenceJ)

    ここで、

    destinationJ は、変換先ポイントの J 値です。

    referenceJ は、色相参照点の J 値です。

    maxJ は、色域の最大 J 値です。

  3. factorJ にガンマのような累乗関数を適用すると、factorJ が一定量減少します。 この例では、2 (正方形) の累乗を使用します。 元の factorJ から減少した factorJ を減算し、結果に 1 次参照J より上の J 範囲の合計を乗算して、明度圧縮後の J の変化を表す「deltaJ」を見つけますが、クロマ依存性は含まれません。

  4. deltaJ = (factorJ - (factorJ ? factorJ)) ? (maxJ - referenceJ)

  5. factorC を deltaJ に適用し (彩度が高いほど効果が大きくなります)、変換先ポイントの新しい J 値を計算します。

  6. destinationJ = destinationJ - (deltaJ ? factorC)

変換先の J 値が referenceJ を下回っている場合は、上記のステップ A から C と同様の計算が実行されます。maxJ の代わりに minJ を使用して J の範囲を検索して factorJ を計算し、参照J の下にある操作の極性を考慮します。

factorJ = (referenceJ - destinationJ) / (referenceJ - minJ)

deltaJ = (factorJ - (factorJ ? factorJ)) ? (referenceJ - minJ)

destinationJ = destinationJ + (deltaJ ? factorC)

ここで、

minJ は、色域の最小 J 値です。

入力カラーポイントのクロマは、その色相と明度におけるソースおよびターゲットの色域の最大彩度値に比例する一定の明度に沿って直線的に(可能な場合)拡大されます。 前の彩度に依存する明度圧縮と組み合わせると、参照点を使用したせん断マッピングによってソース ポイントがクロマで過剰に圧縮される場合があるため、彩度を維持するのに役立ちます (図 16 を参照)。

右側のせん断の後、左側のせん断の前の色相参照ポイントに一致するせん断マッピングを示す図。

図 16 : せん断マッピング、色相参照 J に対する明度圧縮、およびクロマ展開

次に、クロマ膨張プロセスの数学的説明、または目的点のC値の調整を行う。 これは、せん断マップされ、宛先の色域に圧縮された明度であるため、終点と呼ばれます。

  1. せん断マッピングの前に、sourceExtentC (ソース ポイントの明度と色相における彩度の程度) を決定します。

  2. ソース ポイントをターゲット ポイントに変換するせん断マッピングと明度圧縮の後、destExtentC (ターゲット ポイントの明度と色合いにおける彩度の程度) を決定します。

  3. sourceExtentC が destExtentC より大きい場合、ターゲット ポイントに対するクロマ調整は必要なく、次の手順をスキップできます。

  4. この明度と色相で宛先の彩度の範囲内に収まるように destinationC (終点のクロマ) を調整します。

  5. destinationC = destinationC ? (destExtentC / sourceExtentC)

    ここで、

    destinationC は、変換先のポイント C 値です。

    sourceExtentC は、ソース ポイントの明度と色相におけるソースの色域の最大 C 値です。

    destExtentC は、宛先ポイントの明度と色相における宛先色域の最大 C 値です。

最後に、mimimum 距離クリッピングを実行します。 色相回転、明度調整、およびせん断マップされた入力色がまだ移動先の色域のわずかに外側にある場合は、それをコピー先の色域境界の最も近いポイントにクリップ (移動) します (図 17 を参照)。

最小距離クリッピングを示す図。

図 17 : 最小距離クリッピング

色域境界の説明と色域シェル アルゴリズム

デバイスの色域境界関数は、デバイス モデル エンジンと分析パラメーターを使用してカラー デバイスの色域境界を派生させ、デバイスの色域のハルのインデックス付き頂点リストとして記述します。 ハルの計算方法は、モニターやプロジェクターなどの加法デバイス、減算デバイスのどちらで作業しているかによって異なります。 インデックス付き頂点リストは CIEJab に格納されます。 インデックス付き頂点リストの構造は、DirectX によるハードウェア アクセラレーション用に最適化されています。

このアプローチには、よく知られている多くの解決策があります。 Web で "凸包 DirectX" を検索すると、100 件を超えるヒットが表示されます。 たとえば、このトピックには、1970 年から 1982 年までの参照を含む、この特定のトピック (Computer Graphics Theory and Application、"Shiphulls、b スプライン サーフェス、cadcam" pp. 34-49) に関する 1983 年のリファレンスがあります。

ポイントのコレクションは、次のように、外部で利用可能な情報から決定できます。

  • モニターの参照シェルのポイントは、デバイスの色材空間のカラー キューブのサンプリングを使用して生成されます。
  • プリンターおよびキャプチャ デバイスの参照シェルのポイントは、モデルの初期化に使用されるサンプル データから取得されます。
  • scRGB と sRGB の参照シェルのポイントは、sRGB のカラー キューブのサンプリングを使用して生成されます。
  • キャプチャ デバイスのもっともらしいシェルのポイントは、デバイスの色材空間のカラー キューブのサンプリングを使用して生成されます。
  • プロジェクターの参照シェルのポイントは、デバイスの色材空間のカラー キューブ内の多面体のサンプリングを使用して生成されます。
  • ワイド ダイナミック レンジカラースペースで使用可能なシェルのポイントは、空間自体のカラーキューブのサンプリングを使用して生成されます。

デバイス プロファイルとシステム サポート サービスを使用すると、カラー デバイスの色域を効率的に記述する頂点リストを作成できます。

出力デバイスの場合、色域の境界には、デバイスで表示できる色の範囲が記述されます。 色域境界は、デバイスの動作をモデル化するために使用されるのと同じデータから生成されます。 概念的には、デバイスが生成できる色の範囲のサンプリングを出力し、色を測定し、測定値を外観空間に変換してから、結果を使用して色域境界を作成します。

入力デバイスは複雑です。 入力イメージ内の各ピクセルには、何らかの値が必要です。 各ピクセルは、現実世界で見つかった任意の色を何らかの方法で表すことができる必要があります。 この意味では、入力デバイスでは常に色を表すことができるため、色は "色域外" になることはありません。

すべてのデジタル画像フォーマットには、いくつかの固定ダイナミックレンジがあります。 この制限により、同じデジタル値にマップされる明確な刺激が常に存在します。 そのため、現実世界の色とデジタルカメラの値の間に一対一のマッピングを確立することはできません。 代わりに、カメラのデジタル応答を生成できる現実世界の色の範囲を推定することによって、色域の境界が形成されます。 入力デバイスの色域として、その推定範囲を使用します。

プライマリは、ビジネス グラフィックスインテントタイプの色域マッピングを提供するために含まれています。

真のオブジェクト指向のスタイルでは、色域境界の基になる表現を抽象化します。 これにより、将来の表現を柔軟に変更できます。 新しい CTE で使用される色域境界記述子 (GBD) を理解するには、まず、色域マッピング アルゴリズム (GMA) のしくみを理解する必要があります。 従来、GMOはグラフィックアートコミュニティのニーズを満たすように設計されてきました。つまり、入力イメージが作成されたデバイスに対して既に適切にレンダリングされているイメージを再現します。 グラフィックアートGMOの目的は、出力デバイス上の入力画像の可能な限り最高の再現を行うことです。 新しい CTE GBD は、4 つの主要な問題を解決するように設計されています。

入力イメージは入力デバイス用にレンダリングされるため、すべての色が中間の白点と黒い点の間の範囲内に収まります。 画像が、白いティー シャツを着た人など、拡散性の白いシーンと、窓やクロム バンパーから反射する光などの反射ハイライトの写真であるとします。 シーンが入力メディアにレンダリングされ、反射ハイライトがメディアの白点にマップされ、拡散白が中間の白点よりも暗い中間色にマップされます。 シーンから入力メディアに色をマップする方法の選択は、シーンに依存する決定と審美的な決定の両方です。 元のシーンに反射ハイライトが見つからない場合は、拡散白色がメディアの白点にマップされる可能性があります。 ハイライトの詳細が多いシーンでは、反射白と拡散白の間に、より多くの範囲が残ります。 ハイライトが重要でないシーンでは、非常に少ない範囲が残っている可能性があります。

事前にレンダリングされたイメージの場合、色域マッピングは比較的簡単です。 基本的に、元の媒体の白色点は再生媒体の白色点にマップされ、ソース黒点は宛先黒点にマップされ、マッピングのほとんどは完了です。 存在する異なるGMOは、ソースメディアのトーンスケール上の他のポイントをマッピングするためのバリエーションと、色域外の彩度値を処理するさまざまな方法を提供します。 しかし、白から白、黒から黒へのマッピングは、これらのバリエーション全体で一貫しています。 この実装では、白は J* の 50 を超え、黒は J* の 50 より下である必要があります。

すべてのカラー エンコードで入力イメージの色範囲が制限されるわけではありません。 IEC 標準カラー エンコード scRGB (IEC 61966-2-2) は、赤、緑、青 (RGB) の 3 つのカラー チャネルごとに 16 ビットを提供します。 そのエンコードでは、参照黒は RGB トリプル (0、0、0) としてエンコードされず、(4096、4096、4096) としてエンコードされます。 参照白は (12288、12288、12288) としてエンコードされます。 scRGB エンコードは、反射ハイライトとシャドウの詳細を表すために使用できます。 これには、負の量の光を必要とするため物理的に不可能な RGB トリプルと、CIE スペクトル軌跡の外側にあるエンコーディングが含まれます。 明らかに、scRGB色域のすべての色を生成できるデバイスはありません。 実際、人間が見ることができるすべての色を生成できるデバイスはありません。 そのため、デバイスは scRGB の色域を埋めることができません。また、塗りつぶす色域の部分を表すことができると便利です。 各デバイスには、生成できる scRGB 空間内の値の範囲があります。 これらは、デバイスの "期待される" 色です。デバイスがこの色域の外で色を生成するのは驚くべきことです。 scRGB 空間から外観空間への変換が定義されているため、各デバイスには、再現が期待されるさまざまな外観値もあります。

scRGB と固定ターゲットを特徴とするキャプチャ デバイスからの入力の両方で、期待される値の範囲外の値を取得できます。 誰かがテストターゲットにカメラを校正する場合。反射ハイライトを使用してシーンをキャプチャし、ターゲットの白点よりも明るいピクセルがある可能性があります。 自然発生する赤がターゲットの赤よりも色度が高い場合も、同じことが起こります。 誰かがデバイスから scRGB イメージを取得し、画像内の色を手動で編集した場合、完全な scRGB 色域内にある場合でも、デバイスの色域の想定範囲外のピクセルを作成できます。

2 つ目の問題は、最初はこれに関連していない可能性があります。 これは、カラー ターゲットを使用して、カメラやスキャナーなどの入力デバイスを特徴付けるときに発生します。 反射ターゲットは、通常、紙上で生成され、色付きのパッチの数が含まれています。 Manufaturers は、各カラー パッチの固定表示条件で取得されたカラー測定値をデータ ファイルに提供します。 カラー プロファイル ツールでは、これらの測定値と、デバイス内のカラー センサーによって返される値との間にマッピングが作成されます。 問題は、多くの場合、これらのカラーターゲットがデバイス値の全範囲をカバーしないことです。 たとえば、スキャナーまたはカメラは、参照白色点の値 (253、253、253) を返し、参照赤いパッチの RGB 値 (254、12、4) を返す場合があります。 これらは、ターゲット値に基づいて、入力デバイスの予想される値の範囲を表します。 ターゲットへの応答に基づいて入力デバイスを特徴付ける場合は、この狭い範囲内の色のみが想定されます。 この範囲は、人間が見ることができる色の範囲よりも小さいだけでなく、デバイスが生成できる色の範囲よりも小さくなります。

どちらの場合も、基準色域または測定値が存在するにもかかわらず、入力デバイスまたは画像の色域を推定することは困難です。 最初の問題では、入力デバイスのもっともらしい色域は、scRGB の完全な色域よりも小さくなります。 第2の問題において、ターゲットの基準色域は、入力装置の全使用可能な色域より小さい。

3 つ目の問題はトーン マッピングです。 グラフィックアートで使用される事前レンダリングされた画像を適切に表すことができる色域境界の多くのモデルが提案されています。例えば、ブラウンとフェアチャイルド山脈のGBD(ブラウン[97])、モロヴィッチのセグメントマキシマ境界記述子(Morovic[98])。 しかし、これらのモデルは、デバイスの色域の極端な情報のみを提供します。これらは、トーン マッピング内の他のポイントに関する情報がありません。 このような情報がなければ、GMA は最適なトーン マッピングの大まかな見積もりのみを行うことができます。 さらに悪いことに、これらのモデルは、scRGBおよびデジタルカメラ画像の拡張ダイナミックレンジに役立たない。

この問題は、写真業界とビデオ業界でどのように解決されますか? カメラは画像をキャプチャします。 専門家は、キャプチャ デバイスで発生するレンダリングの量について議論する場合があります。しかし、彼らはそれがかなりの量ではないことに同意します。 どちらのテクノロジも、キャプチャされたシーン内の拡散白をメディアのホワイト ポイントにマップしません。 同様に、シーンの黒い点を中間の黒い点にマップしません。 写真フィルムの動作は、特性曲線を使用して密度空間で記述されています, 多くの場合、ハーターとドリフフィールドと呼ばれます, またはH&D曲線. 曲線は、元のシーンの密度とフィルム上の結果の密度を示しています。 図18は、典型的なHD&曲線を示す。 x 軸は、増加する対数露出を表します。 y 軸はスライドの密度を表します。 曲線上に 5 つの参照点がマークされます。詳細のない黒は、負の最小密度を表します。詳細と黒;参照中灰色のカード。詳細は白、詳細なしは白です。 詳細のない黒 (デバイスの黒を表す) と黒と詳細 (影の黒) の間にはスペースがあることに注意してください。 同様に、詳細 (拡散白色) を持つ白と、詳細のない白 (デバイスの白を表す) の間にスペースがあります。

スライド フィルムの H 曲線と D 曲線を示す図。

図 18 : スライド フィルムの H&D 曲線

ビデオ業界では、画像に "ヘッドルーム" と "フットルーム" が用意されています。 ITU 709 仕様では、輝度 (Y と呼ばれる) は 0 ~ 255 の範囲の 8 ビットでエンコードされます。 ただし、参照黒は 15 でエンコードされ、参照白は 235 としてエンコードされます。 これにより、反射ハイライトを表すためにエンコード範囲は 236 から 255 になります。

ビデオ業界は、本質的に閉じたループシステムを提供します。 さまざまな機器ベンダーがありますが、ビデオ システムは参照デバイスに基づいています。 ビデオ 画像には標準のエンコードがあります。 すべての画像は同じ参照デバイス上で再生するためにエンコードされているため、色域の境界をビデオ画像と通信する必要はありません。 フィルムは、異なるコンポーネント間で中間データを伝達する必要がないため、閉じたループでもあります。 さまざまな色域を持ち、プリレンダリングされたシーンとレンダリングされていないシーンの両方を表すデバイスの画像を、さまざまな色域で出力で再現できるようにするソリューションが必要です。

新しい CTE で解決する必要がある 4 つ目の問題は、デバイスによって生成される視覚的に灰色の色 (モニターで red=green=blue の場合) は、CAM の中立軸 (彩度が 0.0 の場合) に頻繁に当たらないということです。 これは、GMO に大きな困難を引き起こします。 GMA を適切に動作させるには、デバイスの色域と入力ポイントの説明を調整して、デバイスの中立軸が外観空間のニュートラル軸に配置されるようにする必要があります。 中立軸から離れた点も同様の量だけ調整する必要があります。 そうしないと、画像を通して滑らかなグラデーションを作ることはできません。 GMA の途中で、出力デバイスのニュートラル軸を基準にして、このマッピングを元に戻します。 これは、軸の "カイロプラクティック" 矯正と呼ばれます。 カイロプラクターと同様に、スケルトン (中立軸) をまっすぐにするだけでなく、スケルトンと一緒に移動するようにボディの残りの部分を調整します。 カイロプラクターのように、空間全体を通してスケルトンを同じ量だけ調整することはありません。 代わりに、異なるセクションを異なる方法で調整します。

CIECAM ニュートラル軸に対するデバイスニュートラル軸の曲率を示す図。

図 19: CIECAM ニュートラル軸に対するデバイス中立軸の曲率

新しい CTE に必要なのは、レンダリングされたソース イメージとレンダリングされていないソース イメージの両方を表し、デバイスニュートラルの外観に関する情報を提供し、広い輝度範囲を持つトーン マッピング イメージの情報を提供するために使用できる色域境界のモデルです。

3 つの色域シェルを示す図。

図 20 : 3 つの色域シェル

色域境界は、3 つの領域を定義する 3 つのシェルで構成されます。

新しい CTE では、色域の外殻は、デバイスの色域のサンプル ポイントから作られた凸包で形成されます。 ハルは、サンプル ポイントのセットを取得し、それらをサーフェスで囲むことで形成されます。 凸包には、あらゆる場所で凸であるという追加のプロパティがあります。 したがって、これはデータに適合できる最小のハルではありません。 しかし、実験では、サンプル ポイントを厳密に調整すると、滑らかな網かけの欠如など、画像内の未適用のアーティファクトが引き起こすことが示されています。 凸包はこれらの問題を解決するように見える。

アルゴリズムでは、デバイスからサンプリングされた一連のポイントの色の外観値が取得されます。 モニターとプリンターの場合、色の外観の値は、サンプルを出力して測定することによって取得されます。 デバイス モデルを作成し、デバイス モデルを通じて合成データを実行して、測定値を予測することもできます。 その後、測定値は比色空間 (XYZ) から外観空間 (Jab) に変換され、ハルはポイントの周りにラップされます。

このアルゴリズムの重要なポイントは、比色空間から外観空間への変換に使用される採用されたホワイト ポイントが、メディアのホワイト ポイントである必要がないようにすることです。 代わりに、色域の内側で、中立軸の上 (または近く) にある点を選択できます。 その後、J 値は 100 になります。 測定されたY値が採用された白色点より高いサンプルは、最終的にJ値が100より大きくなります。

シーンの拡散白点を色空間変換に採用されたホワイト ポイントとして配置すると、シーン内の反射ハイライトは、J 値が 100 より大きいと簡単に検出されます。

CIECAM02カラーモデルは人間の視覚システムに基づいているため、採用された白を選択した後、黒点(J =0)の輝度レベルはモデルによって自動的に決定されます。 入力イメージの動的範囲が広い場合は、0 未満の J 値にマップされる値が存在する可能性があります。

次の図 21 は、もっともらしい色域と参照色域の中心を通って実行されるデバイスニュートラルを示しています。

色域境界に追加されたデバイスニュートラル軸を示す図。

図 21 : 色域境界に追加されたデバイス中立軸

すべての色域マッピングには、入力範囲を出力色域にクリッピングするか、出力の色域内に収まるように入力色域を圧縮する必要があります。 より複雑なアルゴリズムは、異なる方向に圧縮およびクリッピングするか、色域を異なる領域に分割し、異なる領域でクリッピングまたは圧縮を実行することによって形成されます。

新しい CTE は、この概念を拡張して、考えられる色域、もっともらしい色域、および参照色域の領域をサポートし、GMO がさまざまな方法でそれらをマップできるようにします。 さらに、GMA には、デバイスのニュートラル軸に関する情報があります。 次のディスカッションでは、もっともらしい色域と参照色域が互いに折りたたまれている状況を処理する方法について説明します。

2 つの折りたたみされていない色域記述子を持つ G M A を示す図。

図 22: 2 つの折りたたてられていない色域記述子を持つ GMA

反射ターゲットを特徴とするカメラやスキャナーなどの入力デバイスから scRGB 空間にマップすると、この例が表示されることがあります。 ここでは、基準白よりも明るいもっともらしい色は、反射ハイライトです。 実際には、ターゲットを持つカメラを特徴付けると、カメラで可能な値の全範囲が生成されない場合があります。しかし、反射ハイライトと自然に見られる非常に色の色はそうでしょう。 (透過ターゲットには通常、媒体上で可能な最小密度のパッチがあります。このようなターゲットの場合、反射ハイライトはターゲットの範囲内に収まることになります)。反射ターゲットの参照黒は、影の黒領域の始まりになります。 つまり、影の色がターゲットの黒よりも暗くなる可能性があります。 画像にその地域に多くの興味深いコンテンツが含まれている場合は、そのトーンバリエーションを保持する価値があるかもしれません。

折りたたまれた宛先色域を持つ G M A を示す図。

図 23 : 展開先の色域が折りたたまれている GMA

図 23 は、宛先の色域がデバイスの白から黒までの範囲のみを提供し、この色域の外側に可能な色がない場合の、1 つの可能な色域マッピング アルゴリズムを示しています。 これは、プリンターなどの一般的な出力デバイスで発生する可能性があります。 使用可能な色は、コピー先の色域の端にマップされます。 しかし、出力デバイスのトーンカーブがありません。 GMA は、参照白のマッピング先として使用するために、低輝度のニュートラル ポイントを選択する必要があります。 高度なアルゴリズムでは、ソースイメージの明るさをヒストグラム化し、予想される範囲の数が参照白よりも明るいかを確認することで、これを行うことができます。 明度が高いほど、反射ハイライトと参照白のマップされたポイントの間の宛先デバイスに必要なスペースが多くなります。 より単純なアルゴリズムでは、デバイスの白から明度スケールまでの任意の距離 (5% など) を選択できます。 同様の方法は、黒と影の最大黒のマッピングに適用されます。

先のトーン カーブを生成した後、前の図 23 で使用したのと同様の方法でマップできます。 宛先トーン カーブ内のすべてのポイントがデバイスの色域内に収まるので、マッピング内のすべてのポイントがデバイスの色域内に収まる必要があります。

図 23 の左の図と右の図と矢印の方向を逆にした場合、ソース イメージに参照色域のみが含まれており、出力デバイスの 3 つの色域が互いに折りたたまれていない場合について説明できます。 この例としては、モニターから scRGB へのマッピングがあります。 ここでも、GMA はソース イメージのトーン カーブ上の 5 つのポイントのコントロール ポイントを合成する必要があります。 一部のマッピングでは、scRGB デバイスの色域内にトーンカーブのすべてのポイントが配置される場合があります。一方、他のマッピングでは、拡散白色を参照白にマッピングし、反射白色をより軽い値にマップできるようにすることで、scRGB 色域の多くを使用する場合があります。

最後に、両方のデバイスに参照色域のみが含まれている場合があります。これは、ほとんどの色域マッピング アルゴリズムの動作方法です。 したがって、現在のアルゴリズムにフォールバックするだけで解決できます。 または、ソース デバイスと宛先デバイスの 5 つの参照ポイントを決定する適切な方法がある場合は、参照ポイントをマップするように配置できます。

デバイスの色域には、ニュートラル軸上の 5 つ以上の参照ポイントが含まれています。 これらは、イメージ内の潜在的な領域間の境界を表すだけです。 各参照ポイント間で、既存の任意の色域マッピング手法を使用できます。 そのため、予期しない色の範囲をクリップし、期待される白と黒の間のすべての色を圧縮したり、参照範囲外のすべての色をクリップしてその範囲内で圧縮したりすることができます。 さまざまな GMO に実装できる可能性は多数あります。 さらに、GMOは異なる方法で圧縮およびクリップすることができます。 これらの組み合わせはすべて、この発明の中でカバーされる。

ここまでの説明では、色域は、イメージが作成、キャプチャ、または表示されたデバイスの機能のみであるかのように扱われています。 ただし、デバイスのすべてのイメージが同じ色域を持つ必要がある理由はありません。 GMA は GBD 内のデータに依存します。 イメージ間で記述子が変更された場合、GMO が認識する方法はありません。 特に、画像に反射ハイライトがない場合、色域記述子が拡散白よりも明るい色があることを示さない場合、GMO のパフォーマンスが向上します。

新しい CTE アーキテクチャでは、複数の GMA を使用できます。 複数の GMA の使用は、本質的に不適切に定義されています。 たとえば、キャプチャ デバイスが GMA を "ルック アンド フィール" に関連付ける場合、"ターゲット" の宛先の色域で関連付ける傾向があります。 出力デバイスと "ターゲット" ソースの色域についても同じことが当てはまります。 sRGB の色域は、一般的にターゲットとする暗黙的な色域の 1 つです。 したがって、予測可能性が優先される場合は、単一の GMA を使用することを強くお勧めします。 1 つの GMA ワークフローは、すべてのワークフロー (特にコンシューマーおよびプロズマー ワークフロー) の既定値である必要があります。 優先再現の色域マッピングは 1 回実行する必要がありますが、複数のマッピング プロセスが含まれる場合があります。 まず、校正のために、最終的なターゲット デバイスの色域に適切なマッピングを行い、次に校正デバイスの色域への比色レンダリングを行います。 次に、一部の種類のマッピングは画像の特性を変更するために使用されますが、トーンカーブや色度の調整など、デバイスの色域にマップするために含まれていません。 複数の GFA を使用する場合、変換インターフェイスは、境界の境界の説明のペアで初期化された色域マップ、つまり、バインドされた色域マップの配列を受け取ります。 複数の色域マップがある場合、後続の色域マップの入力色域境界は、その前身の出力色域境界と同じである必要があります。

デバイスの色域境界関数は、デバイス モデル エンジンと分析パラメーターを受け取り、デバイスの色域の凸包の順序付けられた頂点リストとして記述されたカラー デバイスの色域境界を導き出します。 順序付けられた頂点リストは CIEJab に格納されます。 順序付けられた頂点リストの構造は、DirectX によるハードウェア アクセラレータ用に最適化されています。 このアプローチには、多くのよく知られている解決策があります (Web 上で "凸包 DirectX" を検索すると、100 件を超えるヒットが得られます)。 このトピックには、1983 年から 1982 年までのリファレンスがあります (コンピューター グラフィックス理論とアプリケーション、"Shiphulls、b-spline サーフェス、cadcam" pp. 34-49)。

2 つの異なる手法を使用して、色域シェルの三角形を計算できます。 加法 RGB デバイス以外の他のデバイスの場合は、凸包を計算します。 そのようなデバイスに直接アクセスしてアルゴリズムの堅牢性、パフォーマンス、忠実性を検証する場合は、他のデバイスの非凸ハル サポートの調査を検討できます。 これは、それ以上の説明を必要としないよく知られているプロセスです。 追加の RGB デバイスに使用される手法を次に示します。

GBD が異なると、利点と欠点があります。 凸包表現は、中立軸上の点から発せられる光線を持つ一意の交差点を提供する凸色相スライスなどの優れた幾何学的特性を保証します。 凸包表現の欠点も凸性です。 多くのデバイス (特にディスプレイ デバイス) には、凸型から遠い色域が存在することが知られています。 実際の色域が凸性の仮定から大幅に逸脱した場合、凸包表現は、現実を表さない程度に不正確になる可能性があります。

実際の色域を合理的に正確に表現するGBDを採用すると、色相スライスの概念が原因で他の問題が発生します。 少なくとも2つの病理学的状況がある。 次の図 24 では、CRT の色域によって "islands" の色相スライスが生じます。図 25 では、プリンターの色域によって、ニュートラル軸の一部が欠落した色相スライスが生じます。 病理学的色相スライスは、これらの場合に特に病理学的な色域境界によって引き起こされない。 これは、(a) 一定の色相に沿って取得され、(b) 色相角に対応する平面の半分しか取らないため、色相スライスの概念が原因です。

青い色合いの

図 24 : 一般的な CRT モニターには、青い色合いで独特の "曲がりくねった" 色域があります。 色相スライスがこの色相範囲内にある場合は、分離された島が色相スライスに表示される可能性があります。

中立軸に

図 25 : プリンターは、ニュートラル軸に "ギャップ" を持つ色域を持つ場合があります。 色相スライス (平面の半分のみ) を取得すると、境界の一部に中立軸である "凹み" があります。 これはアルゴリズム的に解決するのが難しい場合があります。

これらの病理を解決するために、出発点として使用される色相スライスの概念を放棄する新しいフレームワークが提案される。 代わりに、フレームワークでは、"境界要素" のセット、または色域境界上にある線が使用されます。 それらは必ずしも色相スライスのような一貫した幾何学的視覚化を提供するとは限りませんが、すべての一般的な色域操作をサポートします。 このアプローチは、前述の問題を解決するだけでなく、可能な場合でも色相スライスの構築が計算上無駄であることを示唆しています。

ガマット境界の三角形分割

開始点は、色域境界の三角形分割で構成される GBD です。 GBD を構築する既知の方法は、通常、その三角形分割を提供します。 具体的には、デバイス空間の追加デバイス用の GBD を構築する方法の 1 つについて説明します。 これらのデバイスには、モニター (CRT ベースと LCD ベースの両方) とプロジェクターが含まれます。 キューブの単純なジオメトリを使用すると、キューブに通常の格子を導入できます。 キューブの境界面は、図 26 に示すようなさまざまな方法で三角形化できます。 アーキテクチャは、格子点の比色値をアルゴリズムで取得できるようにデバイスのデバイス モデルを提供します。または、それらのポイントに対して直接測定が行われています。 このアーキテクチャでは CIECAM02 も提供されるため、開始データが CIECAM02 Jab 空間に既にマップされていると想定できます。 次に、RGB キューブの境界面上の各ラティス ポイントには、Jab 空間内の対応するポイントがあります。 RGB 空間の三角形のセットを形成するポイントの接続は、Jab 空間の三角形のセットも誘発します。 (a) RGB キューブの格子が十分に細かく、(b) デバイス空間から均一な色空間への変換がトポロジ的に適切に動作している場合、この三角形のセットは色域境界の合理的な三角形を形成します。つまり、境界を境界にマップし、内部ポイントが境界ポイントになるように色域を内側に向けないでください。

デバイス領域として R G B を持つデバイスの色域境界を三角化する簡単な方法を示す図。

図 26 : RGB をデバイス空間として持つデバイスの色域境界を三角形化する簡単な方法

境界線要素

このフレームワークの中心となるのは、境界線要素の概念です。(a) が色域境界に位置し、(b) 平面上に存在する一連の線分。 この場合、平面は色相平面です。 各線分は、平面と色域境界三角形を交差した結果です。 多くの研究者は、境界三角形を持つ平面を交差させる構造を使用してきましたが、一般に、これらの線分間の関係を分析し、線分から一貫した幾何学的オブジェクトを構築しようとします。 色相スライス全体が取得されるまで、これらの線分に続くさまざまなアルゴリズムが考案され、検索プロセスを高速化するための多くの試みが行われています。

この方法は異なります。 平面と三角形を交差して、線分を取得します。 次に、これらの線分を 基本的な 概念オブジェクトと見なします。 線分間の関係を分析する必要があります。相互にどのように相互接続されているかを知る必要はありません。 この視点は、島での色相スライスの問題を解決します。 色相スライスの構築を試みる既知のアプローチでは、1 つの線分で始まり、次の線分に続く場合などが想定されます。最終的には開始点に戻り、その時点で色相スライス全体が構築されます。 残念ながら、このアプローチは島(そして最悪のシナリオでは大陸)を逃すでしょう。 一貫した幾何学的な画像を取得することを主張しないことによって。つまり、色相スライス、あなたは楽に島の問題を処理することができます。 このアプローチのもう 1 つの重要な違いは、線分の構築を高速化するために、"三角形フィルター" を使用することです。三角形フィルターは、現在の色域操作で役立つ線分を確実に生成しない特定の三角形をスローします。 三角形と平面の交差は計算コストがかかるため、速度が向上します。 副作用は、三角形のフィルター処理のために一部の線分が見つからないため、色相スライスを構築できないということです。

Gamut 操作: CheckGamut

次の例では、フレームワークのしくみと、CheckGamut がどのように実行されるか、つまり色が色域内であるかどうかを確認する操作について説明します。

一般的なフレームワークを次の図 27 に示します。 さまざまなコンポーネントがあります。 斜体でラベル付けされたコンポーネントは、問題の色域操作に応じて実装で異なる可能性があるコンポーネントです。 その他のコンポーネントは、すべての色域操作で不変です。 まず、 Input は色属性のセットです。 CheckGamut の場合は、クエリの色です。 図27及び以下の説明では、色相角は入力色属性の中にあるか、それらから得ることができるものとする。 これは明らかに、入力が Jab または JCh のカラー ポイント全体である場合に当てはまり、そこから色相の角度を計算できます。 色相面が使用されているため、色相の角度のみが必要であることに注意してください。 問題の色域操作によっては、色相平面を使用する必要がない場合があります。 たとえば、ルーチン CheckGamut の構築では、定数 J の平面を使用できます。これは、これ以上使用したり、説明したりしない一般化です。しかし、色相平面が最良の選択ではないかもしれないときに、他の色域操作をサポートする方法論のこの柔軟性を覚えておくと役立つかもしれません。

色域操作をサポートするフローを示す図。

図 27 : 色域操作をサポートするフレームワーク

入力から直接取得されるか、入力から計算される色相角度は、図の 完全な色相平面 というラベルが付いた色相平面を初期化するために使用されます。 これは、色相を含む半面だけでなく、完全な平面であるため、"Full" が強調されます。 完全平面には、入力の色相角度と、それに対して 180 度反対の角度の両方が含まれています。 色相平面の主な機能は Intersect 関数です。この関数については、「完全な色相平面: Intersect」のサブセクションで説明します。 GBD が既に構築されており、一連の Gamut 境界三角形 が使用可能であるとします。 [Intersect]\(交差\) を使用して 、三角形フィルター で残っている三角形を色相平面と交差します。 Triangle Filter コンポーネントには斜体のラベルが付けられます。つまり、色域操作の実装によってコンポーネントが異なります。 CheckGamut の 三角形フィルター については、「Gamut Operation: CheckGamut (続き)」セクションで説明されています。 三角形と色相平面を交差した結果は、空または 境界線要素 (つまり、一対の異なる点) になります。 結果が空でない場合は、 Line Element Processor に渡されます。これは、色域操作に応じて、もう一度異なる処理を行います。 Line Element Processor は、コンテンツまたはレイアウトも色域操作に依存する内部データ構造である内部処理データ を更新します。 一般に、 内部処理データ には問題に対する "回答" が含まれています。これは、検出された新しい境界線要素ごとに継続的に更新されます。 すべての境界線要素が処理されると、回答が見つかりました。 これは、出力アダプターを介してアクセスするために残ります。 内部処理データは色域操作固有であるため、出力アダプターも色域操作固有です。

完全な色相平面: 交差

Intersect 関数は、色相平面と三角形の交差部分を計算します。 この関数は、2 つの理由で重要です。

最初に、三角形の各エッジを平面と交差すると、幾何学的に不可能な状況である 3 つの交点が得られる場合があります。 計算でこれが発生する可能性がある理由は、計算が浮動小数点 (IEEE 形式など) で行われる場合、各ステップで、エッジが平面と交差するかどうかの結論に影響を与える不確定要素 ("数値ノイズ") が存在するからです。 ニアミス状態で平面がエッジと交差する場合、交点は互いに近く、交点がエッジ内にあるかどうかの判断はランダムです。 ポイントの数値のノイズは小さいものの、交差点が 2 つを超えるという定性的な結論は幾何学的に不可能であり、アルゴリズムで正しく処理することは困難です。

次に、この関数は、フィルター処理された各三角形の各エッジのクリティカル ループ内にあります。そのため、その効率を可能な限り最適化することが重要です。

数値ノイズの最初の問題に対処するには、整数で計算を実行します。 効率を最適化する 2 番目の問題に対処するには、各頂点の最もよく使用される属性、または各頂点に関連付けられている "ドット積" をキャッシュします。 整数への渡しは、幾何学的整合性を保証する一般的な方法です。 基本的な考え方は、量子化する必要がある場合は、最初にそれを行うということです。 次に、後続の計算を整数で実行できます。整数が十分な幅を持ち、オーバーフローの危険性がないようにする場合は、無限の精度で計算を実行できます。 この目的に役立つ量子化関数を次に示します。

ScaleAndTruncate(x) = x*10000 の整数部分

倍率 10000 は、入力浮動小数点数に小数点以下 4 桁の桁数があることを意味します。これは、このアプリケーションで十分に正確です。 色の表示領域の値の範囲に応じて、中間計算を保持するのに十分なビット幅の整数型を選択する必要があります。 ほとんどの色空間では、各座標の範囲は -1,000 ~ 1,000 の範囲内です。 量子化された座標の絶対値の最大値は 1,000*10,000 = 10,000,000 です。 ご覧のように、中間数量はドット積であり、2 つの座標積の合計であるため、可能な最大絶対値は 2*(10,000,000) ₂ = 2?10 ₁₄ です。 必要なビット数は、ログ ₂ (2?10 ₁₄) = 47.51 です。 整数型の便利な選択肢は、64 ビット整数です。

平面と三角形の交差が常に空のセットまたは 2 つの点のセットを与えるのを保証するには、三角形を個別に三角形の個々の端としてではなく、全体として考慮する必要があります。 幾何学的な状況を理解するには、色相平面からの三角形の頂点の「符号付き距離」を考慮してください。 これらの符号付き距離を直接計算しないでください。代わりに、平面への量子化法線ベクトルを使用して頂点の位置ベクトルのドット積を計算します。 より具体的には、色相平面の初期化中に、量子化法線ベクトルは以下のように計算される。

NormalVector = (ScaleAndTruncate(-sin(hue)),ScaleAndTruncate(cos(hue)))

このベクトルは 2 次元ベクトルであることに注意してください。 色相平面が垂直であるため、2 次元ベクトルを使用できます。したがって、法線ベクトルの 3 番目の成分は常にゼロになります。 さらに、ドット積のルックアップ テーブルは、Gamut 境界三角形の各頂点のエントリを持ち、対応するドット積が無効な値に設定されるように初期化されます。

色相平面と三角形を交差する 1 つの操作の間に、三角形の各頂点のドット積が検索されます。 参照テーブルの値が無効な値である場合、ドット積は次の式を使用して計算されます。

NormalVector.a*ScaleAndTruncate(vertex.a) + NormalVector.b*ScaleAndTruncate(vertex.b)

ここでも、法線ベクトルが水平であるため、頂点の J 成分は使用されません。 その後、このドット積はルックアップ テーブルに保存されるため、頂点のドット積が後で照会された場合に再度計算する必要はありません。

キャッシュを使用すると、頂点が処理されるときに徐々に構築されるルックアップ テーブルでドット積が集計された後に、エッジが平面と交差するかどうかを簡単に判断できます。

色相平面と三角形の交点を示す図。

図 28 : 色相平面と三角形の交差

図 28 の三角形が非縮退線分の色相平面と交差する場合、頂点のドット積は、昇順で並べ替えられた場合、次のいずれかのパターンである必要があります。

0,0,+;-,0,0;-,0,+;-,-,+;-,+,+

線分の終点は、平面が点積に異なる符号を持つ頂点を持つエッジと交差している場合に発生します。 符号が 0 の場合、頂点は平面上にあり、エッジと平面の交差部分は頂点自体です。 また、ケース 0,0,0;-,-,0;0,+,+ は報告されません。 最初のケース (0,0,0) は、三角形全体が平面上にあることを意味します。 これは、三角形の各エッジが平面上に完全に存在しない隣接する三角形に属している必要があるため、報告されません。 その三角形が考慮されると、エッジが報告されます。 他の 2 つのケース (-,-,0 と 0,+,+) は、三角形が 1 つの頂点の平面に触れる幾何学的な構成に対応しています。 これらのケースは、非縮退ライン セグメントを生み出さないため、報告されません。

上記のアルゴリズムは、三角形のエッジと色相平面の交差を計算するタイミングを決定します。 エッジが決定されると、パラメトリック方程式を使用して交差が計算されます。 ドット積の 1 つが 0 の場合、交点は頂点自体であるため、計算は必要ありません。 エッジの頂点の両方のドット積が 0 以外であると仮定すると、vertex1 は のドット積 dotProduct1 を持つ頂点です。および vertex2 は、 のドット積 dotProduct2 を持つ頂点です。 この順序は、計算された交点がエッジの表現における頂点の順序に依存しないようにするために重要です。 エッジの幾何学的概念は、その頂点に対して対称です。 エッジのパラメトリック方程式を使用する計算の側面は非対称性 (開始頂点の選択) を導入します。これは、数値ノイズと解決される線形方程式のコンディショニングにより、少し異なる交差点を与える可能性があります。 これに伴い、交点である交差点は、以下によって与えられる。

t = dotProduct1/(dotProduct1 - dotProduct2)

交差点。J = vertex1。J + t * (vertex2.J - vertex1。J)

intersection.a = vertex1.a + t * (vertex2.a - vertex1.a)

intersection.b = vertex1.b + t * (vertex2.b - vertex1.b)

Gamut 操作: CheckGamut (続き)

色域チェックに使用される基本的な幾何学的アルゴリズムは、光線交差の数をカウントする方法です。 特定のクエリ ポイントについて、クエリ ポイントから始まり、上方向 (J 方向) を指すレイを検討します。 このレイが色域境界を越えた回数をカウントします。 この数値が偶数の場合、クエリ ポイントは色域外です。 この数値が奇数の場合、ポイントは内側にあります。 原則として、このアルゴリズムは3-Dで実装することができ、一般に、境界三角形に横たわるレイ(一部)や境界三角形の端にレイが横たわっている(部分的に)などの低次元の縮退などの退化状況によって引き起こされる困難に悩まされています。 2-Dでも、あなたはこれらの退化した状況に対処する必要があります。しかし、問題は単純であり、満足のいく方法で対処されています。 「O'Rourke」を参照してください。

指定された入力ポイント Jab の場合、その色相角度 h を次のように決定します。

h = atan(b/a),

色相平面を初期化し、この色相平面に対応する境界線要素を決定します。 境界線要素は上向きのレイと交差する場合にのみ関連するため、三角形フィルターを設定して、上向きのレイと交差しない線要素を与える三角形を削除します。 この場合は、三角形の境界ボックスについて考えてみましょう。 光源が真上にある場合、クエリ ポイントが境界ボックスによってキャストされた "影" の外側にある場合、上向きのレイは三角形と交差しません。 これは、数値ノイズを許容するように事前に固定された許容範囲で少し膨らませて、便利な線要素を与える可能性のある三角形を誤って捨てないようにします。 その結果、図 29 に示す半無限四角形円柱が得られます。 クエリ ポイントがこの円柱の内側または外側にあるかどうかを確認するには、単純な不等式を使用して効率的に実装できます。

CheckGamut の三角形フィルターを表示します。

図 29 : CheckGamut の三角形フィルター

CheckGamut には、 内部処理データライン要素プロセッサ出力アダプターの 3 つの色域操作固有のコンポーネントがあります。 内部処理データは、ライン要素プロセッサによって処理された行要素の一覧です。 この場合、 Line Element Processor は 、単に行要素をリストに追加します。 内部処理データの内部データ構造には、リンクリストまたはサイズを拡大できる配列を指定できます。

出力アダプターは、線要素のリストにアクセスし、線要素が上向きのレイ (カウント 1) と交差するかどうかを決定するモジュールです (カウント 0)。 これらすべてのカウントを合計すると、合計カウントが得されます。 出力アダプターは最終的に、合計カウントが奇数か偶数かに応じて、"はい" (色域内) または "いいえ" (色域外) の回答を出力します。 線要素が上向きのレイと交差するかどうかを判断するステップは、退化の問題が発生する場所であり、オーバーカウントの問題も発生するため、注意が必要です。 [O'Rourke]に続いて、線要素が光線を横切る場合、右側の終点(彩度が大きい終点)は、厳密に光線の右側にある必要があります。 これにより、終点がレイ上に正確に存在する場合は、1 回だけカウントされます。 同じルールにより、線要素がレイ上に正確に配置される、退化した状況も解決されます。 この行要素のカウントはインクリメントしません。

図 30 は、さまざまな位置にクエリ ポイントがあるサンプル色域の結果の行要素を示しています。

さまざまな位置にクエリ ポイントがあるサンプル色域の結果の行要素を示す図。

図 30 : CheckGamut のしくみ

色差の最小色域マッピング

最小色差の色差の色域マッピング (MinDEMap) には、単純な仕様があります。色が色域内の場合は、何も行わないでください。 色が色域外の場合は、色域境界の "最も近い" ポイントに投影します。 "最も近い" キーワード (keyword)は、使用する色差の数式を指定するまで明確に定義されていません。 実際には、計算を簡単かつ迅速にするために、選択した色の外観空間のユークリッド距離、またはそのバリエーションが色差メトリックとして使用されます。 ユークリッド メトリックの利点は、空間のドット積と互換性があり、線形代数を使用できる点です。 詳細には、空間に "ドット積" が定義されている場合、距離は、それ自体を持つ差分ベクトルのドット積の平方根として定義できます。 ドット積は、一般に、正の明確な 3x3 行列 A によって定義できます。

u?v = u T Av

右側は通常の行列乗算です。 A が ID マトリックスの場合、標準ドット積が回復されます。 実際には、Jab が色空間である場合は、コンポーネントを混在させたくないので、ID マトリックス以外の対角行列を使用できます。 さらに、色相の尺度が保持されるように、a と b のスケールを変更せずにおきたい場合があります。 したがって、標準的なユークリッドドット積の有用なバリエーションは次のとおりです。

w J (J component of you)(J component of v) + (a component of you)(a component of v) + (b component of you)(b component of v)

ここで、w J は正の数です。 もう 1 つのバリエーションは、入力クエリ ポイントで w J を変化させる方法です。

w J\ = w J (queryPoint)

最終的な結果は、2 つのポイントに対して非対称の距離の測定値であり、入力クエリ ポイントが変化するにつれて、明度と彩度または色相に対する相対的な重みが異なります。 これは、色の違いがすべての次元で均等に重み付けされないという人間の色認識に関するいくつかの観察に従っています。 色相や彩度の違いよりも、明るさの違いに対する感度が低いことがわかりました。

次の重み関数が便利です。

w J = k ₂ - k ₁ (C - C mₐₓ ) n

ここで、k ₂ = 1、k ₁ = 0.75/(C mₐₓ ) n、C mₐₓ = 100、n = 2、C はクエリ ポイントと C mₐₓ の彩度の小さい方です。

そのため、彩度がゼロの場合は J 項に 0.25、彩度が 100 の場合は重みが 1 になります。 彩度が小さいときはJに少ない重量を、彩度が大きい場合はJに重量を置く傾向は、CMCとCIEDE2000の推奨される使用に従います。

メトリックの J コンポーネントの重み関数を示すグラフ。

図 31 : メトリックの J 成分に対する重み関数

次の例では、Jab スペースを使用します。 ユークリッド メトリック内の最も近いポイントを決定するために、すべての境界三角形を検索することが計算上必要です。 このプロセスを可能な限り効率的にするための簡単なアプローチを次に示します。プロセスを高速化する可能性がありますが、最終的にはおおよその答えにすぎません。 まず、特定の三角形に点を投影する幾何学的な手順を理解する必要があります。 ここでは説明を示します。

三角形を含む無限平面への直交投影が最初に実行されます。 プレーンからのクエリ ポイントの最短距離は、2 つの手順で決定できます。

(a) 三角形に対する単位法線ベクトルを計算します。

(b) クエリポイントと三角形上の点から形成された単位法線ベクトルとベクトルのドット積を計算します。つまり、頂点の 1 つです。 正規ベクトルには単位長があるため、このドット積の絶対値は平面からのクエリ ポイントの距離です。

投影された点は、三角形の外側にある可能性があるため、答えにならない可能性があります。 そのため、最初にチェックを実行する必要があります。 計算は、投影された点の三角形に対する中心座標を計算することと同じです。 投影された点が三角形の内側にあると判断された場合は、それが答えです。 そうでない場合は、最も近い点が三角形のいずれかの端に取得されます。 3 つの各エッジで検索を実行します。 エッジへのクエリ ポイントの投影を決定することは、三角形への投影に似ていますが、1 次元未満のプロセスです。 直交投影法が最初に計算されます。 投影された点がエッジ上にある場合は、それが答えです。 そうでない場合は、最も近いポイントが 2 つのエンドポイントのいずれかで取得されます。 2 つのエンドポイントで検索を実行します。つまり、各クエリ ポイントからのクエリ ポイントの距離を計算し、小さいものを比較します。

慎重に調べると、エッジは常に 2 つの三角形で共有され、頂点は少なくとも 3 つのエッジで共有されるため、すべての三角形を通過するときに多くの検索が繰り返されていることが明らかになります。 さらに、あなたは特定の三角形に最も近い点を見つけることにあまり興味がありません。代わりに、色域境界全体に最も近い点を見つけることに関心があります。 ただし、特定の三角形の 1 つは、これが実現される三角形です。 検索を高速化するために使用できる戦略は 2 つあります。

戦略 I.各頂点は、最大で 1 回処理されます。 各エッジは、最大で 1 回処理されます。

戦略 II. 検索の任意の時点で、対応する最適な距離を持つ最適な候補があります。 短いチェックで、三角形の方が距離が短いと判断できる場合は、さらに計算を続行する必要はありません。 この三角形に最も近いポイントと距離は必要ありません。

最小 DE マッピングのフローを示す図。

図 32 : DE マッピングの最小回路図

図 32 は、色域マップ MinDEMap のロジックの一般的なフローを示しています。 クエリ ポイントの場合、CheckGamut 関数が最初に呼び出されます。 ポイントが色域内の場合、マップは no-op です。 ポイントが色域外の場合は、ProjectPointToBoundary を呼び出します。 次に、図 33 に進む。 この時点で、次の値が計算されていると見なされます。

(a) 標準ドット積に対する各色域境界三角形への単位法線ベクトル。

(b) 三角形リストに加えて、頂点リストとエッジ リスト。

図 33 : ProjectPointToBoundary ルーチン

これらはすべて一定のオーバーヘッドであり、この色域境界に十分なクエリが行われるとコストが減少します。 通常、これは、あるデバイスから別のデバイスに変換 LUT を構築する場合に当てはめます。ここで、固定色域は 2 つだけで、変換 LUT は均一にサンプリングされたグリッド上のポイントを介して実行されます。 垂直性の概念は、前に説明したようにクエリ ポイントに依存する加重ドット積に基づいている場合でも、標準ドット積に関して正規ベクトルを事前に計算します。 その理由は、重み付けドット積に対する法線ベクトルが標準ドット積に対して正規ベクトルから容易に得ることができるからである。 n ₀ が標準ドット積に対する正規ベクトルである場合は、

n = (n ₀ /w J の J 成分、n ₀ の a 成分、n ₀ の b 成分)

は、重み付けされたドット積に関して三角形に対して正常です。 この関係のため、クエリ ポイントに基づいて調整する必要がある場合でも、n ₀ を事前に計算すると便利です。

ProjectPointToBoundary ルーチンは、頂点とエッジの "処理された履歴" をリセットすることから始まります。 これらは、頂点またはエッジが以前にアクセスされたかどうかを追跡する BOOLEAN フラグのテーブルです。 また、変数 ShortestDistance を "INFINITY" にリセットします。これは、使用される浮動小数点数システムの最大エンコード値です。 次に、ProcessTriangle 呼び出しを使用して、各三角形から最も近いポイントを検索して、ループを実行します。 ProcessTriangle は ShortestDistance 変数を更新するルーチンであり、明確にクリティカル ループ内にあります。 最適化の 1 つは、結果が十分な場合に停止することです。 ProcessTriangle を呼び出すたびに、変数 ShortestDistance が調べられます。 定義済みのしきい値を満たす場合は、停止できます。 定義済みのしきい値は、使用される色空間と、カラー イメージング システムの必要な精度によって異なります。 一般的なアプリケーションでは、色の違いが人間の視覚で識別できるものより少ない場合は、不要な作業を行いたくありません。 CIECAM02 の場合、この色の違いは 1 です。 ただし、計算の精度を維持するには、変換のチェーン内の中間ステップに過ぎません。

ProcessTriangle は、前の戦略 II を実装します。 前記標準ドット積に対して事前計算された単位法線ベクトルから三角形までの正規ベクトルを求め、前記単位正規ベクトルと前記 queryVectorのドット積を形成して三角形を含む無限平面までのクエリ点の距離を算出し、三角形のいずれかの頂点からベクトルを求め、 vertex1 をクエリ ポイント queryPoint に設定します。

queryVector = queryPoint - vertex1

distance = |normalVector * queryVector |/||normalVector||

これは比較的安価な計算であり、さらに計算を実行するには距離が必要です。 この距離が現在の最適距離である ShortestDistance より小さい場合、この三角形は、その距離を含む平面よりも優れた距離を与えないので、より良い距離を生成しません。 この場合は、コントロールを三角形ループに戻します。 距離が ShortestDistance より小さい場合は、この点が三角形の内側にある場合は、近いポイントが存在する可能性があります。 それを判断するには、いくつかの "ハード" 計算を実行する必要があります (ただし、線形代数以外の計算は行う必要はありません)。 三角形の他の 2 つの頂点が vertex2 と vertex3 の場合は、基底ベクトル firstBasisVector と secondBasisVector を形成します。

firstBasisVector = vertex2 - vertex1

secondBasisVector = vertex3 - vertex1

次の線形方程式系を使用して、未知のあなたとvを解く。

firstBasisVector * queryVector = (firstBasisVector * firstBasisVector)u + (firstBasisVector * secondBasisVector)v

secondBasisVector * queryVector = (secondBasisVector * firstBasisVector)u + (secondBasisVector * secondBasisVector)v

投影された点が三角形の内側に配置される条件は次のとおりです。

0 ≤ u ≤ 1、0 ≤ v ≤ 1、you + v ≤ 1

この計算の後、投影された点が三角形内にあると判断された場合は、新しい最も近い点が見つかりました。最初に計算した距離は、新しい最短距離です。 この場合は、変数 ShortestDistance と ClosestPoint を更新します。 投影された点が三角形の外側にある場合は、エッジの 1 つに近い点が見つかる場合があります。 そのため、3 つの各エッジで ProcessEdge ルーチンを呼び出すことができます。

ProcessEdge ルーチンと ProcessVertex ルーチンのフローを示す図。

図 34 : ProcessEdge ルーチンと ProcessVertex ルーチン

ProcessEdge ルーチンは、図 34 に示す戦略 I を実装します。 ProcessEdge は、エッジが以前に処理されたかどうかを確認することから始まります。 その場合、それ以上のアクションは実行されません。 そうでない場合は、エッジを含む無限線へのクエリ ポイントの直交投影を計算します。 計算に関係する線形代数は、前の三角形の数式と似ています。 ただし、計算は簡単であり、ここでは説明しません。 投影されたポイントがエッジ内にある場合は、投影されたポイントからクエリ ポイントまでの距離が見つかります。 この距離が ShortestDistance より小さい場合は、新しい最も近いポイントが見つかりました。 ShortestDistance と ClosestPoint の両方を更新します。 投影されたポイントがエッジの外側にある場合は、2 つのエンドポイントで ProcessVertex を呼び出します。 コントロールを返す前に、エッジ履歴を更新して、このエッジが "PROCESSED" としてマークされるようにします。

最後に、ProcessVertex について説明します。 ProjectVertex ルーチンでは、戦略 I も実装され、頂点履歴テーブルが保持されます。 図 34 に示すように、最初に頂点が以前に処理されたかどうかを確認します。 その場合、それ以上のアクションは実行されません。 そうでない場合は、クエリ ポイントからの頂点の距離の計算に進みます。 距離が ShortestDistance より小さい場合は、ShortestDistance と ClosestPoint の両方を更新します。 最後に、頂点履歴が更新され、この頂点が "PROCESSED" としてマークされます。

外側のコントロール ループがすべての三角形を使い果たした場合、または色差のしきい値が満たされる前に終了すると、変数 ClosestPoint にアクセスします。 これは MinDEMap の結果です。 また、マップされた色がクエリの色からどれだけ離れているかに関心がある場合は、呼び出し元は ShortestDistance を取得することもできます。

色相スムージング

色相スムージングの 2 つのトップ ビューを示す図。上に元のビューと、下部にスムージングされた色相が示されています。

図 35 : 色相スムージング

色相に制約のある操作で問題が発生します。つまり、操作では、色相平面内の変数のみが考慮されます。 図35は、青色の色相で「不連続な」色相スライスを示す色域の例を示す。 この色相範囲内では、特定の色相角度の場合、色域境界は色相平面に接しています。 実際には、これにより、色相スライスのトポロジ構造が変化します。 示されている例では、色相平面がこの色相範囲を横切ってスイープすると、"島" が現れ、水中に沈みます。 トポロジのこの変更により、色相固有の操作が不連続になります。 たとえば、この範囲で色相の角度が変化すると、固定色相のカスプが急激に変化します。

色科学には、特定の操作で色相を維持することが望ましい理由があります。 上記の問題を解決するには、元の色域境界三角形を "色相平滑化" する必要があります。一般に、一連の色域境界三角形の色相スムージングは、(a) 実際のデバイスの色域に対応していない可能性がある新しい "色域" の境界を形成し、元の三角形のセットによって定義された色域を含む三角形のセットです。(b) 新しいセット内の三角形は、色相平面と平行になるのを防いでいます。

色相スムージングされた三角形のセットを取得する実用的な方法の 1 つは、元の頂点の凸包を取る方法です。 図35に示すように、凸包の色相スライスはトポロジの急激な変化なしに問題のある色相範囲で滑らかに変化する。

色域境界の説明でのプライマリとセカンダリの設定

HueMap などの特定の色域マッピング方法は、デバイスのプライマリとセカンダリの場所によって異なります。 加法デバイスの場合、プライマリは赤、緑、青 (R、G、B) です。2 番目はシアン、マゼンタ、黄色 (C、M、Y) です。 減算デバイスの場合、プライマリは C、M、Y です。セカンダリは R、G、B です。GBD は、これらの 6 つの値と白と黒 (W と K) をすべて Jab カラー値の配列で追跡します。 これらの値は、作成時に色域境界の説明に設定されます。 出力デバイスの場合、デバイス モデルを使用してデバイス制御値の組み合わせを実行することで、プライマリを決定できます。 キャプチャ デバイスの場合、この方法は、(0.0、0.0、1.0) などの完全に飽和した純粋なデバイス値を生成するイメージをキャプチャすることはほとんど不可能であるため、参照 GBD の作成には適していません。 WCS デバイス プロファイルには、キャプチャ ターゲット内のプライマリのインデックスが含まれます。 これらの値は ICC プロファイルに含まれていないため、ICC の表示条件に対して Jab に変換した後、一般的なスキャナー ターゲットから測定された値を使用します。

[色域境界の説明] でニュートラル軸を設定する

HueMap と相対 MinCD 色域マッピング メソッドでは、デバイスのニュートラル軸を使用して直線化します。 ベースライン出力デバイスの場合、ニュートラル軸は、DeviceToColorimetric メソッドを使用してデバイスニュートラル値 (R=G=B または C=M=Y) を実行し、CIECAM02 オブジェクトの ColorimetricToAppearance メソッドを使用して決定できます。 ただし、キャプチャ デバイスでは、ニュートラル サンプルが表示された場合、デバイスのニュートラル値が常に返されるとは限りません。 これは、アンビエント照明が完全に中立でない場合に特に当てはまります。 WCS デバイス プロファイルには、ターゲット内のニュートラル サンプルのインデックスが含まれています。 これらのサンプルを使用して、ニュートラル軸を設定します。 この情報は ICC プロファイルでは使用できないため、出力装置に使用されるのと同じ方法を使用する必要があります。DeviceToColorimetric メソッドを使用してデバイスニュートラル サンプルを実行し、入力値と比色結果を結合します。

基本的な色管理の概念

Windows カラー システムのスキーマとアルゴリズム