アルファチャンネル

アルファチャンネル: alpha channel)とは画像処理分野において、ラスター画像(ビットマップ画像)の各ピクセルに対し表現のデータとは別に持たせた補助データのこと。一般に画素の不透明度 (opacity) を表現する。「アルファ」はギリシャ文字αだが、計算式や各種APIでは、ラテン文字(アルファベット)のAやaが使われることも多い。

概要

コンピュータにおいて、プリンターやディスプレイなど、ほとんどの表示装置はRGB (Red, Green, Blue)、CMYK (Cyan, Magenta, Yellow, Black) など、単色(純色)の組み合わせ(加法混色または減法混色)によって色を表現する。この各単色の明るさ、あるいは濃度を調整することによって人間が知覚する多くの色を表現できる。コンピュータ内部のデータでも同様の形式がとられている。

いくつかのラスター画像データフォーマットや画像編集ソフトウェアでは、これらの表示される各単色成分の情報(カラーチャンネル)の他に、もうひとつ直接表示されない補助データを追加できる。これをアルファチャンネルと呼び、画像のマスクや複数画像の合成などに使われる。チャンネルあたりのビット数(階調数)はフォーマットにもよるが、8ビット(256階調)や16ビット(65,536階調)が使われることが多い。インデックスカラー画像の場合、カラーパレットのうち何らかの色が透過色として使われることがあるが、該当ピクセルを透過するか否かの2値情報でしかないため、ピクセルの縁にジャギー(ギザギザ)が発生しやすい。一方、8ビットや16ビットのアルファチャンネルを使えば、データ量は増えるものの、なめらかな半透明合成ができる(アンチエイリアス)。Adobe Photoshopのように、アルファチャンネルを単独のグレースケール画像として表示・編集したり、1つの画像に対して複数のアルファチャンネルを持たせたりすることができるソフトウェアもある[1]

映像編集技術におけるキー信号に相当する。

計算式

一般にアルファチャンネルの計算は Thomas Porter および Tom Duff の1984年の論文に基づく[2]

A および RGB の定義域は [0, 1] とする。A = 0 は透明で、A = 1 は不透明である。また、透明の画像は以下のように扱う。

A = 0 R G B = 0 {\displaystyle {\mathit {A}}=0\Rightarrow {\mathit {RGB}}=0}

すると、src (source) を dst (destination) へと、アルファチャンネルつきの画像を描画する計算式は以下の通り。 s r c F {\displaystyle {\mathit {src}}_{\text{F}}} d s t F {\displaystyle {\mathit {dst}}_{\text{F}}} の定義は後述。

{ o u t A = s r c A s r c F + d s t A d s t F o u t R G B = ( s r c R G B s r c A s r c F + d s t R G B d s t A d s t F ) / o u t A {\displaystyle \left\{{\begin{array}{l}{\mathit {out}}_{\mathit {A}}={\mathit {src}}_{\mathit {A}}{\mathit {src}}_{\text{F}}+{\mathit {dst}}_{\mathit {A}}{\mathit {dst}}_{\text{F}}\\{\mathit {out}}_{\mathit {RGB}}=({\mathit {src}}_{\mathit {RGB}}{\mathit {src}}_{\mathit {A}}{\mathit {src}}_{\text{F}}+{\mathit {dst}}_{\mathit {RGB}}{\mathit {dst}}_{\mathit {A}}{\mathit {dst}}_{\text{F}})/{\mathit {out}}_{\mathit {A}}\end{array}}\right.}

この際、以下のように、A を RGB にあらかじめかけておくと、

{ o u t amp = o u t R G B × o u t A s r c amp = s r c R G B × s r c A d s t amp = d s t R G B × d s t A {\displaystyle \left\{{\begin{array}{l}{\mathit {out}}_{\text{amp}}={\mathit {out}}_{\mathit {RGB}}\times {\mathit {out}}_{\mathit {A}}\\{\mathit {src}}_{\text{amp}}={\mathit {src}}_{\mathit {RGB}}\times {\mathit {src}}_{\mathit {A}}\\{\mathit {dst}}_{\text{amp}}={\mathit {dst}}_{\mathit {RGB}}\times {\mathit {dst}}_{\mathit {A}}\end{array}}\right.}

以下のように式が簡単になる。

{ o u t A = s r c A s r c F + d s t A d s t F o u t amp = s r c amp s r c F + d s t amp d s t F {\displaystyle \left\{{\begin{array}{l}{\mathit {out}}_{\mathit {A}}={\mathit {src}}_{\mathit {A}}{\mathit {src}}_{\text{F}}+{\mathit {dst}}_{\mathit {A}}{\mathit {dst}}_{\text{F}}\\{\mathit {out}}_{\text{amp}}={\mathit {src}}_{\text{amp}}{\mathit {src}}_{\text{F}}+{\mathit {dst}}_{\text{amp}}{\mathit {dst}}_{\text{F}}\end{array}}\right.}

積和算だけで計算できるようになるので、この乗算済みアルファ (premultiplied alpha) 形式で扱うと高速に処理できる[3]。例えばMicrosoft WindowsGDIによるアルファブレンドでは、乗算済みアルファを想定した計算式が使われている[4]。欠点は、各色を8ビットで保持した場合、Aが1より小さいとRGBの正確な値を保持できないことにある。

そして、 s r c F {\displaystyle {\mathit {src}}_{\text{F}}} d s t F {\displaystyle {\mathit {dst}}_{\text{F}}} の定義は以下の通り。SRC over DST のように表記し、演算子は非可換であり交換法則は成立しない。

演算 s r c F {\displaystyle {\mathit {src}}_{\text{F}}} d s t F {\displaystyle {\mathit {dst}}_{\text{F}}}
clear 0 0
source 1 0
destination 0 1
over 1 1 s r c A {\displaystyle 1-{\mathit {src}}_{\mathit {A}}}
in d s t A {\displaystyle {\mathit {dst}}_{\mathit {A}}} 0
out 1 d s t A {\displaystyle 1-{\mathit {dst}}_{\mathit {A}}} 0
atop d s t A {\displaystyle {\mathit {dst}}_{\mathit {A}}} 1 s r c A {\displaystyle 1-{\mathit {src}}_{\mathit {A}}}
xor 1 d s t A {\displaystyle 1-{\mathit {dst}}_{\mathit {A}}} 1 s r c A {\displaystyle 1-{\mathit {src}}_{\mathit {A}}}
plus 1 1

計算結果で ARGB が 1 を超えた場合は、1 とする。

論文では、特に有用なのは、over, in, out, plus としている。また、over を特にアルファブレンディングと呼ぶ。over は乗算合成、plus は加算合成[5]と呼ばれることもある。Windows GDIのブレンディングでは over 演算のみがサポートされている。OpenGLおよびDirect3Dではブレンディングの演算を選択することができるが、 o u t A {\displaystyle {\mathit {out}}_{\mathit {A}}} による除算は行なわれず、簡略化された計算式が使われる[6][7][8]

d s t A = 0 {\displaystyle {\mathit {dst}}_{\mathit {A}}=0} の透明な画像に、over, out, xor, plus, source で描画すると、src の内容がそのままコピーされる。

参照

  1. ^ Photoshop チャンネルの基本
  2. ^ Compositing Digital Images - Thomas Porter and Tom Duff - Computer Graphics Project Lucasfilm Ltd.
  3. ^ CPUおよびGPUは加算および積算が得意(高速)で、さらに積和演算に関しては専用命令を持っていることもあるが、除算は苦手(低速)である。
  4. ^ BLENDFUNCTION (wingdi.h) - Win32 apps | Microsoft Docs
  5. ^ ただし、一般的な画像編集ソフトウェアでは、色のブレンド時に色を加算を行うものを加算合成 add としており、plus はブレンド済みの色を合成する演算であるため、意味が異なる。
  6. ^ glBlendFunc - OpenGL 4 Reference Pages
  7. ^ D3DBLEND enumeration (D3D9Types.h) - Win32 apps | Microsoft Docs
  8. ^ D3DTEXTUREOP enumeration (D3D9Types.h) - Win32 apps | Microsoft Docs

関連項目