图像抠图,Matting

图像抠图问题的数学定义为:

${I_i = \alpha_i F_i + (1 - \alpha_i)B_i} $

  • F - 前景图像
  • B - 背景图像
  • alpha - alpha matte

对于每个像素,前景图像颜色 ${F = [R_F, G_F, B_F, \alpha]} $(或 ${F = [\alpha R_F, \alpha G_F, \alpha B_F]}$),背景图像颜色 ${B=[R_B, G_B, B_B]}$,
数学问题可以转化为:

${I_i = F_i + (1 - \alpha_i)B_i} $

可以认为图像是由前景和背景合成,在不同的区域,alpha 值控制前景和背景占得比例不一样,其取值范围 [0, 1].
例如,前景区域中,背景所占比例为 0%(alpha=0);背景区域中,前景所占比例为 0%(alpha=1).

Python - Image.blend() 函数

from PIL import Image

blend_img = Image.blend(im1, im2, alpha)

Image.blend(im1, im2, alpha) 函数:
通过采用常数 alpha,对两个输入图像 im1 和 im2 插值,创建新图像:

out = image1 * (1.0 - alpha) + image2 * alpha

类似于 Matting 的数学公式.

  • im1 - 第一张输入图像
  • im2 - 第二张输入图像,必须与 im1 尺寸和模式相同.
  • alpha - 插值的 alpha 因子. 如果 alpha=0.0,则返回 im1 的副本. 如果 alpha=1.0,则返回 im2 的副本.

如:

from PIL import Image

img1 = Image.open(png_file1)
img2 = Image.open(png_file2)

blend_img = Image.blend(img1, img2, alpha=0.3)

Python - Image.composite() 函数

composite(image1, image2, mask) 函数:
使用透明图(transparency mask) 对两张图像合并,组合新图像.

  • image1 - 第一张图像
  • image2 - 第二张图像,与 image1 尺寸和模式相同.
  • mask - mask 图像,透明图. 可以是 “1”,“L” 或 “RGBA” 模式. 与 image1 和 image2 尺寸相同.

Related

[1] - 图像处理中的全局优化技术(Global optimization techniques in image processing and computer vision) (二)

Last modification:May 15th, 2019 at 09:30 pm