アルファチャンネル (英 : 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 Windows のGDI によるアルファブレンド では、乗算済みアルファを想定した計算式が使われている[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 のように表記し、演算子は非可換 であり交換法則は成立しない。
計算結果で 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 の内容がそのままコピーされる。
CPU およびGPU は加算および積算が得意(高速)で、さらに積和演算に関しては専用命令を持っていることもあるが、除算は苦手(低速)である。ただし、一般的な画像編集ソフトウェアでは、色のブレンド時に色を加算を行うものを加算合成 add としており、plus はブレンド済みの色を合成する演算であるため、意味が異なる。