アルファチャンネルのソースを表示
←
アルファチャンネル
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
'''アルファチャンネル'''({{lang-en-short|alpha channel}})とは画像処理分野において、ラスター画像([[ビットマップ画像]])の各[[ピクセル]]に対し[[色]]表現のデータとは別に持たせた補助データのこと。一般に画素の不透明度 ({{en|opacity}}) を表現する。「アルファ」は[[ギリシア文字|ギリシャ文字]]の{{lang|el|[[α]]}}だが、計算式や各種[[Application Programming Interface|API]]では、[[ラテン文字]](アルファベット)の[[A]]やaが使われることも多い。 == 概要 == コンピュータにおいて、[[プリンター]]や[[ディスプレイ (コンピュータ)|ディスプレイ]]など、ほとんどの表示装置は[[RGB]] (Red, Green, Blue)、[[CMYK]] (Cyan, Magenta, Yellow, Black) など、単色(純色)の組み合わせ([[加法混色]]または[[減法混色]])によって色を表現する。この各単色の明るさ、あるいは濃度を調整することによって人間が知覚する多くの色を表現できる。コンピュータ内部のデータでも同様の形式がとられている。 いくつかのラスター画像データフォーマットや画像編集ソフトウェアでは、これらの表示される各単色成分の情報(カラーチャンネル)の他に、もうひとつ直接表示されない補助データを追加できる。これをアルファチャンネルと呼び、画像の[[マスク (情報工学)|マスク]]や複数画像の合成などに使われる。チャンネルあたりのビット数(階調数)はフォーマットにもよるが、8ビット(256階調)や16ビット(65,536階調)が使われることが多い。[[インデックスカラー]]画像の場合、カラーパレットのうち何らかの色が透過色として使われることがあるが、該当ピクセルを透過するか否かの2値情報でしかないため、ピクセルの縁にジャギー(ギザギザ)が発生しやすい。一方、8ビットや16ビットのアルファチャンネルを使えば、データ量は増えるものの、なめらかな半透明合成ができる([[アンチエイリアス]])。[[Adobe Photoshop]]のように、アルファチャンネルを単独の[[グレースケール]]画像として表示・編集したり、1つの画像に対して複数のアルファチャンネルを持たせたりすることができるソフトウェアもある<ref>[https://helpx.adobe.com/jp/photoshop/using/channel-basics.html Photoshop チャンネルの基本]</ref>。 [[映像編集]]技術における[[クロマキー|キー信号]]に相当する。 == 計算式 == [[Image:Alpha compositing.svg|center]] 一般にアルファチャンネルの計算は Thomas Porter および Tom Duff の[[1984年]]の論文に基づく<ref>[http://keithp.com/~keithp/porterduff/p253-porter.pdf Compositing Digital Images - Thomas Porter and Tom Duff - Computer Graphics Project Lucasfilm Ltd.]</ref>。 A および RGB の定義域は [0, 1] とする。A = 0 は透明で、A = 1 は不透明である。また、透明の画像は以下のように扱う。 :<math>\mathit{A}=0 \Rightarrow \mathit{RGB}=0</math> すると、src (source) を dst (destination) へと、アルファチャンネルつきの画像を描画する計算式は以下の通り。<math>\mathit{src}_\text{F}</math> や <math>\mathit{dst}_\text{F}</math> の定義は後述。 <!-- 変数名は1文字でも複数文字でもイタリック体。添え字はローマン体。A, RGB は x, y, z, w などの成分相当なので添え字もイタリック体。 --> :<math> \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. </math> この際、以下のように、A を RGB にあらかじめかけておくと、 <!-- amp は何の略? --> :<math> \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. </math> 以下のように式が簡単になる。 :<math> \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. </math> [[積和演算|積和算]]だけで計算できるようになるので、この乗算済みアルファ (premultiplied alpha) 形式で扱うと高速に処理できる<ref>[[CPU]]および[[Graphics Processing Unit|GPU]]は加算および積算が得意(高速)で、さらに積和演算に関しては専用命令を持っていることもあるが、除算は苦手(低速)である。</ref>。例えば[[Microsoft Windows]]の[[Graphics Device Interface|GDI]]による[[アルファブレンド]]では、乗算済みアルファを想定した計算式が使われている<ref>[https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-blendfunction BLENDFUNCTION (wingdi.h) - Win32 apps | Microsoft Docs]</ref>。欠点は、各色を8ビットで保持した場合、Aが1より小さいとRGBの正確な値を保持できないことにある。 そして、<math>\mathit{src}_\text{F}</math> や <math>\mathit{dst}_\text{F}</math> の定義は以下の通り。SRC over DST のように表記し、演算子は非[[可換]]であり交換法則は成立しない。 {| class="wikitable" |+ ! 演算 !! <math>\mathit{src}_\text{F}</math> !! <math>\mathit{dst}_\text{F}</math> |- ! clear | 0 | 0 |- ! source | 1 | 0 |- ! destination | 0 | 1 |- ! over | 1 | <math>1 - \mathit{src}_\mathit{A}</math> |- ! in | <math>\mathit{dst}_\mathit{A}</math> | 0 |- ! out | <math>1 - \mathit{dst}_\mathit{A}</math> | 0 |- ! atop | <math>\mathit{dst}_\mathit{A}</math> | <math>1 - \mathit{src}_\mathit{A}</math> |- ! xor | <math>1 - \mathit{dst}_\mathit{A}</math> | <math>1 - \mathit{src}_\mathit{A}</math> |- ! plus | 1 | 1 |} 計算結果で ARGB が 1 を超えた場合は、1 とする。 論文では、特に有用なのは、over, in, out, plus としている。また、over を特に[[アルファブレンディング]]と呼ぶ。over は乗算合成、plus は加算合成<ref>ただし、一般的な画像編集ソフトウェアでは、色のブレンド時に色を加算を行うものを加算合成 add としており、plus はブレンド済みの色を合成する演算であるため、意味が異なる。</ref>と呼ばれることもある。Windows GDIのブレンディングでは over 演算のみがサポートされている。[[OpenGL]]および[[Direct3D]]ではブレンディングの演算を選択することができるが、<math>\mathit{out}_\mathit{A}</math>による除算は行なわれず、簡略化された計算式が使われる<ref>[https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBlendFunc.xhtml glBlendFunc - OpenGL 4 Reference Pages]</ref><ref>[https://learn.microsoft.com/en-us/windows/win32/direct3d9/d3dblend D3DBLEND enumeration (D3D9Types.h) - Win32 apps | Microsoft Docs]</ref><ref>[https://learn.microsoft.com/en-us/windows/win32/direct3d9/d3dtextureop D3DTEXTUREOP enumeration (D3D9Types.h) - Win32 apps | Microsoft Docs]</ref>。<!-- OpenGL/Direct3Dなどのブレンディング計算式は、Photoshopなどの計算式とは異なる。また、補間アルファ式/乗算済みアルファ式を使うか、また整数バッファ/浮動小数バッファを使うかはアプリケーション次第。 --> <!-- 以前の版では「一般にグラフィックライブラリが無指定で描画する際は、over が使われ、……」とあったが、少なくともDirect3D 9ではそうなってはいない。 https://msdn.microsoft.com/en-us/library/windows/desktop/bb172599.aspx https://msdn.microsoft.com/en-us/library/windows/desktop/bb172617.aspx https://msdn.microsoft.com/ja-jp/library/bb172599.aspx https://msdn.microsoft.com/ja-jp/library/bb172617.aspx Direct3D 11でも同様。 https://msdn.microsoft.com/en-us/library/windows/desktop/ff476087.aspx https://msdn.microsoft.com/ja-jp/library/ee416043.aspx OpenGLでも同様。 https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBlendFunc.xhtml --> <math>\mathit{dst}_\mathit{A} = 0</math> の透明な画像に、over, out, xor, plus, source で描画すると、src の内容がそのままコピーされる。 == 参照 == <references /> == 関連項目 == * [[コンピュータグラフィックス]] * [[アルファブレンド]] {{DEFAULTSORT:あるふあちやんねる}} [[Category:コンピュータグラフィックス・アルゴリズム]]
このページで使用されているテンプレート:
テンプレート:En
(
ソースを閲覧
)
テンプレート:Lang
(
ソースを閲覧
)
テンプレート:Lang-en-short
(
ソースを閲覧
)
アルファチャンネル
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報