出典: フリー百科事典『ウィキペディア(Wikipedia)』
αチャンネル (アルファチャンネル、英 : alpha channel )とは画像処理分野において、各ピクセル に対し色 表現のデータとは別にもたせた補助データのこと。一般に画素の不透明度 (opacity ) を表現する。
コンピュータにおいて、プリンター やディスプレイ など、ほとんどの表示装置はRGB (Red, Green, Blue)、CMYK (Cyan, Magenta, Yellow, Black) など、単色(純色)の組合せによって色を表現する。この各単色の明るさ、あるいは濃度を調整することによって人間が知覚する多くの色を表現できる。コンピュータ内部のデータでも同様の型式がとられている。
いくつかの画像データフォーマットや画像編集ソフトウェアでは、これらの表示される単色(カラーチャンネル)の他に、もうひとつ直接表示されない色のデータを追加できる。これをアルファチャンネルと呼び、画像のマスク 、複数画像の合成などに使われる。
映像編集 技術におけるキー信号 に相当する。
計算式 [ 編集 ]
一般にアルファチャンネルの計算は Thomas Porter および Tom Duff の1984年 の論文に基づく[1] 。
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) 形式で扱うと高速に処理できる[2] 。例えばMicrosoft Windows のGDI によるアルファブレンド では、乗算済みアルファを想定した計算式が使われている[3] 。欠点は、各色を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 は加算合成[4] と呼ばれることもある。Windows GDIのブレンディングでは over 演算のみがサポートされている。OpenGL およびDirect3D ではブレンディングの演算を選択することができるが、
o
u
t
A
{\displaystyle {\mathit {out}}_{\mathit {A}}}
による除算は行なわれず、簡略化された計算式が使われる[5] [6] [7] 。
d
s
t
A
=
0
{\displaystyle {\mathit {dst}}_{\mathit {A}}=0}
の透明な画像に、over, out, xor, plus, source で描画すると、src の内容がそのままコピーされる。
^ Compositing Digital Images - Thomas Porter and Tom Duff - Computer Graphics Project Lucasfilm Ltd.
^ CPU およびGPU は加算および積算が得意(高速)で、さらに積和演算に関しては専用命令を持っていることもあるが、除算は苦手(低速)である。
^ BLENDFUNCTION (wingdi.h) - Win32 apps | Microsoft Docs
^ ただし、一般的な画像編集ソフトウェアでは、色のブレンド時に色を加算を行うものを加算合成 add としており、plus はブレンド済みの色を合成する演算であるため、意味が異なる。
^ glBlendFunc - OpenGL 4 Reference Pages
^ D3DBLEND enumeration (D3D9Types.h) - Win32 apps | Microsoft Docs
^ D3DTEXTUREOP enumeration (D3D9Types.h) - Win32 apps | Microsoft Docs
関連項目 [ 編集 ]