Hashimoto   Baku

Hashimoto   Baku

Color Separation (メモ)

このページは個人的なメモ書きです。何かあればご連絡ください。

https://scrapbox.io/lookdev/分版

https://kfda.be/nl/galerij/brochures/

-「墨版の生成」をオフにする by Sonoka Sagara

  • Spot color - 特色
  • Process color - colors printed by overlaying CMYK channels

Tan et al. 2018

Decomposing Images into Layers with Advanced Color Blending

Efficient palette-based decomposition and recoloring of images via RGBXY-space geometry


https://cragl.cs.gmu.edu/fastlayers/

RGBやCMYKのようなオーソドックスな色空間に限らず、2色刷り、YCbCr、特色印刷など、さまざまな「版(チャンネル)」のとり方を考えてみる。

(baku89.icon 自作エフェクト用に、色々メモりながら書いてます)

RGB -> CMYK

R=1R,G=1G,B=1B とする。
つまり、黒からのプラス分ではなく、白からのマイナス分としてRGB各チャンネルを捉える。
このとき、
K=min(R,G,B)
C=RK1K,M=GK1K,Y=BK1K
イメージ

特色印刷

CMYK以外のインクの色を重ね刷りして、カラー画像を印刷する方法を考えてみる。(実際の入稿ではあまりそういうことはしないけれど。せいぜい2色刷りか。)

要するに、線形変換。一旦RGのみについて考えてみる。
「オレンジ」「黄緑」に分版するには、あるピクセルの色を、特色それ自体のRGB値を基底とした座標系における座標値に変換すればいい。

単純なコード。

mat3 m = mat3(spotColorR, spotColorG, spotColorB);

// 特色3色に
vec3 spotColors = invert(m) * inputRGB;

// 元にもどす
vec3 rgb = m * spotColors;

しかし図を見ると分かるように、赤100%付近の色などは分版後に0...1の範囲外の値をとることがある。また、同じ色の特色を使った場合など、特色空間の基底が線形独立ではない場合も、(invert(m)が計算できない、分版が一意に出来ないため)チャンネルがNaNとなるのに注意。

ISF(Interactive Shader Format) での実装例。