WCS 轉換建立演算法
建立轉換
為了正確說明色彩轉換的運作方式,透過 ICM 2.0 和 CTE 內部說明完整的處理路徑會很有説明。 ICM 2.0 CreateColorTransformW 函式會建立色彩轉換,讓應用程式可用來執行色彩管理。 此函式會從 LOGCOLORSPACE 和意圖輸入建立色彩內容。 意圖會對應至基準的 ICC 遊戲對應演算法相互關聯。 函式接著會呼叫 ICM 2.0 函式 CreateMultiProfileTransform ,以取得一致的色彩處理。 CreateColorTransform 函式通常會將資料複製到內部優化轉換結構。
ICM 2.0 CreateMultiProfileTransform 函式接受設定檔陣列和意圖陣列或單一裝置連結設定檔,並建立色彩轉換,讓應用程式可用來執行色彩對應。 它會處理這些輸入設定檔和意圖,以建立裝置模型、色彩外觀模型、遊戲界限描述和遊戲對應模型。 以下是完成此作業的方式:
- 裝置型號會直接從 DM 設定檔初始化。 呼叫 CreateMultiProfileTransform時,會為每個設定檔建立一個裝置型號。
- 色彩外觀模型會直接從 CAM 設定檔初始化。 呼叫 CreateMultiProfileTransform時,每個設定檔都有一個 CAM 設定檔。 不過,可以針對多個設定檔指定相同的 CAM 設定檔。
- 遊戲界限描述是從裝置型號物件和 CAM 物件初始化。 呼叫 CreateMultiProfileTransform時,每個設定檔都有一個遊戲界限描述。
- 遊戲對應模型是從兩個遊戲界限和意圖初始化。 您必須在從 呼叫 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 列印。 例如,印表機 CMYK 到監視器 RGB 可能會產生校訂機制,以模擬監視器上該 CMYK 印表機的列印。 同樣地,相同的也適用于 hi-fi 印表機。 CMYKOG 到 RGB 轉換允許在監視器上校訂 CMYKOG 印表機。
實作這類色彩轉換的傳統方法是使用統一 LUT。 例如,在 CMYKOG 印表機的 ICC 設定檔中,ICC 規格會要求 A2B1 標記,該標籤會儲存在轉送模型的 CMYKOG 裝置空間中代表統一取樣的 A2B1 標籤,該標籤會從 CMYKOG 到 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 是加在單位 Cube 上的矩形延遲;也就是說,所有裝置座標都會正規化為範圍 [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 strata」,因此在最上層:
其中 是 「k -dimensional strata 集合」。請注意,strata 維度從 3 開始,而不是 0;也就是說,點,因為可以處理三色組合的插補,而不需要太多記憶體需求。
LUT 階層的描述
在此實作中:
由具有三個輸入的封閉式 LUT 所組成,其中一個來自從 n 色板中選擇之三種色彩的可能組合。
由 CMYK 組合的一個封閉式 LUT (或前四個色彩) ,以及
開啟所有其他四色組合的 LUT。 藉由擷取 CMYK 組合,您確認它是重要的組合。
針對
]
。包含
。開啟 LUT,每個可能的組合都是從n個著色器總計選擇k色板。
它仍會保留以指定 LUT 的大小。 開啟和關閉 LUT 之間的主要差異在於開啟的 LUT 不會重迭,而關閉的 LUT 可能會與界限臉部重迭。 開放式 LUT 中的一維取樣不包含 0,基本上表示開啟的 LUT 遺漏一半的界限臉部,因此名稱為「開啟」。如果兩個 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 的值。
() 統一關閉 LUT
證明模式 | 標準模式 | 最佳模式 | |
---|---|---|---|
D | 9 | 17 | 33 |
(b) Open 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 個專案,let
針對每個 ,逐一查看下列步驟 2-5:
步驟 2:如果 Samp i 只有 1 點,這必須是 1.0。 繼續進行下一個 i。 否則,請繼續進行步驟 3。
步驟 3:在 通道] 中,以遞增順序排序篩選的樣本。
步驟 4:使用節點定義「暫訂」取樣方格
其中
步驟 5:將暫訂方格正規化,以確保其符合嚴格單調性,且結尾為 1.0。 因為陣列已經排序,所以暫訂方格中的節點已經是單純的非decreasing。 不過,相鄰節點可能相同。 您可以視需要移除相同的節點來修正此問題。 最後,在此程式之後,如果端點小於 1.0,請將它取代為 1.0。
請注意,步驟 5 是 LUT 階層在每個通道中可能有不同的步驟數目的原因。 正規化之後,通道中的步驟數目可能小於
插補
您可以藉由開啟 LUT strata 和封閉的 LUT strata 來建構單位 Cube 的階層。 若要使用此「疏鬆 LUT 結構」來執行插補,請遵循下列步驟。 假設指定的輸入裝置值
步驟 1:判斷「使用中」通道的數目。 這是非零通道的數目。 這會決定要搜尋包含層的 strata 維度 k 。 更精確地說,如果作用中的通道數目 ,則 strata 維度為 3。否則,strata 維度與使用中的通道數目相同。
步驟 2: ] 內,搜尋包含的階層。 如果對應至階層的所有通道都有非零值,且所有其他通道都是零,則裝置值會包含在開放式階層中。 如果階層未表示的每個通道都是零,則裝置值會包含在封閉式階層中。 如果找不到包含階層,則發生錯誤狀況。 取消並回報失敗。 如果找到包含階層,請繼續進行下一個步驟。
步驟 3:如果包含的階層已關閉,則任何已知的插補演算法都可以在階層內插補點。 在此實作中,演算法的選擇是內插補點。 如果包含階層已開啟,且裝置值嚴格位於階層內,即
第一個節點在第一個通道中
其中 i 是階層的通道索引,然後是標準插補演算法,例如內插補點,可以運作。
如果某些i通道中的第一個節點,則裝置值會落在階層與較低維度子空間之間的「間距」中。 此 MOI 並不涉及插補演算法,因此任何插補演算法都可以用來插補此「間距」,雖然慣用的演算法是下列 Transfinite 插補。
圖 1 的兩個部分說明插補模組的架構。
圖 1: Intepolation 模組架構
如先前所述,此演算法能夠在包含重要色彩組合的裝置空間區域中達到相當密集的取樣,同時將所需的 LUT 大小總計降到最低。 下表顯示使用演算法 #1 和標準模式) 和對應的統一 LUT 實作,來比較疏鬆 LUT 實作所需的節點數目 (。
輸入通道數目 | 疏鬆 LUT | 統一 LUT |
---|---|---|
5 | 142498 | 1419857 |
6 | 217582 | 24137567 |
7 | 347444 | 410338673 |
8 | 559618 | 6975757441 |
單位 Cube 內的內插補點
矩形格線在內插補點是內嵌儲存格的基本步驟。 針對輸入點,您可以輕鬆判斷封入儲存格。 在矩形方格中,會指定每個頂點 (角點) 的頂點輸出值。 它們也是 (BCS) 必須滿足的唯一界限條件:插補點必須通過所有這些點。 請注意,這些界限條件位於「離散」點上,在此案例中為儲存格的 2n 角點,其中 n 是色彩空間的維度。
在繼續進行之前,將界限條件的概念正式化相當實用。 對於封入儲存格的任何子集 S (n 維度中的單位 Cube) ,S 上的界限條件是 BC: S → Rm 的規格,其中 m 是輸出維度。 換句話說,插補符可能表示為 Interp: [0,1]n→ Rm,必須滿足:Interp (x) = BC (x) S 中的所有 x。
在單位 Cube 上的插補標準案例中,S 是立方體 2n 個頂點的離散點集合。
您現在可以將界限條件一般化,以解決稍早所述的問題,並在單元 Cube 內提供新的插補演算法。 界限條件不只允許離散界限點,而是可以在 Cube 的整個界限面上加總界限條件。 精確的假設如下:
() 點 vn = (1,1,...,1) 為特殊,而且只允許離散界限條件。 換句話說,無法在 n 界限臉部 xi=1 (i=1,...,n) 上加總連續界限條件。
(b) 針對其餘 n 個界限臉部 xi=0 (i=1,...,n) ,可以對整個臉部加總界限條件,而且如果兩個臉部相交,則臉部上的界限條件應該同意交集。
(c) 具有界限條件的臉部中未包含的任何頂點,都會有個別的 (離散) 界限條件。
您可以在討論有限和 Transfinite 資料的插補時,將離散界限條件稱為有限資料,以及連續界限條件當做 Transfinite 資料。
首先,請檢閱標準內插補點 (,例如 Sakamoto 專利) 中使用的插補法,有助於設定問題特定公式的標記法。 已知單位 Cube [0,1]n 可以細分為 n! texthedra,由 n 符號上的一組排列參數化。 更具體來說,每一個這類的擷取時間都是由擷取來定義
其中 σ:{1,2,..,n}→{1,2,...,n} 是 「symbols」 1, 2, ..., n 的相片順序,也就是說,它是 n 符號集的雙向對應。 例如,如果 n = 3 且 σ = (3, 2,1) ,表示 σ (1) =3,σ (2) =2,σ (3) =1,則對應的≥y≥x 定義,其中一般標記法 x, y, z 用於 x1, x2, x3。 請注意,這些擷取子不會彼此分離。 為了進行插補,無論內插補點用於內插補點為何,位於兩個相異擷取子的通用臉部上,都會有相同的內插補點值。 不過,在對有限點進行插補的標準案例中,針對指定的輸入點, (x1、...、xn) ,先判斷其所在或對等的對應排列σ,然後將對稱插補點定義為
其中 針對 i=1、...、n 和 e1、...、en 是標準基礎向量。 在繼續進行一般化之前,請注意 v0, v1, ..., vn 是一個子子的頂點,而
是「直心座標」。
針對界限臉部上的 BC 一般案例,您可以使用直心投影的概念。 和之前一樣,針對指定的輸入點 (x1、...、xn) ,請先判斷其位於哪一個擷取時間,或相當於對應的排列σ。 然後執行一系列的直心投影,如下所示。 第一個投影 。將點傳送至平面
除非
在此情況下不會變更。 地圖 BProj 的精確定義如下:
with 和 k = 1, 2, ..., n。
在 的情況下,您可以停止,因為 BC 是由假設 () 定義于 vn。 在
清楚顯示
具有σ (1) 第 1 個元件。 換句話說,它位於其中一個界限臉部上。 無論是在 BC 定義的臉部上,在此情況下您可以停止,或執行另一個直心投影
其中
如果
。位於 BC 定義的臉部上,您可以停止;否則,請執行另一個投影
因為每個投影都會讓一個元件成為一個元件,所以有效的維度會減少,因此您知道此程式最終必須停止。 在最差的案例中,您會將 n 個投影向下執行至維度 0,也就是 Cube 上的頂點,根據假設 (c) ,您知道 BC 將會定義于上。
假設已使用 執行 K 投影
x (0) = x,輸入點和 BC 定義于 x (k) 。 然後定義一系列的輸出向量來回溯投影:
其中 最後您得到答案
有效範例
圖 2: Worked 範例
請考慮圖 2 中所述的情況,其中 n = 3,m = 1,而且您有下列 BCS:
在頂點上 () 四個離散 BC
(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 > 相關聯。
第 1 個投影:
這已經在臉部 x3=0 上,因此您可以停止。 然後,回溯替代會提供
這是答案。
計算 #2 :輸入點 x = (0.2、0.5、0.8) 。 封入的與排列 < 3, 2, 1 > 相關聯。
第 1 個投影:
第 2 個投影:
第三個投影: ,其位於臉部 x3=0 上。 然後,回溯替代會提供
。這是最終答案。
應用程式
() 循序插補點
圖 3: 循序排定插補點
請參閱圖 3。 若要在已加總不相容格線的兩個平面之間插補,請考慮包含圖中所顯示指定點 P 的儲存格。 儲存格的「頂端」頂端直接來自頂端平面的方格。 底部臉部中的頂點與底部平面中的格線不相容,因此整個臉部會被視為在底部平面的格線上插入取得值的 BC。 接著,此設定會 (滿足上述) 、 (b) 和 (c) 假設,而且您可以套用插補點演算法。
此外也清楚,演算法已將插補問題的維度減少 1,因為結果是頂端格線中值的線性組合,而下層平面中的插補點則小於 1。 如果較低平面中有類似的三明治平面組態,您可以在該平面中套用程式,進一步減少維度 1。 此程式可以繼續,直到到達維度 0 為止。 這種投影和插補的串聯可以稱為「循序序列插補插補點」。
(b) 間距插補
圖 4: 間距插補
這是一個格線,會嚴格放在正象限內的立方體上。 Cube 本身有一個格線,而且每個座標平面都有不一定相容的格線。 Cube 與座標平面之間的「間距」具有「L 形」的交叉區段,而且無法符合標準技術。 不過,透過此處引進的技術,您可以輕鬆地引進涵蓋此間距的儲存格。 圖 4 描述其中一項。 座標平面上的格線支援內插補點,可為儲存格的所有底部臉部提供必要的 BC,其中一個剩餘的頂點是由 Cube 的下角提供。
實作的最終注意事項
在實際應用程式中,演算法的基本設定是從較大的資料格擷取的「單位 Cube」,而頂點上的值可能需要昂貴的計算。 另一方面,也清楚知道,內建插補點只需要在edron 頂點的值,這是單位 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。 當然,ICC 設定檔也有其他欄位。 部分資料可以衍生自 WCS 設定檔。 針對其他資料,您必須開發智慧型預設值。 著作權將指派給 Microsoft;因為它是用來建立 LUT 的 Microsoft 技術。
此設計應該適用于所有類型的裝置型號,包括外掛程式。只要外掛程式具有相關聯的基準裝置模型,就可以判斷基礎裝置類型。
建立 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 的模型作為實際裝置,您可以利用 Smart 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 的遊戲界限。
使用剛才建立的兩個 gamut 界限來初始化 GMM。 然後,使用裝置型號、GMM 和 PCS 裝置模型來建立轉換。 透過轉換執行裝置空間的取樣,以建立 AToB LUT。
圖 6: 建立 BToA LUT
圖 6 說明 BToA LUT 的建立。 這與建立 AToB LUT 幾乎完全相同,並交換來源和目的地的角色。 此外,您必須取樣完整的 PCS 遊戲,才能建立 LUT。
請注意,由於 WCS) 中的 CAM (CIECAM02 涉及此程式,因此) 媒體白色點與 PCS 白色點之間 (所強制的 PCS 白色點 (由 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。ICC 已讓這個部分模棱兩可。) 指定色階 PCS 的光線下限和最大,但色度和色調值範圍大約± 127。 此 PCS 看起來像矩形的 Prism。 如先前所述,感知 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、LED 監視器 | 顯示裝置 (「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 或在 WCS CRT 中所使用的模型稍有不同,其中遺漏「黑色更正」一詞。 具體而言,
WCS 模型:
ICC 模型:
從 WCS 模型轉換為 ICC 模型會如下所示。
定義新的曲線:
這些不是音調重現曲線,因為它們不會對應 1 到 1。 正規化將達到此目的。 ICC 模型的最終定義如下:
針對非 HDR RGB 虛擬裝置,您也會產生空間效率的顯示 ICC 設定檔。 在此情況下,您可以直接從 WCS 設定檔的主要專案取得 tristimulus 矩陣 M ICC ,而不需要上述模型轉換。 最後一個,但很重要,請注意,這個 tristimulus 矩陣必須以色度調整為 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) ) * relative lightness
例如,如果來源裝置支援減色,則個別著色器必須是「補色」, (減去 1.0) ,再使用上述公式。 因此,針對 CMY 印表機,R = 1.0 – C、G = 1.0 – M,B = 1.0 – Y。
色彩轉換所處理之每個色彩的黑色資訊會在色彩轉譯程式期間決定。 只有在指定黑色保留時,才會判斷僅限黑色的資訊。 一律會判斷目的地裝置型號是否支援黑色著色器。 黑色資訊會透過 ColorimetricToDeviceColorsWithBlack 方法傳遞至目的地裝置模型,此方法會使用產生的 LUT。
請注意,由於色彩轉換優化,上述程式只會在建立優化的轉換 LUT 期間發生,而不是在 TranslateColors 方法執行期間發生。
具有三個以上來源通道的轉換優化
優化轉換的大小取決於數個因素:來源裝置中的色板數目、每個來源色板的資料表步驟數目,以及輸出裝置中的色彩通道數目。 用來判斷轉換資料表大小的公式為:
大小 = 每個通道來源的步驟數目 \ 裝置 (\ 來源\ 裝置中的數目\ 通道\) 輸出裝置中的通道數目 x 數目
如您所見,資料表的大小會根據來源裝置中的通道數目,以指數方式成長。 許多來源裝置都支援三個色彩通道,例如紅色、綠色和藍色。 不過,如果來源裝置支援四個通道,例如 CMYK、資料表大小,以及建構資料表所需的時間會隨著步驟數目的一個因素而成長。 在以度量為基礎的 CMS 中,轉換是「即時建構」,這次可能無法接受。
若要減少建構色彩轉換資料表所需的時間,可以利用兩個事實。 首先,雖然來源裝置可能支援三個以上的色彩通道,但中繼裝置獨立色彩空間 (CIECAM02 Ja C b C ) 只有三個色彩通道。 其次,處理最耗時的部分不是裝置模型化, (從裝置色彩座標轉換成三角值) ,但遊戲對應。 使用這些事實,您可以建構初步色彩轉換表,以透過遊戲對應步驟轉換裝置獨立色彩空間中的色彩,最後透過輸出裝置色彩模型來轉換色彩。 此資料表的建構為第三個維度。 然後,我們會將來源色彩組合轉換成中繼裝置獨立空間,然後使用初步色彩轉換資料表,完成輸出裝置色彩空間的轉換,以建構維度四個最終色彩轉換資料表。 因此,您可以從查閱表格中的計算 (步驟數目減少,) 數目\ 通道 遊戲對應計算到中繼資料表 ₃ gamut 對應計算中的步驟數目。 即使您必須在 (查閱表格中執行步驟數,) 裝置模型化和三維資料表查閱 的通道計算數目 ,但這仍然比原始計算更快。
上述程式會順利運作,前提是不需要在來源裝置型號與色彩轉換的任何其他元件之間傳遞資訊。 不過,如果輸出裝置和來源裝置都支援黑色著色器,而來源黑色色彩用於判斷輸出黑色著色器,程式將無法正確傳達來源黑色資訊。 替代程式是建構初步色彩轉換表,以透過遊戲對應步驟轉換裝置獨立色彩空間中的色彩。 然後使用下列步驟來建構維度四個最終色彩轉換資料表:) 將來源色彩組合轉換成中繼裝置獨立空間,b) 在初步色彩資料表中插入,而不是套用實際的遊戲對應程式來執行遊戲對應步驟,而 c) 使用來自遊戲對應步驟和任何來源黑色通道資訊的結果值,以使用輸出裝置型號來計算輸出裝置色彩。 即使沒有黑色通道,來源和輸出裝置型號之間傳輸的資訊,也可以使用此程式;例如,如果兩個模組是使用外掛程式架構來實作,以允許模組之間的資料交換。
上述兩個程式可用來有效改善建構四維色彩轉換資料表所需的時間。
CheckGamut
ICM 會呼叫 CreateTransform 和 CreateMultiProfileTransform 接受旗標值的文字,其中一個是ENABLE_GAMUT_CHECKING。 設定此旗標時,CITE 必須以不同的方式建立轉換。 初始步驟相同:來源和目的地 CAM 必須初始化,然後必須初始化來源和目的地遊戲界限描述元。 不論指定的意圖為何,都必須使用 CheckGamut GMM。 CheckGamut GMM 應該使用來源和目的地裝置模型和遊戲界限描述元來初始化。 不過,轉換應該接著建立包含來源裝置型號、來源 CAM、任何交錯 GMM 和 CheckGamut GMM 的截斷轉換。 這可確保 CheckGamut CMM 所輸出的差異 J、delta C 和 delta h 值會成為最終產生的值。
當轉換中只有兩個裝置設定檔時,CheckGamut 的意義就會清楚。 當有兩個以上的裝置設定檔和兩個以上的 GMM 時,CheckGamut 會報告是否已透過第一個裝置型號轉換,以及最後一個 GMM 以外的所有色彩落在目的地裝置的遊戲範圍內。
相關主題