🦊マスクとアルファチャンネル
🏠 | 🦊雑に学ぶComfyUI
👈️ | 🦊色調補正・エフェクト
👉️ | 🦊マスク操作
マスクとは何か?
https://gyazo.com/bd1a30f0d9562418f2fd74c7d9dd6f1e
マスクは、画像のどの部分を処理の"対象にするか / 除外するか "を指示するための画像です
白黒画像で表現されます
白 : 処理する
黒 : 処理しない
グレー : 編集度合いをグレースケールで無段階に調整できますが、処理によって扱えなかったりします
画像生成AIにおけるマスク
https://gyazo.com/3b4d37c9bb4a46d514f2fc77234718f8
画像の一部分のみAIで編集する処理、🦊inpaintingで主に使います
白い部分をAIで生成・編集し、黒い部分はなにもせず残します
🚨注意点
通常のinpaintingではグレースケール (中間値) を扱えません
読み込めはしますが、勝手に二値として扱います
🦊Differential Diffusionという技術を使えば扱えるようになります
場所によって別の強度でinpaintingできるようになる、ということですね
アルファチャンネルとは何か?
背景が透けた透過画像には、赤緑青のRGB以外に、透明度を表すアルファチャンネルというのを持っています
この値を変化 (0 ~ 255) させることで透明度を調整できます
ComfyUIでの透過画像の扱い
Stable Diffusionでは透過画像を扱えません。そのため、ComfyUIでは透過画像は"RGB画像 + マスク" という二つの情報に分離して読み込まれます
https://gyazo.com/dbe187645fd186d20f936f226a79b926
ご覧のとおりLoad ImageノードからIMAGEとMASKの二つの情報がでています
IMAGE
アルファチャンネルの情報がなくなるため透過部分は黒で埋められます
MASK
アルファチャンネルを付加する部分(透明部分)が白で表されています
一般的なペイントソフトと逆
https://gyazo.com/e3ba8dcc1452e3ed88512250b0c81d06
PhotoshopやAffinity Photoなどのペイントソフトもアルファチャンネルを白黒で表現するのですが、透明部分が黒で表現されます
この感覚に慣れている人はComfyUIのマスクを見ると混乱するかもしれませんが、別物と捉えてください
処理する部分はマスクの白い方、白い部分にアルファチャンネルが付加される、という流れを汲めば理解できます
RGBAとRGBの区別がつかない、ややこしさ
https://gyazo.com/77275fec1d0c59f32358a5ab94a5c786
処理中はともかく、透過画像として出力したいときはJoin Image With Alphaノードを使います
その名の通り、マスク部分にアルファチャンネルを付加してRGBA画像にします
ややこしいのは、RGBA画像もRGB画像も同じIMAGEとして受け渡されるので、気づかずRGBAをimgae2imageしたりするとエラーが出ます
cf. RuntimeError: Given groups=1, weight of size 64, 3, 3, 3 , expected input 1, 4, 512, 512 to have 3 channels, but got 4 channels instead#65002b92e2dacc000075b6cb
Split Image With Alphaノードを使えば再びRGBとマスクに分離できます
AIによる切り抜きをするカスタムノードなどで、出力がRGBAになっていることがちょくちょくあるので注意
(Archive)🦊マスクとアルファチャンネル