生成AIイラストの位置ズレはピクセル編集で直せるか|OpenCVのinpaintとpivot回転で試した話

概要

今回は生成AIイラストの位置ズレ(武器や装飾品が浮いて見える不整合)を、生成AIに描き直させずPythonのピクセル編集で直せるか検証した記録について紹介していきます。

自分は生成AIイラストで遊ぶことが多いのですが、たまに「刀の鞘の先端が宙に浮いていて、何にも支えられていないように見える」といった物理的な不整合が発生することがあります。

こういうとき毎回生成AIに描き直しを頼んでいると、狙った表情やポーズまで崩れてしまうことがあって、結構ストレスなんですよね(- -;

「じゃあ画像自体は変えずに、該当パーツだけピクセル単位でずらせないか」と思い立ち、OpenCVを使った自動修正を試してみました。

結論を先に言うとどちらのアプローチも刀の浮きは直らず、通常運用としては完全に不採用でした
その過程と、なぜ直らなかったのかをまとめます。

それではやっていきましょう!

目次

きっかけ:刀の鞘が宙に浮いて見える生成AIイラスト

まず、問題になった生成AIイラストがこちらです。

生成AIイラストの元画像|奥側の刀の鞘の先端が、支える手の位置より上に浮いて見える
生成AIイラストで奥側の刀の鞘の先端が手の位置より上に浮いて見える不整合

刀は本来、帯(腰)に固定されているはずなので、鞘の先端が何にも支えられず宙に浮いているのはおかしいですよね。
奥側の刀の鞘の先端と、それを支えているはずの手の位置がズレていて、そこだけ見ると物理的に不自然な状態になっています。

こういう破綻は生成AIイラストだと結構よくある話で、いつもは生成AIに描き直しを頼むところなんですが、今回は「生成AIに描き直させず、ピクセル編集だけで直せるか」を検証してみることにしました。

アプローチ1:矩形で切り出して平行移動→穴はinpaintで埋める

最初に試したのは、刀を囲む矩形(bbox)を切り出して位置をずらし、元の場所をOpenCVのinpaintで埋める方法です。

処理の流れはこうなります。

  • 刀を囲む矩形(bbox)を切り出す
    • 座標は画像を目視して手動で指定
  • 矩形を目的の位置までずらして貼り直す
  • 元の場所にできた矩形の穴をOpenCVのinpaint(Telea法)で埋める

単色背景で作った合成テスト画像では、これで自然に見える結果になりました。

しかし、実際のイラストに適用すると失敗しました。

アプローチ1(矩形切り出し+inpaint)の失敗例|貼り直した部分がぼやけた矩形パッチとして残っている
OpenCVのinpaintで穴埋めした部分が周囲の背景トーンと合わずぼやけた矩形パッチとして見えている失敗画像

矩形で切り出す方式だと刀だけでなく背景も一緒に動かしてしまうので全然だめですね。

アプローチ2:pivot(回転軸)の導入と色距離による物体分離

失敗の原因が分かったので、2点を改良しました。

  • pivot指定
    • bboxの中心でなく、刀の柄(帯に固定されている点)を回転の軸に指定できるようにした。柄は固定したまま鞘側だけ角度を変える、物理的に正しい動きができるようになった
  • --isolate(色距離による物体切り出し)
    • 矩形全体でなく、指定した背景サンプル点の色から離れている画素(=刀の色)だけを切り出し・穴埋め対象にするよう変更。矩形ごと背景を動かしてしまう問題を回避できた

改良した自作スクリプト(reposition_object.py)で、最終的に使ったコマンドはこちらです。

reposition_object.py

1
2
3
4
python3 reposition_object.py test.png fixed.png \
--bbox 935,780,1140,915 --pivot 950,830 --rotate 40 \
--isolate --bg-sample 1130,790 --bg-sample 1130,895 --bg-sample 1000,790 --bg-sample 935,910 \
--isolate-tolerance 35
アプローチ2(pivot回転+色距離分離)の失敗例|切り出した鞘の輪郭がギザギザになり、色味だけが浮いた不自然な塊として残っている
pivot回転と色距離による物体分離を試しても鞘の輪郭がギザギザになり色味が浮いて残った失敗結果

この2点を改良しても、結果は変わりませんでした。
写真を見れば一目ですが、全然だめですね。
しかもこれ修正コストがでかい。

これならAIに再依頼するか、自分で書いた方が早いです(- -;

結論:どちらのアプローチも不採用にした理由

アプローチ1・2のどちらも、以下の理由から通常運用では不採用と判断しました。

  • そもそも位置ズレが直っていない
    • アプローチ1は背景トーンとずれたぼやけたパッチ、アプローチ2は輪郭のギザギザと色味の浮きという形で、どちらも新たな不自然さが残ったまま
  • 画像ごとの手動調整コストが高い
    • bbox・pivot・回転角・背景サンプル点を毎回目視で当てて、プレビュー→微調整を2〜3周する運用になるが、直らない結果にそのコストをかける価値がない
  • 色距離による分離は背景色との差が前提
    • 「物体と背景の色が十分に離れている」場合しか機能しない想定だったが、濃紺の鞘とティール背景という色差が大きい組み合わせでも、輪郭のギザギザと色味の浮きは避けられなかった
  • 精度が画像依存で安定しない
    • 毎回同水準の結果が出る保証がない

今後の運用:生成AIに再生成させる方式に切り替え

ピクセル編集での自動修正は行わず、生成AIに再生成させる方式に切り替えることにしました
破綻箇所を指摘する修正プロンプトを自分(Claude)が作成し、そのプロンプトを使ってユーザーがChatGPTやGeminiで再生成する、という流れです。

実際にこの画像に対して作った修正プロンプトの例がこちらです。

fix_prompt.txt

1
2
3
4
5
Keep the character, pose, colors, and background exactly as they are. Fix only the twin katana:
the blade closer to the viewer is floating above the resting hand with a visible gap, instead of
resting against it. Redraw that scabbard so its tip lies flush against the hand/hip with no gap,
following the same downward angle as the other sheathed blade — the katana must read as physically
worn and supported, not hovering in the air.

こんな感じで「どこが」「どう不自然で」「どう直ってほしいか」を具体的に書くのがポイントです。
武器や装備品のような固定関係のあるパーツは、こう指摘すると生成AI側でもズレを直しやすい印象でした。

まとめ

生成AIでの生成は楽ですが、AIっぽさと作画破綻はずっと悩む気がします。
ここを解決してくれるAIが出たら凄いですが、まだまだかかりそうですね(- -;

以上となります。
AIイラストは表現しずらい違和感がありますよね。
自分はそこをなくせるよう研究中です!!
それではお疲れさまでした。