見出し画像

ComfyUIを利用した背景差し替え

目的

 既存の画像から人物だけ切り出し、任意の背景にさしかえる。

本文の前提

  • ComfyUIがある程度使えること → 基本的な使い方を覚えてくること

  • ComfyUI Mangerがインストールされていること → カスタムノードの管理に必要 参照

  • 以下のカスタムノードをインストールすること

    • ComfyUI's ControlNet Auxiliary Preprocessors(ここではdepth zoeを使う)

    • ComfyUI WD 1.4 Tagger(デフォルトのモデルは自動で落としてくれる)

    • ComfyUI-Advanced-ControlNet(ここではdepthを使う)

    • segment anything (これが一番のキモ) (参考:https://note.com/yas_bizdev/n/n5244aebd98e3

  • 上記カスタムノードで必要なモデルをダウンロードしておくこと(カスタムノードによっては自動ダウンロードするものもある)

  • SDXLのモデルを複数用意すること。このロジックはpony系は背景生成が弱く人物が追加されてしまうため、オリジナルsdxlなど、背景のみが作成しやすいモデルを使うことが前提になる。

注意事項

 本稿は元画像が作成された状態から始める(自作画像でも写真でも良い)――txt2imgからチェインしたら何故かコケたので

基本的な考え方

  1. 人物を切り出す → segment anythingを使う

  2. 切り出した画像からマスクを作成する

  3. 背景の元からControleNet用のベースを作成し、2. で作成したマスクを適用することで人物を加味した背景を作成する

  4. 1.で切り出した人物画像と3.で作成した背景画像を合成する

  5. 人物と背景の境にジャギーがのるため、i2iを弱くかけてなじませる

Segment Anything

 Segment Anythingは、メタの画像セグメンテーションAIである。実際になにをするかと言うと指定したオブジェクトの切り出しになる。

 Segment Anythingにhuman(もしくはperson)と入力すると人物だけが切り出される。つまりSegment Anythingを使うと人物が簡単に切り出せる。人物以外の小物を追加したい場合は、その小物の名前を追加する。慣れてしまえば割と簡単。

画像
元画像
画像
切り出した画像

基本フロー

画像
基本フロー

 同時にマスクを生成する。この段階では、そのままのものと反転したものの両方を用意しておくとあとで使いやすい。うまく切り出せない場合は、threasholdを調整すること (一般的には0.2-0.4が推奨されている)

画像
マスク2種類

 人物ではなく他のものを切り出してみたいと思う。試しに花瓶と花を指定する。

画像
vase(花瓶)とflower(花)を切り出す


画像
花瓶と花が切り出される

 ――と言う感じにSegment Anythingを使うと簡単に画像の切り出しが出来る。

 次に背景との合成を行うが別の画像を使う(謎のこだわり)

画像
合成に使うイラスト

背景の作成

画像
パンテオンを背景にしてみる(撮影:筆者)

 promptに人物が入らない様にする必要があるため、pony系やanimeginなどのモデルはむしろ向いていない。sdxlの方が向いているかも。ここではControl Netを使用している。画像のwidthとheightは、元画像から抽出したものを作成しLatentを作成している(見切れた)

 maskに、先程切り出したmaskを反転して入力しているがこれに意味があるのか忘れた。

画像の合成

 作成した背景と切り出した人物を合成する。ここで使うのがLatentCompositeMaskedと言うノードになる。このノードは2つのLatentを合成するときに使う。distinationに背景、sourceに人物を入力し、maskに反転マスクを適用すると背景の上に人物が適用される。

画像
背景と人物の合成

クリーンナップ

 しかしこの画像は切り出しのゴミや境目の部分にジャギーが載っている。

画像
境目にゴミが載っている

 そこでかるくimg2imgをかける事でクリーンナップを行う(強すぎると絵が変わってしまう)

画像
クリーンナップ・プロセス

 ここでは人物のpromptをWD14 Taggerで抽出し、背景プロンプトと合成したpromptをサンプラーに渡している。人物自体が変わってしまうためstrengthは余り強くない方が良い。この部分、境界部分だけに適用できると楽なのだが切り出しが面倒なので適当に誤魔化している。

画像
差し替え前→差し替え後
表情が若干変わる……

 元画像のスカートが一部欠けているので先に修正した方が良かったな。

画像
最初の絵でもやってみた

おまけ

 マスクのサイズを調整するにはimage→postpprocessingの下にあるImageMorphologyノードを利用する。mask→ mask2image → ImageMorphology → image2mask → maskで行ける。このフィルターが何やっているかと言うかと言うと下の通り。


いいなと思ったら応援しよう!

この記事が参加している募集

コメント

ログイン または 会員登録 するとコメントできます。
あなたも書ける! 会員登録はこちら
ComfyUIを利用した背景差し替え|みし
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1