ノウハウ

生成AIで商品画像の背景を変えると、服も描き直される|2つのやり方を画素で比べた試験と楽天の合成背景ルール

公開日

白抜きの商品画像を生成AIに渡して「背景だけ変えて」と頼むと、背景と一緒に服も描き直されます。

3点の服で試したところ、形・ロゴの文字・ボタンの数は保たれましたが、服の部分の画素は99.8%以上が入れ替わり、チェックの升目の並びや編み目は「よく似た別物」になっていました。

服を変えたくないなら、背景だけを生成AIで作り、元の切り抜きをその上に重ねるのが確実です。

この方法なら服の画素は100%元のままで、変わっていないことも機械的に確かめられます。

同じ服に、2つのやり方で背景をつけた

比べたのは次の2つのやり方です。

  • A:服ごと編集する。 白抜きの画像を生成AIに渡し、「背景だけ木の床に変えて。服は一切変えないで」と指示する
  • B:背景だけ生成して重ねる。 生成AIには服の写っていない床の写真だけを作らせ、元の画像から切り抜いた服を、手元のパソコンで上に重ねる

Aの指示には、服を変えないでほしいことを、思いつく限り書き込みました。

実際に送った指示の全文です(チェックのシャツの例。背景の説明だけ服ごとに変えています)。

Generate one image by editing the attached product photo. Replace ONLY the plain
white background with a light natural oak wooden floor with fine wood grain, soft
daylight from a window, seen from directly above, as if the garment were laid flat
on it. Keep the garment EXACTLY identical to the attached photo: same colors, same
pattern, same text and logo, same buttons, same shape, same size and same position
in the frame. Do not redraw, restyle, recolor or re-light the garment. Square 1:1,
same framing as the input, no text, no watermark.

Bで背景を作らせた指示はこちらです。

Generate one image. Empty background photo for e-commerce: a light natural oak
wooden floor with fine wood grain, soft daylight from a window, seen from directly
above, top-down flat view, even lighting, nothing on it, no garment, no objects,
no people, no text, no watermark, square 1:1, photorealistic.

生成にかかった時間は、Aが1枚50〜61秒、Bの背景が1枚41〜77秒でした。

Bの重ね合わせは1枚0.25秒です。

10回の生成で、失敗や空の応答は1度もありませんでした。

まず3点の服それぞれについて、元の画像とA・Bの結果を縮小して並べます。

3点の服について、左から元の白抜き画像、服ごと編集したA、背景だけ生成して重ねたBを縮小して並べた比較
見比べたいのは服の柄と色。服も含め、画像はすべてAI生成

縮小して並べると、AもBも服はそのままに見えます。

違いが出たのは、拡大したときと、画素を数えたときでした。

Aは形を保ったまま、服の画素をほぼ全部描き直していた

Aの出力は、服の位置と大きさが元の画像とほぼ一致していました。

位置合わせで求めたずれは0.5px以下、大きさの違いは0.03%以下です。

ロゴの「SMTR 1987」の綴りも、ボタンの数も変わっていません。

それでも、服の画素のうち元とまったく同じ値のまま残ったのは0.2%未満でした。

服Aで元の値のまま残った画素Aの服全体の色のずれ(ΔE00)Bで元の値のまま残った画素
チェックのシャツ(1回目)0.01%1.28100%
チェックのシャツ(2回目)0.01%1.88100%
紺のロゴスウェット0.11%0.70100%
ベージュのカーディガン0.08%1.22100%

「服全体の色のずれ」は、服の範囲の平均色どうしの色差です。

目安として、ΔE00で1〜2は、2枚を並べてよく見比べて気づくかどうかという程度の差です。

画素ごとの差を、服の範囲だけ色分けしたのが次の図です。

服の範囲で元の画像との色の差を色分けした図。上段のAは服全体に差が散らばり、下段のBは服の内側が真っ黒
黒は差なし、明るいほど差が大きい(ΔE00で0〜20)。上段Aと下段Bで、服の内側の明るさを比べてください

Aの差は、柄や編み目のある所ほど大きく出ています。

服のどこか1か所が崩れたのではなく、服全体が一度描き直されているということです。

チェックは升目の並びが変わった

チェックのシャツの袖口を3倍に拡大すると、Aでは升目の並び方が元と違っています。

カフスの中の濃い升目の位置がずれ、元にはない暗いにじみも出ました。

チェックのシャツの袖口を3倍に拡大し、元の画像、A、Bを並べた比較
袖口を3倍に拡大(最近傍補間)。カフスの中の濃い升目の位置に注目

同じ指示をもう1回送ると、描き直し方も変わりました。

2回目は全体の色のずれが1.28から1.88に広がり、差の大きい場所も袖口から袖全体に移っています。

ロゴの文字とボタンは残り、生地の質感が変わった

ロゴとボタンのように輪郭のはっきりした部分は、Aでもよく保たれました。

変わったのは生地の質感です。

スウェットの地の細かな凹凸はなめらかになり、カーディガンの編み目は目の並びが別物になっています。

スウェットの胸のロゴ SMTR を3倍に拡大し、元の画像、A、Bを並べた比較
胸のロゴを3倍に拡大。見てほしいのは文字そのものより、周りの生地
カーディガンの赤いボタンと前立ての編み目を3倍に拡大し、元の画像、A、Bを並べた比較
ボタンと前立てを3倍に拡大。前立ての編み目の並びを見比べてください

商品ページの表示サイズでは、この違いに気づく人は少ないはずです。

ただ、ズームで生地を確かめて買う人が見ているのは、ちょうどこの拡大した部分です。

画素ごとの色差だけでは「変わった」と判定できない

画素ごとの色差の平均も測りましたが、これはAの良し悪しを決める物差しになりませんでした。

元の画像をJPEG(品質90)で保存し直しただけでも、チェックのシャツでは平均3.35の差が出ます。

0.5pxずらしただけなら4.54です。

Aの4.12は、この範囲に収まっていました。

細かい柄ほど、わずかな位置のずれや圧縮で数字が大きく動くためです。

つまり、Aの出力が「元と同じ服か」は、数字では判定できず、1枚ずつ拡大して目で確かめるしかありません。

Bなら服の範囲の差はぴったり0になるので、後で紹介する方法で機械的に確かめられます。

楽天では「自然に見える合成」なら写真背景として扱われる

背景をつけた画像を楽天市場の第1商品画像やSKU画像に使えるかは、商品画像登録ガイドラインの「写真背景」の定義で決まります。

イ 写真背景の定義 以下のいずれかにあてはまるものとなります。 (ア)商品と背景が一緒に撮影されている画像 ※1 (イ)アのように判断される自然な合成画像 ※2

規約楽天市場「店舗運営に関するガイドライン」19. 商品画像登録ガイドライン3.2(2)原文を読む

合成した背景も、一緒に撮影したように見えるなら写真背景です。

一方で、同じ項の注記は不自然な合成をはっきり外しています。

※2 サイズ感や使用シーン等で誤解を与える合成背景、不自然な合成背景と判断される場合は、ガイドライン非適合とみなします。

規約楽天市場「店舗運営に関するガイドライン」19. 商品画像登録ガイドライン3.2(2)※2原文を読む

違反した場合は、違反点数制度の対象になりえます。

本ガイドラインの遵守事項に違反した場合、取扱禁止商材・禁止行為ガイドラインの「Ⅱ-(9)-35 商品画像登録ガイドラインに反する行為」(違反点数5点)にあたる場合があります。

規約楽天市場「店舗運営に関するガイドライン」19. 商品画像登録ガイドライン4原文を読む

楽天がRMS Service Squareに載せている解説記事も、AIで作った画像の典型的な失敗に触れています。

その他、AI生成の画像においても不自然に切り取られていたり、一部が合体してしまっていたりなどのケースがございます。

公式ガイド楽天市場 RMS Service Square「商品検索・SNS対策に!『商品画像登録ガイドライン』徹底対応」原文を読む

ガイドラインの前提には、景品表示法などの法令を守ることも書かれています。

背景は写真背景として認められても、服そのものが実物と違って見えれば別の問題になります。

Aで起きた升目や編み目の描き直しは、この「服そのもの」の側の話です。

楽天自身も、2024年4月30日の発表で、RMSの店舗構築機能に「商品画像の背景を加工し、利用シーンに合わせた商品画像を提案」する機能を2024年6月頃に提供するとしていました。

この記事ではその機能は試していません。

Amazonではメイン画像に背景をつけられないので、使い道はサブ画像と広告

Amazonのメイン画像は純白の背景が条件です(詳しくはAmazonの商品画像の規定の解説)。

背景をつけた画像を使えるのは、サブ画像や広告です。

Amazon広告の側では、商品を別の背景に置いた画像をAIで作る機能が用意されています。

広告の仕様ページは、広告の画像について次の使い方を禁じています。

ランディングページと矛盾している画像の使用

公式ガイドAmazon広告「eコマースディスプレイクリエイティブ ガイドラインと広告仕様」原文を読む

広告の画像で服の柄や質感が商品ページの写真と食い違えば、この条件に触れるおそれがあります。

ここでも、服は元の写真のまま使うほうが安全です。

Bで気をつけるのは、服ではなく縁と影と大きさ

Bは服を一切描き直さない代わりに、合成の不自然さが出やすくなります。

楽天の「不自然な合成背景」に当たらないよう、確認するのは次の3つです。

縁に白いフチが残る

白背景から切り抜いた服をそのまま重ねると、輪郭に白背景の色が細く残ります。

チェックのシャツでは、輪郭をはさんで内外3pxずつの帯のうち5.9%の画素が、背景より目に見えて明るくなっていました(明るさL*で10以上)。

切り抜きの縁を2px内側に縮めてから重ねると、この割合は0.3%まで下がりました。

紺のスウェットでも1.8%から0%です。

袖口の縁を、2つの重ね方で3倍に拡大しました。

袖口の縁を3倍に拡大し、切り抜きをそのまま重ねた場合と、縁を2px縮めてから重ねた場合を並べた比較
見てほしいのは袖口の輪郭に沿った細い線

影がないと服が浮いて見える

背景だけを生成すると、当然ながら服の影はありません。

今回は切り抜きの形をぼかして少しずらした影を、自分で描き足しました。

影のなじみ方は、服ごと描き直したAのほうが自然に見えました(編集部の目視による主観です)。

Bで自然さを上げたいなら、背景を作る指示で光の向きを決めておき、影もその向きに合わせます。

背景の大きさが服と合わない

床板の幅、シーツのしわ、机の木目の細かさは、服の大きさを読み取る手がかりになります。

楽天の規定が「サイズ感」で誤解を与える合成をはっきり外しているのはこのためです。

生成した背景は、服を重ねたうえで「この床板の幅なら、このシャツは実物の大きさに見えるか」を確かめます。

合わなければ、背景を拡大・縮小するか、作り直します。

明日試す手順と、服が変わっていないことの確かめ方

Bの手順は4つです。

  1. 服の切り抜きを用意する。 ささげの工程で作った透過PNGがあればそれを使う。白背景の画像しかなければ、外周から続く白を背景とみなしてマスクを作る
  2. 背景だけを生成する。 上の指示を土台に、床や布の種類、真上からの視点、光の向きを指定する。服や小物を入れない
  3. 重ねる。 切り抜きの縁を1〜2px内側に縮め、影を足す。同じ背景は、同じ撮り方の別の商品にも使い回せる
  4. 確かめる。 次の2点を見る

確かめるのは、服が変わっていないことと、合成が自然なことです。

  • 服が変わっていないか: 元の画像と完成画像を重ね、描画モードを「差の絶対値」にする(Photoshopなどの画像編集ソフトにある機能です)。服の範囲が真っ黒なら、服の画素は1つも変わっていません。 Aの出力で同じことをすると、服全体に柄の形の差が浮かび上がります
  • 合成が自然か: 等倍以上に拡大して、縁の白いフチ、影の向き、背景の大きさを見る

Pythonで処理する場合、重ねる部分は次の十数行です(Pillow・OpenCV・NumPyを使用)。

import numpy as np, cv2
from PIL import Image

src = np.asarray(Image.open("item.png").convert("RGB")).astype(np.float32)  # 元の白抜き画像
mask = (np.asarray(Image.open("item_mask.png")) > 127).astype(np.uint8)       # 服=白、背景=黒
bg = np.asarray(Image.open("background.png").convert("RGB")
                .resize(src.shape[1::-1])).astype(np.float32)                 # 生成した背景

mask = cv2.erode(mask, np.ones((5, 5), np.uint8))                 # 縁を2px内側へ(白フチ対策)
alpha = cv2.GaussianBlur(mask.astype(np.float32), (3, 3), 0)[..., None]
shadow = cv2.GaussianBlur(alpha[..., 0], (0, 0), 9)
shadow = np.roll(shadow, (10, 6), axis=(0, 1))[..., None] * 0.28  # 右下に薄い影
out = src * alpha + bg * (1 - shadow) * (1 - alpha)
Image.fromarray(out.round().clip(0, 255).astype(np.uint8)).save("item_on_background.png")

最後に、生成AIで白背景を作るときの注意を1つ。

今回、見本の服を作るために生成した「白背景」の画像は、四隅がRGB 254でした。

楽天の単色白背景の定義は#FFFFFF(R255, G255, B255)です。

白背景の画像を生成AIで作る場合も、背景の値を確かめてから使ってください。

参考情報源

公式(一次資料)

この記事の規約は 2026年9月25日時点 で各社の公式ページを確認した内容です。

試験は同日に1つのツールで各1回試したもので、ツールの更新や指示の書き方で結果は変わりえます。

#生成AI#商品画像#背景合成#楽天市場#白抜き#ささげ