2つの画像を結合して1つの画像を生成する - Stable Diffusion

Stable Diffusionで2つの画像を結合して一つの画像を生成する方法の一つを紹介します。

概要

Stable Diffusionで生成する画像の構成によっては、別々に生成した画像を結合して一つのイメージにしたほうが良い場合があります。 画像編集ソフトで結合する方法もありますが、重なりなどがある場合はStable Diffusion上で結合した画像を生成したほうが良い場合もあります。 この記事では、2つの画像を結合して、1つの画像として生成する手順を紹介します。
補足
画像を結合する方法は今回紹介する方法以外にも複数の方法があります。

やりたいこと

今回、P(プロデューサー)から指定された構図です。2人のキャラクターが背中合わせになっており、 左側が黒髪で黒ドレス、右側が白髪で白ドレスを着ている構図です。さらに、手をつないでいる指定も入っています。
今回は手をつなぐ部分は後追いで対応するとして、2人のキャラクターが背中合わせに立っている部分までを作成します。
方針は黒ドレスのキャラクターと、白ドレスのキャラクターを作成して、2つの画像を結合する方法を試してみます。


手をつなぐ方法
手をつなぐ方法はRegional Prompterを利用して実現できます。 詳細はこちらの記事を参照してください。

黒ドレスキャラの作成

黒ドレスのキャラクターを作成します。以下のプロンプトで生成します。
Prompt & Settings
Prompt: 1 girl, profile, black hair, black beauful lace dress, upper knee, standing, white background,
Negative prompt: worst quality, low quality,
Width:768, Height:1368
下図の画像が生成されます。

白ドレスキャラの作成

黒ドレスのキャラクターを作成します。以下のプロンプトで生成します。
Prompt & Settings
Prompt: 1 girl, profile, white hair, white beauful lace dress, upper knee, standing, white background,
Negative prompt: worst quality, low quality,
Width:768, Height:1368
下図の画像が生成されます。

キャラの選定

生成された画像から選定します。今回は下図の画像を選択しました。
レースの描画が細かく透け感も表現されています。手で描くのはかなり大変そうです。


画像編集ソフトで大きさを合わせて重ねます。重ねた画像をファイルとして書き出します。
このまま完成にしてもよさそうですが、2つの画像の背景色が微妙に違うことや重なった部分をさらにうまく処理できることを期待して、 再度Stable Diffusionで結合した画像を生成させたいです。うまくすれば手をつないでくれるかもしれない期待もあります。

Stable Diffusionの設定と画像生成

Stable Diffusionを起動し、画像編集ソフトで重ねた画像をControlNetの入力画像に指定します。
一つ目はControlNet Lineartを指定します。プリプロセッサは"lineart_realistic" モデルは "bdsqlsz_controllllite_xl_lineart_anime"を利用します。
Control Weightを0.8に下げています。


2つ目は、IP-Adapter Plusを利用します。プリプロセッサは"ip-adapter_clip_sdxl_plu_vith" モデルは "ip-adapter-plus_sdxl_vit-h"を利用します。 IP-Adapterの導入についてはこちらの記事を参照して下さい。


さらに、Regional Prompterを設定して、左右のキャラクターにプロンプトを適用します。
[Active]のチェックボックスにチェックをつけます。[Use base prompt]のチェックボックスにチェックをつけます。 分割モードは[Matrix]に設定し、[Columns]を選択します。[Divide Ratio]は"1,1"とし、画面の左右で分割します。


プロンプトを設定します。以下のプロンプトとします。BREAK部分はRegional Prompterのプロンプトです。 詳しくはこちらの記事を参照してください。
Prompt & Settings
Prompt:
2 girl, back to back, (hold hands:1.2), profile, white background BREAK
(beautiful lace black dress:1.2), black hair, white background BREAK
(beautiful lace white dress:1.2), white hair, white background BREAK

Negative prompt: worst quality, low quality,
Width:1149, Height:1500



画像を生成します。下図の画像が生成されました。
黒いほうのドレスに白いレースが描画されています。 また、Pから一言「しろちゃんが手前にいたほうが良いね」との指摘がありました。


画像編集アプリで、重ねる画像の位置関係を変更します。


変更した画像を、ControlNetの入力に設定します。


画像生成を試しながらプロンプトを調整します。以下のプロンプトの変更しました。
Prompt & Settings
Prompt:
2 girl, back to back, (hold hands:1.2), profile, white background BREAK
(dark black dress with beautiful black lace :1.2), black hair, white background BREAK
(white dress with beautiful lace:1.2), white hair, white background BREAK

Negative prompt: worst quality, low quality,
Width:1149, Height:1500



以下の画像が生成されました。


こちらを選択しました。


選択した画像をさらにTiled Diffusion + Regional Promptで2倍にアップスケールしたいのですが、 VRAMが30GB以上のGPUが必要とのことで、いったんここまでとします。

また、以下の課題があります。
  • 足先の位置がやや不自然
  • 足先の位置を同一線上に合わせたい
  • レースのクオリティが個別生成画像より劣る
  • 手をつなぐ方法は別途検討

参考: DALL-E3 の結果

DALL-E3での生成結果です。良い感じで出力できそうでしたが、手をつなぐ部分を画面に含めようとすると、ポリシーエラーが発生しました。謎です。


参考: Niji・Journey の結果

「背中合わせ」は難しいようです。狙った構図にはなりにくいです。
Prompt
Two girls are facing each other back to back and holding hands. The girl on the left has black hair and is wearing a black lace dress. The girl on the right has white hair and is wearing a white lace dress.


右上が構図的にはかなり近いです。
Prompt
Two girls stand back to back. holding hands.The girl on the left has black hair and is wearing a black lace dress. The girl on the right has white hair and is wearing a white lace dress.

著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。
最終更新日: 2024-07-06
作成日: 2023-11-12
iPentec all rights reserverd.