見出し画像

半透明やグローが綺麗に抜ける。AI画像の透過PNGを作るアプローチ

割引あり

AI生成画像をレイヤー素材として使いたいのに、

半透明やグロー(発光)がうまく抜けない——

そんな悩みを抱えたことはありませんか?


AI背景削除で半透明を自然に残したまま抽出するのは、今でもかなり難しいようです。
既存のAI背景除去ツールをひと通り試しましたが、満足できるものは殆ど見つかりませんでした。

抜けない例

「AaronAlpha」はこんな人に向いています

  • AI生成画像をレイヤー素材として使いたい

  • 半透明やグローを含むアイコン・演出素材を綺麗に抜きたい

  • 背景削除でフチや透明感が壊れて困っている

  • 画像をサーバーに送りたくない(プライバシーが気になる)

逆に、向いていないケース
人物写真や一般的な物体を普通に切り抜きたいだけなら、通常の背景削除ツールの方がお手軽です。

実際に抜いた例はこちらからもご確認いただけます。


PhotoshopやDaVinci ResolveのFusion機能を駆使して抜くことは可能ですが、結構知識と手間がかかります。私も以前はDaVinci Resolveを使って抜いていました。

Fusionで抜いてた頃

それが面倒になって作ったのがこのツールです。

AaronAlpha

「透過PNG」ナニソレ? 美味しいの?? って方にはハテナな超ニッチなツールですが、同じニーズを持つあなたにはきっと刺さるはずです。
是非試してみてください。

インストール不要、ブラウザ(ローカル)で完結。画像がサーバーに送信されることもありません。

画面サイズやUIの都合上、動作環境はPCのみです。
タブレットやスマホは対象外です。

同じ画像の黒背景と白背景の2枚の画像を入力として透過pngを捻出します。

黒背景と白背景の2枚を入力として抜く

基本的な使い方はツール内にも「使い方」ボタンを配置してあります。
うんちくはいらないよーって方は「編集後記」までスキップして下さい。

この手のツールは、理屈がわかると失敗しにくくなるので、軽くでも仕組みを知っておくと使いこなしやすいです。
お時間のある方はぜひお付き合い下さい。


なぜ生成AIは透過PNGを出力できないのか

生成AIは「色(RGB)」で世界を見ています。ノイズから色を復元するように学習されているため、「透明度(Alpha)」という概念が含まれていません。

試しに「背景を削除して透過PNGにして」と頼むと、市松模様(チェッカーボード)の背景を描いた画像を出力してくれます。編集ツールで開いてみると、透過ではなく、市松模様が描かれた1枚絵というオチでした。

1枚絵(透過していない)

要するに、生成AIは、
「透明そのもの」を出力しているのではなく、「透明に見える絵」を描いているのです。

ここで大事なのは

「透明な見た目」

「透明情報を持っていること」

は別だという点です。


透明という色は存在しない

そもそもデジタル画像に「透明色」は存在しません。
色がないところも、その先には何か物(色)がないと画像が成立しません。
あの市松模様は、それを目に見える形で示すための苦肉の策なのです。
「ここは透明ですよ」とユーザーに伝えるための表示上の工夫なんです。

「RGBA」とアルファチャンネルの正体

JPGにはRGBしかありませんが、PNGにはRGBに加えて A(Alpha) が存在します。これが透明度を表すアルファチャンネルで、
0(透明)〜255(不透明) の値を持ちます。

アルファ表示

視覚化すると黒(透明)〜白(不透明) に対応します。


画像1枚では透明と不透明の判断が数学的に不可能

例えば黒背景に暗い赤があったとしましょう。
この暗い赤が半透明で背景が透けている暗い赤なのか、
不透明の暗い赤の物体なのか数学的に判断することは不可能なのです。
ここが背景除去の本質的な難しさです。

同じ暗い赤でも…

プリマルチプライドの罠

更にニッチな話が続きます。
透過画像を作ったとき、フチが黒くくすんだり緑のフリンジが出て悩んだことはありませんか?

アルファ画像にはざっくり2つの考え方があります。
ストレートアルファ
プリマルチプライド

ストレートアルファは、色と透明度(アルファ)を別々に持つ考え方です。
一方、プリマルチプライドとは、既に色がアルファで乗算された状態です。
AI生成画像は、後者のプリマルチプライドの状態です。

ストレートアルファとプリマルチプライド

単純に背景除去で切り取ると、背景色を巻き込んだままになるため、くすみが生じることがあります。AaronAlphaはこのプリマルチプライドをストレートアルファに変換しているため、くすみが出ません。


なぜ黒背景と白背景なのか

アルファで透明度が表されているのであれば、黒背景白背景の差分を取ることで、差が大きければ透明度が高い、差が小さければ透明度が低いって判断できるんじゃね? って発想からAaronAlphaは作られています。

アルファの濃度差に応じた透明度

これはディファレンスマットと呼ばれていて、VFXなどで従来からある手法です。

AI生成は背景を黒や白にすることができますよね。
この2つの画像で透明部分を特定すれば綺麗に半透明が抜けるわけです。


ここで問題が発生します。


nanobananaなどで黒/白背景を捻出した際、背景色の影響を受けることで、

  • ソリッド(不透明)の色味も若干変わってしまう

  • 大きさや位置がズレる

  • パーツが変わる

  • 歪む

などの現象が起きることがあります。
こればかりはガチャの要素が大きいのですが、
「背景を白単色(#ffffff)にして。位置や大きさは動かさず忠実に再現して」
さらに「xxの部分は半透明」「xxにはグロー効果が掛かっている」
などと、半透明に関する補足すると精度が上がったりします。

ツール側で自動位置補正機能は実装していますが、パーツが変わっていたり歪んでいると正常な出力ができません。
元画像は必要に応じて何度か生成してみてください。
※このツール自体に入力画像を生成する機能はありません。


3つのモード

AaronAlphaは3つのモードに分かれています。初めての方はまず基本モードだけ試すのがオススメです。

  •  基本モード   - 黒/白背景画像からベースの透過PNGを生成

  •  ゴミ取りモード - 背景色ノイズを除去

  •  ソリッドモード - ソリッド部分を完全不透明に仕上げる

基本モード

黒背景と白背景の画像をドラッグ&ドロップして、出力ボタンを押すだけ。これが一番シンプルな使い方です。

基本モード

「使い方」ボタンを押すとヘルプが表示されます。
マウスオーバーでそれぞれのボタンの説明も表示されるので、使い方はすぐに分かると思います。

サンプルとして、いくつか黒/白背景画像もダウンロードできますので、まずはそれで試してみて下さい。

ここでまた問題が発生します。

AI生成画像はノイズを元に構成しているので、純粋な黒(#000000)ではなくノイズを含んでいます。
パット見わかりにくいのですが、あとで合成する際ノイズが目立ったりすることがあります。
気になる場合は、次のゴミ取りモードを試してみましょう。


ゴミ取りモード

ここではアルファチャンネルを白で視覚化します。
背景を黒にしておくとわかりやすいでしょう。(黒前提で解説します)
黒(透明) ----- 白(不透明)
ブチブチと白い点が沢山確認出来ると思います。これがノイズです。

2値表示

2値表示:少しでも不透明要素があるドッドを白で視覚化します。

アルファ表示:白の濃度が透明具合を現しています。

アルファ表示

「ノイズ閾値」スライダーを動かすと黒に近い部分から完全な黒に追い込みます。
スライダーはマウスホイールで操作できます。
これによりノイズ部分を消すことができますが、同様に透明度の高い部分から削られていくことになります。

プレビューボタン背景設定などを変更して、お好み具合までノイズを追い込んで下さい。
比較ボタンを押すことで元画像との比較ができます。

投縄ツールで直接マスキングすることもできます。
操作方法は以下の通り

  • 左ドラッグ:アルファを削る(マスキング)

  • 右ドラッグ:元に戻す

  • Altキー+クリック:多角形で囲む

  • Zキー(押している間):比較スライダーon中も投げ縄機能を強制的にonにします

  • Ctrl+Z:Undo

ざっくりと矩形で「除外範囲設定」をすることもできます。
一般的にガベージマットと呼ばれているものです。
画像の端っこはノイズが溜まりやすいです。
任意の矩形をD&Dして下さい。赤い部分は全て透明扱いになります。

ガベージマット

位置調整
黒画像に対して白画像の位置を手動で調整します。
自動補正でも位置がズレている場合は歪んでいる可能性があります。
特に、ソリッド部分に暗部が多い場合はズレのサインです。
その場合は位置調整を試すか、生成をやり直してください。

ソリッド焼付
後述します。

これである程度ノイズを除去したら、基本モードに戻って出力ボタンを押して下さい。
ゴミ取りが適用された透過pngが出力されます。

このモードで出力すると、視覚化された2値情報アルファ情報が出力されます。
自作のソリッドマット作成や、編集時のノイズ取りなどにご活用下さい。


半透明が主体の画像はここまでで十分だと思います。


そもそもソリッドが主体の画像は通常のAI背景除去の方がお手軽ですので、そちらをご利用下さい。

ソリッドと半透明やグローが混在している場合や、ソリッド部分を完全な不透明に追い込みたいという方は、次のソリッドモードをお試し下さい。


ソリッドモード

ゴミ取りモードと逆の操作です。白(不透明)に近いけど半透明要素が残っている部分を完全な白に追い込みます。

前述の通り、背景色の影響でソリッドの色味が若干異なっていたりします。その差が若干の半透明を生むのです。
気にならないレベルであればそのままで構いません。
完全不透明に追い込めば、黒背景のソリッドを完全再現できます。
もうこの辺はこだわりの領域ですね。

「不透明度閾値」を徐々に下げてみて下さい。
が増えていくと思います。この青が完全不透明に追いやる部分です。
この閾値を下げすぎると、本来半透明を保ちたい部分まで不透明化するので、やりすぎは禁物です。

ソリッド画面

ある程度ソリッド部分が青で埋まったら、充填ボタンを押して下さい。
に変わり、ある程度隙間を充填してくれます。

Undo(やりなおし)できるので、何度か試しながら追い込むのがおすすめです。
ゴミ取りモードと同様に投縄で埋めたり戻したりすることができます。

見るポイント

  • ロゴやアイコンのソリッドがちゃんと不透明になっているか

  • 半透明や発光の柔らかさを潰していないか

  • 明るい背景に置いたときに輪郭が不自然になっていないか

可視化ボタンは完全な白の部分を緑で可視化します。
それ以外の白の部分は白の濃度に応じた透明度です。

あとはプレビュー背景設定比較スライダーを駆使して納得いくまで不透明部分を追い込んで下さい。

オススメは
プレビューをonにして
背景を明るい色に変更
比較をonにして
拡大しながら元画像と比較
してみて下さい。

オススメ設定

投縄はスライダーとマウス操作が被ってしまうので、操作が抑制されていますが、[Z]キーを押しているときだけ解除されます。

出力ボタンを押せば、ソリッドが適用された透過pngが出力されます。

ソリッド焼付ボタン
ゴミ取りモードにある焼付ボタンは、このソリッドモードで白に追い込んだ部分をゴミ取りモードのアルファに焼き込む機能です。
通常は使う必要ないです。ゴミ取りモードとソリッドモードを行き来して追い込みたい場合にご利用下さい。

探索距離
ここも基本的に弄る必要ないです。
ソリッドが隣接していたり、穴が空いている(ドーナツ)様なソリッドの場合、どこまで埋めるかの閾値です。
この値を上げすぎると、隣接したソリッドや残したい穴が塞がってしまうことがあるので注意が必要です。


編集後記

個人的にはソリッドを埋めるロジックにはまだ改善の余地があると感じています。RMBG-1やSAMなどのセマンティクスセグメンテーションも試しましたが、縮小して戻す過程でアンチエイリアスがぼけたり、半透明を認識できなかったりで、うまく活用できませんでした。私の場合、アイコンなど創造物が主体なので相性が悪かったのかもしれません。

私はローカル環境を使わないのでSD系は知らないのですが、LayerDiffusionは既存画像からも抜けるのかな? bananaも次のバージョンは透過対応するのかもね。Leonardo.aiも試してないなぁ

これだったら上手くいくよ~とか、半透明も上手く抜けるよーってなツールをご存知の方是非教えてください。

半透明抜きで私が探した中ではClipdrop by jasperが優秀でした。

このツールはAntigravityを使って制作しました。ほとんどコードを書かずにここまで形にできるのは、本当にすごい時代だなと思います。

使ってみた感想や、うまくいった・いかなかったケースをぜひコメントで教えてもらえると嬉しいです。

もし今回の記事が参考になった方は、「フォロー」「いいね」等していただけると励みになります。

拡散していただくことで無料で読める機能があるらしいので使ってみます。
この先にはツールのURLしか載っていません。
拡散のご協力をしていただけると嬉しいです。

ここから先は

22字

この記事が気に入ったらチップで応援してみませんか?