建立轉換
若要正確說明色彩轉換的運作方式,最好透過 ICM 2.0 和 CTE 的內部來說明完整的處理路徑。 ICM 2.0 CreateColorTransformW 函式會建立色彩轉換,應用程式可用來執行色彩管理。 此函式會從 LOGCOLORSPACE 和意圖輸入建立色彩內容。 意圖會對應至基準 ICC 遊戲對應演算法相互關聯。 然後,函式會呼叫ICM 2.0 函式 CreateMultiProfileTransform ,以便進行一致的色彩處理。 CreateColorTransform 函式通常會將數據複製到內部優化轉換結構。
ICM 2.0 CreateMultiProfileTransform 函式會接受配置檔陣列和意圖數位或單一裝置連結配置檔,並建立應用程式可用來執行色彩對應的色彩轉換。 它會處理這些輸入配置檔和意圖,以建立裝置模型、色彩外觀模型、gamut 界限描述和遊戲對應模型。 以下是完成此作業的方式:
- 裝置型號會直接從 DM 配置檔初始化。 呼叫 CreateMultiProfileTransform 時,會為每個配置檔建立一個裝置型號。
- 色彩外觀模型會直接從 CAM 配置檔初始化。 呼叫 CreateMultiProfileTransform 時,每個配置檔都有一個 CAM 配置檔。 不過,可以針對多個配置檔指定相同的 CAM 設定檔。
- Gamut 界限描述是從裝置模型物件和 CAM 物件初始化。 呼叫 CreateMultiProfileTransform 時,每個配置檔都有一個範圍界限描述。
- Gamut 對應模型是從兩個 gamut 界限和意圖初始化。 您必須在每個從呼叫 CreateMultiProfileTransform 所建立的裝置模型之間建立遊戲對應模型。 請注意,這表示您使用比裝置型號少一個遊戲地圖模型。 因為意圖數目符合裝置型號的數目,因此也有一個以上的意圖。 會略過清單中的第一個意圖。 您可以逐步解說裝置型號和意圖的清單,並建立遊戲對應模型。 挑選第一個和第二個裝置型號和第二個意圖,然後初始化第一個遊戲對應模型。 挑選第二個和第三個裝置型號和第三個意圖,然後初始化第二個遊戲對應模型。 以這種方式繼續進行,直到您建立所有遊戲對應模型為止。
正確處理設定檔並初始化所有中繼物件時,您可以使用下列呼叫來建立 CITE 轉換。 pDestCAM 和 pDestDM 是與 CreateMultiProfileTransform 呼叫中最後一個配置文件相關聯的配置檔。
HRESULT CreateCITEColorTransform(
__inout IDeviceModel *pSourceDM,
__inout IColorAppearanceModel *pSourceCAM,
__in GamutMapArray *pGamutMapArray,
__inout IColorAppearanceModel *pDestCAM,
__inout IDeviceModel *pDestDM,
EColorTransformMode eTransformMode,
__deref_out IColorTransform **ppCTS
);
支援外掛程式
設定轉換清單所涉及的一個問題是驗證是否需要可用的外掛程式。 下列模型參數會提供此原則來控制此行為。 此轉換清單的管理是內部優化轉換結構中的方法,但每個模型方法都會提供本身及其本身參數值的指標。
模式必須是下列其中一項。
- TfmRobust:如果度量配置檔指定慣用外掛程式且外掛程式無法使用,新的 CTE 系統將會使用基準外掛程式。 如果兩個外掛程式都無法使用,轉換將會回報錯誤。
- TfmStrict:如果 ColorContext 指定慣用的外掛程式,則必須提供外掛程式。 如果找不到慣用的外掛程式,將會使用基準外掛程式。 如果兩個外掛程式都無法使用,轉換將會回報錯誤。
- TfmBaseline:只能在 AddMeasurementStep 中使用基準外掛程式。 如果 ColorContext 指定慣用的外掛程式,則會忽略外掛程式。 如果無法使用基準外掛程式,轉換將會回報錯誤。
轉換執行
ICM 2.0 API TranslateColors 函 式會將色彩陣列從來源 色彩空間 轉譯為色彩轉換所定義的目的地色彩空間。 此函式會在內部檢查快取色彩數位,以立即比對常用的轉換色彩。 此轉換支援每個通道位元組數位 8 位,以及每個通道浮點數陣列 32 位。 所有其他格式都會在傳遞至新的 CTE 之前進行轉換。
ICM 2.0 API TranslateBitmapBits 函式會轉譯具有已定義格式的點陣圖色彩,以要求的格式產生另一個點陣圖。 此函式會在內部檢查快取色彩數位,以立即比對常用的轉換色彩。 為了避免太多程式碼路徑、支援及測試複雜度,轉換和插補引擎實際上只支援有限的點圖格式。 此函式必須將非原生傳入和傳出位圖格式轉譯為原生支援的格式進行處理。 此轉換僅支援每個通道位元組點陣圖 8 位和每個通道 32 位浮點點點位圖。 所有其他格式都會在傳遞至新的 CTE 之前進行轉換。
循序轉換執行
如果在呼叫 ICM 函式 CreateColorTransformW 或 CreateMultiProfileTransform 時,dwFlags 參數已設定SEQUENTIAL_TRANSFORM位,則會循序執行轉換步驟。 這表示程式代碼會分別逐步執行每個裝置型號、色彩外觀模型和遊戲對應模型,如 CreateColorTransform 或 CreateMultiProfileTransform 呼叫所指定。 這可能有助於偵錯外掛程式模組,但比透過優化轉換執行的速度要慢得多。 因此,不建議在生產環境中以循序模式執行。 此外,在循序模式和優化模式中取得的結果可能會稍有差異。 這是因為函式串連在一起時所引進的變化。
建立優化轉換
優化的轉換是多維度查閱表格。 數據表可由多維度插補引擎處理,例如四維插補點,以將輸入色彩套用至轉換。 下一節說明如何建立優化的查閱表格。 之後的 區段會說明如何在優化查閱表中插補。
疏鬆查閱表格
傳統印表機具有 CMYK 筆跡。 為了擴充遊戲範圍,其中一種方法是將新的筆跡新增至系統。 通常新增的筆跡是 CMYK 筆跡難以重現的色彩。 常見的選擇是橙色、綠色、紅色、藍色等。若要增加「明顯解析度」,可以使用具有不同色調的墨水,例如淺青色、淺洋紅等。 實際上,印表機裝置有四個以上的通道。
雖然印表機是輸出裝置,但它們也會執行從裝置空間到另一個色彩空間的色彩轉換。 在 CMYK 印表機的情況下,這會從 CMYK 轉換為 XYZ 或印表機的「轉寄模型」。 藉由結合正向模型與其他轉換,就可以模擬另一個裝置上的 CMYK 列印。 例如,對監視器 RGB 的印表機 CMYK 可能會產生校訂機制,以模擬該 CMYK 印表機在監視器上的列印。 同樣地,同樣也適用於 hi-fi 印表機。 CMYKOG 到 RGB 轉換允許在監視器上校訂 CMYKOG 印表機。
實作這類色彩轉換的傳統方法是使用統一的 LUT。 例如,在 CMYKOG 印表機的 ICC 設定檔中,ICC 規格會規定 A2B1 標記,該標籤標會儲存統一的 LUT,代表正向模型的 CMYKOG 裝置空間中的統一取樣,從 CMYKOG 到 ICC 配置檔連接空間(CIELAB 或 CIEXYZ)。 ICC 裝置連結配置檔可讓您從 CMYKOG 裝置空間直接轉換到任何色彩空間,包括裝置空間,也以 CMYKOG 空間中統一取樣的 LUT 形式。 取樣永遠不會使用 256 個層級(位深度 8)完成,因為產生巨大的 LUT,除非單色設備 (1 個通道) 的情況。 而是使用具有較低位深度的取樣;一些典型的選擇是9 (位深度3), 17(位深度4), 33 (位深度5)。 由於每個通道中的層級數目小於 256,如果層級介於兩個取樣層級之間,LUT 會與插補演算法搭配使用,以產生結果。
雖然統一 LUT 在概念上很容易實作,且統一 LUT 上的插補通常有效,但 LUT 大小會隨著輸入維度以指數方式增加。 事實上,如果 d 是統一 LUT 中使用的步驟數目,而 n 是來源色彩空間中的通道數目,則 LUT 中的節點數目是
顯然,節點數目在記憶體中快速要求如此多的記憶體,甚至在線運算系統也很難處理需求。 針對具有六或八個通道的裝置,ICC 實作裝置配置檔需要使用 LUT 中的幾個步驟,有時甚至會降低到 A2B1 數據表中的五個步驟,以將配置檔保留在 MB 內,而不是 GB。 顯然,使用較少的步驟會增加插補錯誤,因為現在樣本較少。 由於 LUT 必須一致,因此即使空間的那些區域中,整個色彩空間的精確度也會降低,因為裝置值可能會造成顯著色彩差異。
在具有四個以上著色器的裝置中,整個裝置空間的某些子空間比其他裝置空間更重要。 例如,在 CMYKOG 空間中,青色和綠色墨水很少一起使用,因為它們的色調基本上彼此重疊。 同樣地,黃色和橙色筆跡基本上彼此重疊。 步驟數目的統一縮減可視為整個色彩空間質量的整體降低,這是您無法為可能或重要的組合買得起的。
雖然統一取樣的 LUT 對於插補而言很簡單且有效率,但隨著維度增加,它會產生巨大的記憶體需求。 事實上,雖然裝置可能有六或八個通道,但它們很少同時使用。 在大部分情況下,色彩轉換的輸入色彩只有少數「作用中」著色器,因此位於較低維度的色彩空間中。 這也表示插補可以在較低的維度空間中更有效率地執行,因為當維度較低時插補速度較快。
因此,方法是將整個裝置空間分層成各種維度的子空間。 由於較低維度(結合三或四種著色器)更重要,通過分層空間,您也可以套用不同的取樣率:也就是說,不同的步驟數目,到片段:提高較低維度的取樣率,減少較高維度的取樣率。
若要修正表示法, n 是您想要取樣之色彩轉換來源色彩空間中的通道數目。 您也可以將 n 稱為輸入維度,除非另有指定,否則
基本建置組塊是各種輸入 維度 和大小的 LUT,而不是一個具有輸入維度 n 的統一 LUT。 為了更精確,LUT 是一個矩形的格子,加在單位立方體上:也就是說,所有裝置座標都會正規化為範圍 [0, 1])。 如果 是 lut 的輸入維度(請注意,不一定等於 n,雖然
則它包含 ν一維取樣方格:
Samp i: 
其中 所有 xjs 必須位於範圍 [0, 1],
是 第 i 個通道取樣的步驟數目,必須至少為 1,而
必須是 1。 另一方面,
不需要為 0。
只會定義下列兩個 LUT 特殊案例。
已關閉 LUT:這是 LUT,每個 Samp*i*的額外需求,
,並
統一封閉的 LUT 是一個封閉的 LUT,其具有相同的顯示每個通道的
節點會統一間距在 0 到 1 之間。
開啟 LUT:這是 LUT,每個 Samp i、
可以讓
目標是將單位 Cube [0, 1] n 分層成封閉的 LUT 集合,並開啟 LUT,讓整個集合將涵蓋單位 Cube。 透過維度來組織這些「LUT 層」在概念上比較簡單,因此在最上層:
其中
是 “k -dimensional strata 集合”。請注意,層層維度從 3 開始,而不是 0;也就是說,因為可以處理三色組合的插補,而不需要太多記憶體需求。
LUT 層的描述
在此實作中:
由具有三個輸入的封閉 LUT 所組成,一個來自從 n 色板中選擇之三種色板的每個可能組合。
由一個封閉的 LUT 組成組合 CMYK (或前四個著色器
針對所有其他四色組合開啟 LUT。 藉由唱出 CMYK 組合,即表示這是一個重要的組合。對於
,
由
所組成。開啟 LUT,每一個可能組合選擇 k 色板 從 n 個色板總數。
它仍可指定 LUT 的大小。 開啟和關閉 LUT 之間的主要差異在於開啟的 LUT 不會重疊,而關閉的 LUT 可能會重疊於界限臉部。 事實上,開放式 LUT 中的一維取樣不包含 0,基本上表示開啟的 LUT 遺漏了界限臉部的一半,因此名稱為 “open”。如果兩個 LUT 沒有重疊,您可以使用不同數目的步驟或每個通道中的節點位置。 如果兩個 LUT 重疊,則也是如此。 在此情況下,如果步驟數目或節點位置不同,則位於兩個 LUT 交集的點將會根據插補中所使用的 LUT 來接收不同的插補值。 此問題的簡單解決方案是每當兩個 LUT 重疊時,使用相同數目的步驟的統一取樣。 換句話說:
所有已關閉的 LUT(此實作中所有三色 LUT 和 CMYK LUT)都必須一致,且步驟數目相同,其表示為 d。
下列兩種演算法可用來判斷已關閉 LUT 的步驟數目,以及開啟 LUT 的步驟數目。
演算法 #1
此演算法不需要外部輸入。
所有已關閉的 LUT 都會以 d 個步驟數目統 一 。
維度 k 的所有開啟 LUT 在每一個輸入通道中都會有相同數目的步驟
而且節點會相等間距;也就是說,針對每個
Samp i: 
最後,在下表 1 中指定 d 和 d (k )。 這三種模式「證明」、「正常」和「最佳」是ICM 2.0質量設定。 在此實作中,證明模式具有最小的記憶體使用量,而最佳模式具有最大的記憶體使用量。
若要實作此演算法,您必須呼叫下列演算法 #2。 用戶可以使用數據表作為指南來指定自己的取樣位置。
演算法 #2
此演算法需要外部輸入格式為「重要」取樣位置的清單,但它更具調適性,而且可能會節省記憶體空間。
所需的輸入是使用者所提供的裝置值數位。 這些裝置值表示裝置色彩空間的區域很重要;也就是說,應該取樣哪些區域。
所有已關閉的 LUT 都會以 d 個步驟來統一,如演算法 #1 中所述。 表 1 中提供 d 的值。
(a) 統一封閉 LUT
| 校訂模式 | 一般模式 | 最佳模式 | |
|---|---|---|---|
| d | 9 | 17 | 33 |
(b) 開放 LUT
| 輸入維度 | 校訂模式 | 一般模式 | 最佳模式 |
|---|---|---|---|
| 4 | 5 | 7 | 9 |
| 5 | 2 | 3 | 3 |
| 6 | 2 | 3 | 3 |
| 7 | 2 | 2 | 2 |
| 8 或更多 | 2 | 2 | 2 |
表 1: 演算法中使用的 LUT 大小
每個開啟的 LUT 在每個輸入通道中可以有不同數目的步驟,而且取樣位置不必相等間距。 對於指定的開放式 LUT 層,有相關聯的著色器組合,例如
,其中
是介於 1 到 n 之間的相異整數。 它們是對應到這個階層中「使用中」色板的通道索引。
步驟 1:篩選掉此階層中未包含之裝置值的輸入陣列。 裝置值
。包含在階層中,如果 和 只有在
所有其他通道都是 0。 如果篩選的集合有 N 個專案,請讓
針對每個
,逐一查看下列步驟 2-5:
步驟 2:如果
,則 Samp i 只有 1 點,這必須是 1.0。 移至下一個 i。 否則,請繼續進行步驟 3。
步驟 3:依
通道中的遞增順序排序篩選的樣本。
步驟 4:使用節點定義「暫定」取樣方格
其中 
步驟 5:將暫定網格線正規化,以確保其符合嚴格的單調性,並且以 1.0 結尾。 因為陣列已經排序,暫定方格中的節點已經是單調的非宣告。 不過,相鄰節點可能相同。 您可以視需要移除相同的節點來修正此問題。 最後,在此程序之後,如果結束點小於 1.0,請將它取代為 1.0。
請注意,步驟 5 是 LUT 層層在每個通道中可能有不同的步驟數目的原因。 正規化之後,通道中的步驟數目可能小於
插補
您可以開啟 LUT 層和封閉的 LUT 層,來建構單位 Cube 的分層。 若要使用此「疏鬆 LUT 結構」來執行插補,請遵循下列步驟。 假設指定的輸入裝置值
步驟 1:判斷「使用中」通道的數目。 這是非零通道的數目。 這會決定階層維度 k 以搜尋包含的階層。 更精確地說,如果使用中的通道數目
,則層層維度為 3。否則,層層維度與使用中信道的數目相同。
步驟 2:在
] 中,搜尋包含的階層。 如果對應至階層的所有通道具有非零值,且所有其他通道都是零,則裝置值會包含在開放式階層中。 如果階層未表示的每個通道都是零,裝置值就會包含在封閉層中。 如果找不到包含階層的 ,就會發生錯誤狀況。 取消並回報失敗。 如果找到包含階層,請繼續進行下一個步驟。
步驟 3:如果已關閉包含階層,則任何已知的插補演算法都可以在階層內進行插補。 在此實作中,演算法的選擇是四合插補點。 如果包含的階層已開啟,且裝置值嚴格位於階層內,也就是
第一個節點在第一個通道
其中 i 是階層的通道索引,然後是標準插補演算法,例如四角插補點,可以運作。
如果 i 通道中的
第一個節點,則裝置值會落入階層與較低維度子空間之間的「間距」。 此MOI與內插補點演算法無關,因此任何插補演算法都可以用來在此「間距」內插補,不過慣用的演算法是下列跨定義插補。
圖 1 的兩個部分說明插補模組的架構。
圖 1: 插補模組架構
如先前所述,此演算法能夠在包含重要著色器組合的裝置空間區域中達到相當密集的取樣,同時將所需的 LUT 總大小降到最低。 下表顯示疏鬆 LUT 實作所需的節點數目比較(使用演算法 #1 和標準模式),以及對應的統一 LUT 實作。
| 輸入通道數目 | 疏鬆 LUT | 統一 LUT |
|---|---|---|
| 5 | 142498 | 1419857 |
| 6 | 217582 | 24137567 |
| 7 | 347444 | 410338673 |
| 8 | 559618 | 6975757441 |
單位 Cube 內的插補
矩形方格的基本步驟是在封入單元格內插補。 對於輸入點,您可以輕鬆地判斷封入單元格。 在矩形方格中,會指定封入儲存格每個頂點(邊點)的輸出值。 它們也是插補者必須滿足的唯一界限條件:插補項必須通過所有這些點。 請注意,這些界限條件位於「離散」點上,在此案例中為單元格的 2n 角點,其中 n 是色彩空間的維度。
在繼續之前,正式化界限條件的概念很有用。 對於封入儲存格界限的任何子集 S(n 維度中的單位 Cube),S 上的界限條件是 BC:S → Rm 的規格,其中 m 是輸出維度。 換句話說,插補項可能表示 Interp: [0,1]n→ Rm,必須滿足:S 中所有 x 的 Interp(x) = BC(x)。
在單位 Cube 上插補的標準案例中,S 是 Cube 2n 頂點的離散點集合。
您現在可以將界限條件一般化,以解決稍早所述的問題,並在單元 Cube 內提供新的插補演算法。 界限條件不能只允許離散界限點,而是可以在 Cube 的整個界限面上強加界限條件。 精確的假設如下:
(a) point vn =(1,1,...,1) 是特殊的,只允許離散界限條件。 換句話說,習=1 (i=1,...,n) 的 n 界限臉部不能有連續界限條件。
(b) 針對其餘 n 個界限臉部習=0 (i=1,...,n),可以在整個臉上加上界限條件,而如果兩個臉部相交,則臉部上的界限條件應該在交集上達成一致。
(c) 未包含在具有界限條件的臉部中的任何頂點,都會有個別(離散)界限條件。
您可以將離散界限條件稱為有限數據,而連續界限條件則稱為跨定義數據,以討論有限和跨定義數據的插補。
首先,審查標準四合插補(如在薩卡本專利中使用的),這有助於為這個問題的特定公式設定表示法。 已知單位 Cube [0,1]n 可以細分為 n! perhedra,由 n 符號上的一組排列參數化。 更具體地說,每一種這種四合子都是由不平等所定義
其中 σ:{1,2,..,n}→{1,2,...,n} 是 “symbols” 1, 2, ..., n 的排列,也就是說,它是 n 符號集的雙向對應。 例如,如果 n = 3 和 σ = (3, 2, 1), 表示 σ(1)=3, σ(2)=2, σ(3)=1,則對應的四合鐵龍是由 z≥y≥x 定義,其中一般表示法 x, y, z 用於 x1, x2, x3。 請注意,這些四合器不會彼此脫節。 為了進行插補,無論插補中使用哪一個四邊形值,位於兩個相異四重朗的一般臉部上的點都會有相同的插補值。 不過,在對有限點進行插補的標準案例中,針對指定的輸入點 (x1, ..., xn),先判斷它位於哪一個四分之一位,或同等地判斷其所在位置的對應排列σ,然後四合插補值定義為
其中
針對 i=1、...、n 和 e1、...,en 是標準基礎向量。 在繼續進行一般化之前,請注意 v0、 v1、 ..., vn 是四邊形的頂點,而顯示巴里中心座標是 “
”。
針對界限臉部上的一般BCS案例,您可以使用巴里中心投影的概念。 和之前一樣,針對指定的輸入點 (x1, ..., xn),會先判斷它所在的四邊形,或同等的對應排列σ。 然後執行一系列巴裡奇的投影,如下所示。 第一個投影
會將點傳送至平面
。除非
在此情況下不會變更。 地圖 BProj 的精確定義如下:
with
和 k = 1, 2, ..., n。
如果
,您可以停止,因為 BC 定義於 vn by 假設 (a) 。 如果
很明顯,
具有第σ(1)個元件。 換句話說,它位於其中一個界限面上。 無論是在 BC 定義的臉部上,在這種情況下,您可以停止,或執行另一個巴基中心投影
其中
如果
位於 BC 定義的臉部上,您可以停止;否則,執行另一個投影
因為每個投影都會消滅一個元件,所以有效維度會減少,因此您知道程式最終必須停止。 在最壞的情況下,您會執行 n 個投影到維度 0,也就是 Cube 上的頂點,根據假設 (c),您知道 BC 將會定義於上。
假設已使用 執行 K 投影
x(0)= x,輸入點,BC 定義於 x(k)。 然後,藉由定義一系列的輸出向量來回溯投影:
其中
,您最終獲得答案
Worked 範例
圖 2: Worked 範例
請考慮圖 2 中所述的情況,其中 n = 3,m = 1,而且您有下列 BCS:
(a) 頂點上的四個離散DC
(0, 0, 1): β001
(0, 1, 1): β011
(1, 0, 1): β101
(1, 1, 1): β111
(b) 臉部 x3=0 連續 BC: F(x1, x2)
計算 #1:輸入點 x = (0.8, 0.5, 0.2)。 封入四合子與排列 <1, 2, 3> 相關聯。
第一個投影: 
這已在臉部 x3=0 上,因此您可以停止。 然後提供回溯替代
這是答案。
計算 #2:輸入點 x = (0.2, 0.5, 0.8)。 封入四合體與排列 <3, 2, 1> 相關聯。
第一個投影: 
第2個投影: 
第三個投影:
,其位於臉部 x3=0。 然後提供回溯替代
這是最終答案。
應用程式
(a) 循序四邊插補
圖 3: 循序四合插補點
請參閱圖 3。 若要在兩個已強加不相容網格線的平面之間插補,請考慮將指定的點 P 括在圖中顯示的儲存格。 單元格的「頂端」頂點直接來自頂端平面中的方格。 底部臉部的頂點與底部平面中的網格線不相容,因此會將整個臉部視為具有 BC,其值為內插補點在底部平面中的網格線所取得。 然後很明顯,此設定符合上述假設 (a)、(b) 和 (c),而且您可以套用插補點演算法。
此外也清楚,演算法已將插補問題的維度減少 1,因為結果是上網格線頂點值的線性組合,而下層平面的插補,其維度小於 1。 如果下層平面中有類似的三明治平面設定,您可以在該平面中套用程式,進一步減少維度 1。 此程式可以繼續進行,直到到達維度 0 為止。 這種投影和插補的串聯可稱為「循序四重插補點」。
(b) 差距插補
圖 4: 間距插補
這是一個網格線,嚴格位於正象限內的立方體上。 Cube 本身有一個網格線,而且每個座標平面都有不一定相容的網格線。 立方體與座標平面之間的「間距」具有「L 形」的橫段,不適用於標準技術。 不過,透過這裡引進的技術,您可以輕鬆地引進涵蓋此間距的儲存格。 圖 4 描述其中一項。 坐標平面上的網格線支援內插補點,可為單元格的所有下角提供必要的 BC,其中一個剩餘的頂點由立方體的下角提供。
實作的最後注意事項
在實際應用程式中,演算法的基本設定是擷取自較大的格子的「單位 Cube」,而頂點上的值可能需要昂貴的計算。 另一方面,也很明顯,四合插補只需要四邊形頂點的值,這是單位 Cube 之所有頂點的子集。 因此,實作所謂的「延後評估」是更有效率的。在上述演算法的軟體實作中,通常會有一個子程式,其頂點上的單位 Cube 和值做為輸入。 延後評估表示,不會在頂點傳遞值,而是傳遞評估頂點值的必要資訊,而不會實際執行評估。 在子程式內,只有在決定封入四合鐵龍之後,才會針對屬於封閉式四合子的頂點執行這些值的實際評估。
與高動態範圍虛擬 RGB 來源裝置搭配使用的查閱表格
如果是使用模型化為虛擬 RGB 裝置的來源裝置來建構轉換,則來源著色器值可能是負值或大於 unity (1.0)。 發生這種情況時,來源裝置稱為具有高動態範圍(HDR)。 此案例特別考慮。
在 HDR 轉換的情況下,可以從裝置的色域界限判斷每個色板的最小值和最大值。 藉由使用這些值,會套用每個色板色板的簡單縮放比例,讓色彩值等於最小著色器的值會轉換成 0.0,而色彩值等於最大著色器的值會轉換成 1.0,而值之間的線性縮放比例會介於 0.0 和 1.0 之間。
ICCProfileFromWCSProfile
由於這項功能的主要目的是要支援 Windows 的 Pre-Vista 版本,您必須產生 2.2 版 ICC 配置檔,如 ICC 規格 ICC.1:1998-09 中所定義。 在某些情況下(請參閱下表「基準裝置到 ICC 配置檔類別對應」),您可以從 WCS 設定檔建立矩陣或以 TRC 為基礎的 ICC 配置檔。 在其他情況下,ICC 配置檔是由 LUT 所組成。 下列程序說明如何建立 AToB 和 BToA LUT。 當然,國際刑院配置檔也有其他領域。 某些數據可以衍生自 WCS 配置檔。 對於其他數據,您必須開發智慧型手機預設值。 著作權將指派給Microsoft:因為它是Microsoft用來建立LUT的技術。
此設計應該適用於所有類型的裝置型號,包括外掛程式。只要外掛程式具有相關聯的基準裝置模型,就可以判斷基礎裝置類型。
建立 ICC 配置檔的一部分是建立 AToB 和 BToA 查閱表格。 這些數據表會對應裝置空間,例如 RGB 或 CMYK,以及配置檔連線空間 (PCS),這是 CIELAB 的變體。 這基本上與 CITE 轉換中使用的色彩管理程式相同,以便從裝置空間對應到裝置空間。 不過,您必須具備下列資訊才能進行轉換。
PCS 的參考檢視條件。
參考PCS遊戲。
在PCS值與色彩計量之間轉換的裝置型號。
WCS 配置檔及其相關聯的 CAM 會以參數的形式提供。 有兩種基準裝置模型會在色彩測量與PCS編碼之間轉換。 您需要兩個的原因如下所述。
您可以從 ICC 設定檔格式規格取得 PCS 的參考檢視條件。 ICC 設定檔格式規格中提供的資訊足以計算初始化 CMS 所用 CAM 所需的所有資料。 為了保持一致性和彈性,這項資訊會儲存在WCS色彩配置檔中。
您也可以使用 WCS 設定檔來儲存定義 PCS 參考範圍的範例。 CITE 色彩管理系統 (CMS) 有兩種方式可建立遊戲界限。 其中一個是取樣完整的裝置空間,並使用裝置模型來建立測量值。 第二種方法是使用配置檔中的測量樣本建立參考範圍界限。 因為 ICC PCS 的色域太大,無法產生有用的參考範圍,因此第一種方法是不適當的。 但第二種方法是彈性且以配置檔為基礎的方法。 若要重新定義參考PCS遊戲,您可以變更PCS裝置設定檔中的測量數據。
ICC PCS 是理想裝置的模型。 藉由建立PCS作為實際裝置的模型,您可以利用智慧CMM中使用的色彩管理程式。 從彩色計到PCS編碼建立裝置模型很簡單。 您只需對應真正的色度值與PCS編碼值。 由於裝置模型的 CMS 介面僅支援 XYZ 值,因此您可能也必須對應 XYZ 和 LAB。 這是已知的轉換。 本模型會在 7.9 和 7.10 節的 2.2.02「基準裝置型號」檔中描述。
如果裝置的 gamut 大於 PCS 的廣域,您可能必須執行一些遊戲對應。 基準 GMM 可用於此用途。 請注意,正確建立的 ICC 配置檔具有相對色度、感知和飽和度意圖的查找表,不過這些可能全都指向相同的 LUT 內部。
圖 5: 建立 AToB LUT
圖 5 說明此程式。 首先,裝置模型會從 DM 配置檔中的數據初始化。 然後,建構裝置遊戲界限,如下所示。 裝置型號的數據取樣會透過裝置模型執行,以取得色度數據。 色度數據會透過CAM執行,以建立外觀數據。 外觀數據是用來建立裝置遊戲界限。
接下來,使用來自參考PCS度量配置檔的數據來建立PCS的遊戲界限。
使用剛建立的兩個範圍界限來初始化 GMM。 然後,使用裝置型號、GMM 和 PCS 裝置模型來建立轉換。 透過轉換執行裝置空間的取樣,以建立 AToB LUT。
圖 6: 建立 BToA LUT
圖 6 說明如何建立 BToA LUT。 這與建立 AToB LUT 幾乎完全相同,其中交換了來源和目的地的角色。 此外,您必須取樣完整的PCS遊戲,才能建立LUT。
請注意,由於 CAM (WCS 中的 CIECAM02) 參與此程式,媒體白點與 PCS 白點之間的色度適應(由 ICC 授權為 D50),由 CAM 透明地影響。
HDR 虛擬 RGB 裝置
產生 HDR 虛擬 RGB 裝置的設定檔時,必須特別考慮:也就是說,色彩值可能小於 0.0 或大於 1.0 的裝置。 在 ATOB LUT 的產生中,會建置一組較大的 1D 輸入 LUT。 色彩值會縮放,並位移至範圍 0 。。 1 使用 WCS 設定檔中的最小和最大色彩值。
因為 HDR 裝置的色階空間不太可能完全填入,因此標記的 3D LUT 中也提供特殊支援。 為了處理疏鬆填入區域中的色彩,著色器會重新編碼,以便達到超過0.0和1.0的推斷。 使用的範圍 -1 。 +4.
由於套用至 3D LUT 的重新調整,因此會建置一組 1D 輸出 LUT,以將結果對應回 0 範圍。 1.
多個PCS
ICC發現,一個 PCS 不夠靈活,無法滿足 CMS 的所有預定用途。 在配置檔規格的第 4 版中,ICC 澄清了實際上有兩個 PCS 編碼。 一個用於色度意圖;另一個用於感知意圖。 (未針對飽和度意圖指定PCS。國際刑院已經使這部分模棱兩可。色度PCS有指定的最小和最大光度,但色度和色調值的範圍大約±127。 此 PCS 看起來像矩形的稜鏡。 如先前所述,感知PCS卷類似於噴墨印表機的色域。
這兩個 ICC PCS 也有兩種不同的數位編碼。 在感知PCS中,值為零代表零的光線。 在彩色PCS中,值為零代表PCS的最小光度,其大於零。 您可以針對每個 PCS 編碼使用不同的裝置型號來解決此問題。
Gamut 對應
若要在 ICC 設定檔中建立 AToB LUT,您可以從裝置遊戲區域對應到適當的 PCS 空間。 若要建立 BToA LUT,您可以從 PCS 空間對應到裝置遊戲。 AToB LUT 的對應與測量型 CMS 中使用的對應相當類似。 針對感知PCS,使用裁剪或壓縮任何跨色色彩,將裝置合理的 gamut 對應至感知PCS遊戲界限。 針對色度意圖,您可能必須裁剪光度,但色度和色調值全都會符合色度PCS遊戲。
BToA LUT 的對應稍有不同。 色度意圖仍然很容易;您只要將 PCS 值裁剪到裝置遊戲。 但 ICC 要求所有可能的 PCS 值都對應到某些裝置值,而不僅僅是感知 PCS 參考範圍內的值。 因此,您必須確定 GMM 可以處理參考範圍外部的來源色彩。 這可以藉由將這些色彩裁剪到裝置遊戲界限來處理。
將基準裝置對應至 ICC 配置檔類別對應
| 基準裝置類型 | ICC 設定檔類別 | 備註 |
|---|---|---|
| RGB 擷取裝置 | 輸入裝置 (“scnr”) | PCS 為 CIELAB。 AToB0Tag 是具有相對色度意圖之PCS的裝置。 |
| CRT、LCD 監視器 | 顯示裝置 (“mntr”) | PCS 是 CIEXYZ。 如需模型轉換,請參閱下列內容。 |
| RGB 投影機 | 色彩空間 (“spac”) | PCS 為 CIELAB。 |
| RGB 和 CMYK 印表機 | 輸出裝置 (“prtr”) | PCS 為 CIELAB。 |
| RGB 虛擬裝置 (非 HDR 大小寫) | 顯示裝置 (“mntr”) | PCS 是 CIEXYZ。 |
| RGB 虛擬裝置 (HDR 大小寫) | 色彩空間 (“spac”) | PCS 為 CIELAB。 |
監視配置檔的轉換並不涉及建置 LUT,而是包含建立矩陣或 TRC 模型。 在 ICC 中使用的模型與 WCS CRT 或 LCD 模型中使用的模型稍有不同,其中遺漏了「黑色修正」一詞。 具體說來
WCS 模型: 
ICC 模型: 
從 WCS 模型轉換成 ICC 模型,如下所示。
定義新的曲線:
這些不是音調複製曲線,因為它們不會對應 1 到 1。 正規化將達到此目的。 ICC 模型的最終定義如下:
針對非 HDR RGB 虛擬裝置,您也會為空間效率產生顯示 ICC 配置檔。 在此情況下,您可以直接從 WCS 配置檔的初選取得 tristimulus 矩陣 M ICC ,而不需要上述模型轉換。 最後一個,但很重要,請注意,這個三imulus矩陣必須以色度調整為 D50,以符合 PCS 的 ICC 規格。 換句話說,在 ICC 配置檔中要編碼之矩陣的每個數據列上的項目必須分別加總至 96.42、100 和 82.49。 在目前的實作中,色度適應是由 CAT02 完成,這也是 CAM02 中使用的色度適應轉換。
黑色保護與黑色世代
黑色保護的實作會與支援黑色通道之裝置中的黑色通道產生系結在一起。 為了達成此目的,會收集每個來源色彩的相關信息,以允許支援黑色通道的裝置型號,以判斷如何最好地在輸出上設定黑色色板。 雖然黑色保護與在一個黑色通道裝置之間轉換到另一個黑色通道裝置的色彩轉換有關,但針對涉及黑色通道目的地裝置的所有轉換實作黑色世代。
黑色通道資訊會記錄在名為 BlackInformation 的數據結構中。 BlackInformation 結構包含布爾值,指出色彩是否只包含黑色色彩,而數值則表示稱為黑色權數的「黑色」程度。 對於支援黑色色板的來源裝置,黑色粗細是來源色彩中黑色色彩的百分比。 對於不包含黑色色板的來源裝置,會使用其他著色器和外觀值來計算黑色權數。 稱為「色彩純潔度」的值是藉由取得最大著色劑值與除以最大著色劑值之間的差異來計算。 稱為「相對光線」的值是藉由取得色彩的光線與目的地裝置最小光線之間的差異,除以目的地裝置的最小和最大光度之間的差異來計算。 如果來源裝置是加法裝置(監視器或投影機),則黑色重量會決定為 1.0 減去色彩純潔乘以相對光線。 例如,如果來源裝置是 RGB 監視器,則會計算每個色彩的 R、G 和 B 最大值和最小值,而黑色粗細是由公式決定:
BW = (1.0 – (max(R,G,B) – min(R,G,B)) / max(R, G, B)) * 相對光度
例如,如果來源裝置支援減色,例如 CMY 印表機,則個別著色器必須「補碼」(減去 1.0),才能在上述公式中使用。 因此,針對 CMY 印表機,R = 1.0 – C、G = 1.0 – M,B = 1.0 – Y。
色彩轉換所處理之每個色彩的黑色資訊是在色彩轉換過程中決定的。 僅指定黑色保留時,才會判斷僅限黑色的資訊。 一律會判斷目的地裝置型號是否支援黑色著色器。 黑色資訊會透過 ColorimetricToDeviceColorsWithBlack 方法傳遞至目的地裝置模型,該方法會使用產生的 LUT。
請注意,由於色彩轉換優化,上述程式只會在建立優化的轉換 LUT 期間發生,而不是在執行 TranslateColors 方法期間。
使用三個以上的來源通道進行轉換的優化
優化轉換的大小取決於數個因素:來源裝置中的色彩通道數目、每個來源色彩色頻的數據表中的步驟數目,以及輸出裝置中的色彩通道數目。 用來判斷轉換資料表大小的公式為:
Size = 每個通道 來源\ 裝置的步驟數目(\\channels\ in\ source\ device) x 輸出裝置中的通道數目
如您所見,數據表的大小會根據來源裝置中的通道數目,以指數方式成長。 許多來源裝置都支援三個色彩通道,例如紅色、綠色和藍色。 不過,如果來源裝置支援四個通道,例如 CMYK、數據表的大小,以及建構數據表所需的時間會隨著步驟數目的因數而增加。 在以度量為基礎的CMS中,轉換是「即時建構」,這次很可能無法接受。
若要縮短建構色彩轉換表所需的時間,可以利用兩個事實。 首先,雖然來源裝置可能支援三個以上的色板,但中繼裝置獨立色彩空間(CIECAM02 Ja C b C C )只有三個色彩色板。 其次,處理中最耗時的部分不是裝置模型化(從裝置色彩座標轉換成三角形值),而是遊戲對應。 使用這些事實,您可以建構初步的色彩轉換表,以透過遊戲對應步驟,轉換裝置獨立色彩空間中的色彩,最後透過輸出裝置色彩模型。 此數據表的建構為第三個維度。 然後,我們會藉由將來源色彩組合轉換為中繼裝置獨立空間,然後使用初步色彩轉換數據表,完成轉換成輸出裝置色彩空間的維度四個最終色彩轉換數據表。 因此,您可以從計算(查閱表格中的步驟數目) 數目\ 通道 遊戲對應計算減少到中繼數據表 ₃ gamut 對應計算中的步驟數目。 即使您必須執行裝置模型化和三維表格查閱之通道計算的 (查閱表格) 數目\ 通道計算中的步驟數目,但這仍然比原始計算快得多。
上述程式會正常運作,前提是不需要在來源裝置型號與色彩轉換中的任何其他元件之間傳遞資訊。 不過,如果輸出裝置和來源裝置都支援黑色著色器,而來源黑色著色器用於判斷輸出黑色著色器,則程式將無法正確傳達來源黑色資訊。 替代程式是建構一個初步的色彩轉換表,以便只透過遊戲對應步驟轉換裝置獨立色彩空間中的色彩。 然後使用下列步驟來建構維度四個最終色彩轉換數據表:a) 將來源色彩組合轉換成中繼裝置獨立空間,b) 在初步色彩數據表中插補,而不是套用實際的色域對應程式,c) 使用來自 gamut 對應步驟和任何來源黑色通道資訊的結果值,以使用輸出裝置型號計算輸出裝置著色器。 即使沒有黑色通道,當來源和輸出裝置型號之間傳輸資訊時,也可以使用此程式:例如,如果兩個模組是使用外掛程式架構來實作,以允許模組之間的數據交換。
上述兩個程式可用來有效改善建構四維色彩轉換數據表所需的時間。
CheckGamut
ICM 會呼叫 CreateTransform 和 CreateMultiProfileTransform 接受旗標值的字組,其中一個是ENABLE_GAMUT_CHECKING。 設定此旗標時,CITE 必須以不同的方式建立轉換。 初始步驟相同:來源和目的地 CAM 必須初始化,然後必須初始化來源和目的地範圍界限描述元。 不論指定的意圖為何,都必須使用 CheckGamut GMM。 CheckGamut GMM 應該使用來源和目的地裝置模型和遊戲界限描述元來初始化。 不過,轉換應該接著建立包含來源裝置模型、來源 CAM、任何介入 GMM 和 CheckGamut GMM 的截斷轉換。 這可確保 CheckGamut CMM 輸出的差異 J、差異 C 和差異 h 值會成為最終產生的值。
當轉換中只有兩個裝置配置檔時,CheckGamut 的意義就很清楚了。 當有兩個以上的裝置配置檔和兩個以上的 GMM 時,CheckGamut 會報告是否已透過第一個裝置型號和最後一個 GMM 以外的所有色彩落在目的地裝置的範圍內。
相關主題