次の方法で共有


WCS Gamut Map モデル プロファイル スキーマとアルゴリズム

概要

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

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

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

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

マップ モデル プロファイルを示す図。

出力デバイスの着色剤空間のサンプリングは、分数ステップで 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。

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

Namespace

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 モデル プロファイル スキーマ。

Copyright (C) Microsoft。 すべての権限が予約されています。

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

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 比色意図に相当します。

手記

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。 当初 GBD で 1 つの色域シェルのみを想定していた SGCK アルゴリズムは、GCUSP からのクロム依存性 (Morovic、1998) と組み合わせて、ブラウンとフェアチャイルドによって提案されたシグモイドの明度マッピングと膝関数スケーリング (1999 年) を組み込んだSIG_KNEE アルゴリズム (Braun 1999) に基づいています。 これは、色相補正 Jab の色相角など、認識される色相を一定に保ち、一般的な (画像に依存しない) シグモイドの明度スケーリングを使用します。このスケーリングは、彩度に依存する方法と 90% のニー関数のクロマで適用されます。 バリアントは、一定の明るさの線に沿って拡大縮小されます。

単一の色域シェルの場合

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

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

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

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

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

ソースの色域境界がモノクロの場合、ニュートラル軸の配置により、モノクロ境界の彩度値は 0 になります。 これにより、C が 0 に等しい場合の縮退が発生します。 この場合、pC は 1 に設定されます。

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

 

JS(ブラウンとフェアチャイルド、1999) 計算するには、最初に、個別の累積正規関数 (S) に基づいて、元と再現の明度値の間に 1 次元ルックアップ テーブル (LUT) を設定します。

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

ここで、x ₀ と S はそれぞれ正規分布の平均と標準偏差であり、i = 0,1,2...mm は、LUT で使用されるポイントの数です。 Si は、i /m%に対する累積正規関数の値である。 パラメータは再生色域の黒点の明度に依存し、表1から補間することができる。 これらのパラメーターの計算の詳細については、ブラウンとフェアチャイルド (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 は、l上の E からの距離を表します。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 がゼロでない場合、デバイスの黒い点は 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 つだけあります。

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

一般化された明度の再スケール

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

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

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

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

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

pla または ref: Plausible Shell または Reference Shell

各 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 max J min しか使用されないため、これらの値は誘導参照シェルに対してのみ構成する必要があります。 2 つのシェルを持つ GBD に応じて、2 つのケースがあります。

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

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

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

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

ソース参照シェルとソースの妥当なシェルの値の数式が表示されます。

"ファッジ係数" F と F は、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。 これは、次のアルゴリズムを使用して行われます。

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

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

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

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

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

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

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

SGCK によるトーン反転を示す図。

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

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

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

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

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

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

図 12: 強化された黒

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

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

Hue マッピング

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

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

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

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

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

図 13: Hue ホイール

ソースブループライマリが宛先の青プライマリに回転されていない場合、より良い結果を得ることができます。 代わりに、ソースブルーの一次色相角度が宛先の青の一次色相角度として使用されます。

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

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軸(高彩度)から遠く離れたポイントでは、より多くの圧縮が適用されます。 0.5 を乗算して factorC が 1 未満であることを確認します。sourceC が referenceC よりわずかに大きく、2 倍にならない可能性があるためです。

factorC = (destinationC / referenceC) ? 0.5

どこ:

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

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

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

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

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

    どこ:

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

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

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

  3. factorJ にガンマに似たパワー関数を適用すると、factorJ が一定量減少します。 この例では、2 (正方形) の累乗を使用します。 元の factorJ から削減された factorJ を減算し、結果にプライマリ参照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 値です。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

すべてのカラー エンコードで入力イメージの色範囲が制限されるわけではありません。 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は、典型的なH&D曲線を示す。 x 軸は、増加する対数露出を表します。 y 軸は、スライドの密度を表します。 5つの参照点が曲線上にマークされています: 詳細のない黒, 負の最小密度を表します;黒と詳細;中間灰色のカードを参照します。白と詳細;と白。詳細は表示しません。 詳細のない黒 (デバイスの黒を表します) と黒と詳細 (シャドウ ブラック) の間にはスペースがあることに注意してください。 同様に、白と詳細 (拡散白) と白 (デバイスの白を表す) の間にはスペースがあります。

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

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

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

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

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

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

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

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

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

図 20: 3 つの色域シェル

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

新しいCTAでは、色域の外殻は、デバイスの色域のサンプルポイントから作られた凸包で形成される。 ハルは、一連のサンプル ポイントを取得し、サーフェスで囲むことで形成されます。 凸包には、あらゆる場所で凸になるという追加のプロパティがあります。 したがって、これは、データに適合できる最小の可能なハルではありません。 しかし、実験では、サンプル ポイントを厳密にフィットさせすぎると、滑らかなシェーディングの欠如など、画像内の不自然なアーティファクトが発生する可能性があることが示されています。 凸包はこれらの問題を解決するようです。

アルゴリズムでは、デバイスからサンプリングされた一連のポイントの色の外観値が取得されます。 モニターとプリンターの場合、サンプルを出力して測定することで、色の外観の値を取得します。 デバイス モデルを作成し、デバイス モデルを通じて合成データを実行して、測定値を予測することもできます。 その後、測定値はカラーメトリック空間 (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 に実装できる可能性は多数あります。 さらに、GMA はさまざまな方法で圧縮およびクリップできます。 これらの組み合わせはすべて、この発明の中で説明する。

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

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

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

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

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

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

青い色合いの

図 24: 一般的な CRT モニターには、青い色合いの独特の "カービングイン" を示す色域があります。 この色相範囲内に色相スライスを取り込む場合、分離された島が色相スライスに表示されることがあります。

中立軸に

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

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

色域境界の三角測量

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

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

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

境界線要素

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

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

Gamut 操作: CheckGamut

次の例では、フレームワークのしくみと CheckGamut の実行方法、つまり色が色域内かどうかをチェックする操作について説明します。

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

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

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

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

完全な Hue 平面: 交差

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

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

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 番目の要素は常にゼロになります。 さらに、ドット積のルックアップ テーブルは、色域境界三角形の各頂点のエントリを持ち、対応するドット積が無効な値に設定するように初期化されます。

色相平面と三角形を交差させる 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 以外であると仮定すると、頂点 1 は負のドット積 dotProduct1 頂点になります。および vertex2 は、ドット積 dotProduct2 頂点です。 この順序は、計算された交差ポイントがエッジの表現における頂点の順序に依存しないようにするために重要です。 エッジの幾何学的概念は、頂点に対して対称です。 エッジのパラメトリック方程式を使用する計算上の側面は非対称性 (開始頂点の選択) を導入します。これは、解決される線形方程式の数値ノイズとコンディショニングのために、少し異なる交差点を与える可能性があります。 これとは言って、交差点、交差点は、以下によって与えられる。

t = dotProduct1/(dotProduct1 - dotProduct2)

交差点。J = vertex1。J + t * (頂点 2.J - 頂点 1。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 つの色域操作固有のコンポーネントがあります。 内部処理データ は、ラインエレメントプロセッサによって処理されたラインエレメントのリストです。 この場合、ライン要素プロセッサ は、単に行要素をリストに追加します。 内部処理データ の内部データ構造には、リンク リストまたはサイズを拡大できる配列を指定できます。

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

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

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

図 30: CheckGamut のしくみ

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

最小色差の色域マッピング (MinDEMap) には、単純な仕様があります。色が色域内にある場合は、何も行いません。 色が色域外の場合は、色域境界の "最も近い" ポイントに投影します。 使用する色差方程式を指定するまで、キーワード "nearest" は明確に定義されていません。 実際には、計算を簡単かつ迅速にするために、選択した色の外観空間のユークリッド距離、またはそのバリエーションが色差メトリックとして使用されます。 ユークリッドメトリックの利点は、空間のドット積と互換性があり、線形代数を使用できるということです。 詳細には、空間に "ドット積" が定義されている場合、距離は、それ自体との差分ベクトルのドット積の平方根として定義できます。 ドット積は、一般に、正の明確な 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 a component of v) + (b component of you)(b component of v)

ここで、w J は正の数です。 さらに 1 つのバリエーションとして、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ₐₓ の彩度の小さい値です。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

'ProjectPointToBoundary' ルーチンを示す図。

図 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 です。 ただし、これは変換チェーンの中間ステップに過ぎない可能性があるため、計算の精度を維持するには、実装でしきい値 0.005 を使用します。

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

queryVector = queryPoint - vertex1

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

これは比較的安価な計算であり、さらに計算を実行するには距離が必要です。 この距離が現在の最も近い距離である ShortestDistance より小さい場合、この三角形は、その距離を含む平面よりも優れた距離を与えないので、より良い距離を生成しません。 この場合、コントロールを三角形ループに戻します。 距離が ShortestDistance より小さい場合、この点が三角形の内側にある場合は、より近いポイントが存在する可能性があります。 それを判断するには、いくつかの "ハード" 計算を実行する必要があります (線形代数を超えることはありません)。 三角形の他の 2 つの頂点が頂点 2 と頂点 3 の場合は、基底ベクトル 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 ルーチンでは、Strategy I も実装され、頂点履歴テーブルが保持されます。 図 34 に示すように、最初に頂点が以前に処理されたかどうかを確認します。 その場合、それ以上のアクションは実行されません。 そうでない場合は、クエリ ポイントからの頂点の距離の計算に進みます。 距離が ShortestDistance より小さい場合は、ShortestDistance と ClosestPoint の両方を更新します。 最後に、頂点履歴が更新され、この頂点が "PROCESSED" としてマークされます。

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

Hue Smoothing

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

図 35: Hue Smoothing

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

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

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

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

HueMap などの特定の色域マッピング方法は、デバイスのプライマリとセカンダリの場所によって異なります。 加法デバイスの場合、原色は赤、緑、青 (R、G、B) です。二次はシアン、マゼンタ、黄色 (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 カラー システムのスキーマとアルゴリズムの