AIGC标识 图像合成的技术演进:从 Alpha 混合到生成式融合

把两张图合成一张,看起来是个很朴素的需求,但真做起来,它是计算机图形学和图像处理里一条相当长的技术链路。这篇文章按「由简到繁」的顺序,梳理几类主流的图像合成方案,以及各自在工程上的取舍。

一、Alpha 混合:最直观的起点

最朴素的合成方式是带蒙版的线性插值:

C = α·F + (1 − α)·B

其中 F 是前景,B 是背景,α 是逐像素的混合系数(也就是蒙版)。用 NumPy 写出来只有一行:

def alpha_blend(fg, bg, mask):
    a = mask[..., None].astype(np.float32)
    return (a * fg + (1 - a) * bg).astype(np.uint8)

它的优点是快、可预测、完全可控。问题也很明显:只在 α 的边界处做插值,无法处理两图之间的光照差异、色温差异和透视差异。如果前景是在暖光下拍的、背景是冷色调,直接混合的结果会像「贴上去的」,边缘还会出现明显的硬接缝。

二、多频段融合:把接缝藏进频率里

拉普拉斯金字塔融合(multi-band blending)是解决接缝的经典手段。核心思路是:把两张图分别做高斯金字塔分解,在每一层上按蒙版融合,再用拉普拉斯金字塔重建。

低频层承载大范围的颜色和亮度过渡,高频层承载纹理和边缘细节。让低频的过渡范围更宽、高频的过渡范围更窄,接缝就被「摊开」到了一个更自然的尺度上。

def laplacian_blend(fg, bg, mask, levels=5):
    gf = gaussian_pyramid(fg, levels)
    gb = gaussian_pyramid(bg, levels)
    gm = gaussian_pyramid(mask, levels)
    blended = []
    for i in range(levels):
        m = gm[i][..., None]
        blended.append(m * gf[i] + (1 - m) * gb[i])
    return collapse_laplacian(blended)

相比 Alpha 混合,它对接缝的改善非常显著,但依然不解决语义问题:它不知道「这里应该有阴影」「这个人的手应该被挡住」,只是把过渡做得更平滑。

三、泊松融合:在梯度域上求解

泊松融合(gradient-domain blending)换了个思路:不直接插值像素值,而是保留前景的梯度场,在目标区域解一个泊松方程,让重建出的图像在区域内部尽量保持前景的梯度,在边界上与背景一致。

它在「颜色不匹配」的场景下效果尤其好——因为绝对亮度由边界条件决定,前景会被自动「染色」到与背景一致。OpenCV 里直接有实现:

import cv2
out = cv2.seamlessClone(fg, bg, mask, center, cv2.NORMAL_CLONE)

局限同样清楚:它假设融合区域是一个相对平整、光照均匀的平面。遇到复杂的遮挡关系、透视变化,或者前景本身需要「重新生成」一部分内容时,梯度域方法就无能为力了。

四、生成式融合:把「合成」变成「重绘」

扩散模型改变了这件事的性质。现在的做法不再是「把 A 的像素搬到 B 上」,而是把两张图作为条件输入,让模型重新生成一张同时满足两者的图。

工程上的典型链路大致是:

  1. 图像编码:把输入图送入 VAE 编码器,得到潜空间表示;
  2. 条件注入:文本 prompt 经文本编码器后,通过 cross-attention 注入 UNet 的每一层;
  3. 去噪采样:从随机噪声出发,迭代若干步逐步去噪;
  4. 解码与后处理:VAE 解码回像素空间,再做分辨率放大与锐化。
latents = vae.encode(concat(images)).latent_dist.sample()
for t in scheduler.timesteps:
    noise_pred = unet(latents, t, encoder_hidden_states=text_emb).sample
    latents = scheduler.step(noise_pred, t, latents).prev_sample
image = vae.decode(latents).sample

这条路线的价值在于它能处理前几类方法处理不了的问题:光照重打、透视校正、遮挡补全、风格统一。代价是算力开销、结果的不确定性,以及多张输入之间的一致性控制——后者至今仍是个开放问题。

五、工程上的取舍

真正落地时,选择往往不取决于「哪种算法最好」,而取决于约束条件:

方案 延迟 可控性 典型场景
Alpha 混合 极低 完全可控 蒙版干净、光照一致
多频段融合 低 高 拼接、全景、HDR
泊松融合 低 中 颜色不匹配的贴图
生成式融合 高 低 语义级重构

一个常见的组合是「粗合成 + 精修」:先用传统方法把几何关系摆对,再用生成模型做局部重绘和光影统一。这样既保留了可控性,又把最难的语义部分交给模型。

如果是做原型验证或者写文档时需要快速得到一张效果图,不一定非要先把这套链路在本地跑通。像 lumfuse 这类在线工具把「上传多张图 + 文本引导 + 选宽高比 → 生成」做成了开箱即用的流程,用来快速验证一个合成想法是否成立,比先搭环境要省事得多;确认思路可行之后再回到自己的管线里复现,通常更划算。

小结

图像合成的技术演进,本质上是从「像素级操作」走向「语义级理解」的过程。传统方法提供确定性和可控性,生成式方法提供语义上的合理性。实际工程里两者通常是互补而非替代关系——先把问题拆清楚,再决定哪一段交给哪个方案。

posted @ 2026-09-28 09:48  jacobmillerv  阅读(14)  评论(0)    收藏  举报