Max/MSP/Jitter 官方教程翻译12 - Chromakeying 视频去背景合成

00 翻译自 Cycling74 的 Max/MSP/Jitter 官方文档:Tutorial 10: Chromakeying

本教程介绍如何使用 jit.chromakey 对两个源视频Chromakeying(去背景合成,chroma-纯色,key-抽离颜色)。还将学习如何使用 suckah 对象获取屏幕上任意像素的颜色。

打开教程 patch,由 loadbang 发送 read 消息到两个 jit.movi​​e 对象,自动读取两个视频(oh.mov 和 traffic.mov):


通过 loadbang 初始化 patch

其他参数也由连接到右侧消息框的 loadbang 初始化。消息框发送消息到 patch 中其他名为 receive 的对象完成初始化。(参见教程 18:Remote Messaging)。

点击开关启动 metro。三个 jit.pwindow 对象中出现了图像。开关不仅可以启动和停止 metro,还可以启动和停止两个 jit.movi​​e 视频播放。

教程 patch 的下半部分(三个 jit.pwindow 中的两个)是这样的:


jit.chromakey 对象

点击左侧 jit.pwindow 对象的蓝色区域(即视频中男性头部后面的区域)。

第三个 jit.pwindow(在 patch 右下角)将显示:

历史说明:蓝屏合成(在蓝色哑光背景下拍摄现场镜头的过程)在 20 世纪 30 年代就出现了,目的是为了后期用其他图像替换蓝色。蓝屏合成涉及平版印刷分色,起初是非常昂贵的电影工艺,它(现在更常见的是绿屏合成)已经演变成影视制作中最常见的特效。通过数字叠加完成 Chromakeying(蓝屏处理的术语)让它更普及。Chromakeying 在电视行业中常被称为 CSO(色彩分离叠加),由 1960 年代开发它的 BBC 团队命名。蓝屏发明者 Petro Vlahos 在 1994 年被授予了电影艺术与科学学院终身成就奖,以表彰这项无可替代的技术。

jit.chromakey 对象

去背景合成 - 将一个图像叠加在另一个上面,选择性替换颜色的过程 - 由 jit.chromakey 对象实现。通过指定颜色和其他参数, jit.chromakey 在第一个(左侧)矩阵中检测包含该颜色的单元,并在生成输出矩阵时,用第二个(右侧)矩阵中的对应单元替换它们。这样,来自第一个矩阵的单元叠加到第二个矩阵上。

可以选择任何颜色为要去除的背景,请尝试点击左侧 jit.pwindow 中的其他区域。不同的颜色会从男人的脸上移除,而显示出第二个视频中的图像。


消失的面孔(第一部分)

jit.chromakeycolor 属性(称为参考颜色)来定义中心色。这个属性是一个值列表,应用于等待抠图的矩阵中的所有平面。tol 属性定义中心色的容差范围。此范围内的颜色也会被去除。

jit.chromakey 与 char 矩阵一起使用时,属性值的范围在 0.0~1.0,然后映射到 char 数据所需的 0~255。所以可以将属性设置为 color 0 0 1.0 0,而不是 0 0 255 0tol 为 0.5 时会去除距离参考色一半色阶的所有颜色(key all values within half of the chromatic distance from the reference color)。tol 为 0 时只会用精确的参考色来完成抠图。

再次点击左侧视频中的蓝色区域,然后调整 tol 属性查看输出的变化。在低容差时,左图中的一些蓝屏将保留。容差值非常高时,男人脸部的部分可能会消失。

在教程 patch 中,我们通过点击不可见的对象来设置 jit.chromakey 的颜色属性。解锁 patch,会看到左侧 jit.pwindow 上面的同心红色方块区域:


suckah 对象

该区域是名为 suckah 的 Max UI 对象,可以在 interface 工具栏找到它:


对象面板中的 suckah 对象

suckah 对象获取它所覆盖的屏幕像素的 RGB 值。当单击对象时(patch 处于锁定状态),它会获取 0.0~1.0 范围内的浮点数值。例如,单击视频中的纯蓝色区域,suckah 会发送 0 0 1.0 列表(suckah 的初始版本使用 0~255 范围。如果需要,可以在 inspector 中选择这个设置)

suckah 对象获取 RGB 颜色列表后,用 prepend 0 在前面加上 0(增加 alpha 值到列表最前面)来设置 jit.chromakey 的颜色属性。然后再 prepend color 并发送给 jit.chromakey

Chromakey 选项

jit.chromakey 对象有附加属性:minkey,maxkey 和 fade。当矩阵从左入口进入,jit.chromakey 基于该矩阵在内部创建一个灰度(单平面)遮罩。输入矩阵中,在容差(tol)范围内颜色值的单元格,将设置为遮罩中的 maxkey 属性值(默认为 1)。容差范围之外的区域乘以 minkey 属性(默认为 0)。如果 minkey 和 maxkey 为 0 和 1,生成的图像在去背景的位置应该看起来是白色,而在要保留原始图像的位置看起来是黑色。

将得到的遮罩及其负片,分别乘以右矩阵和左矩阵。然后添加乘法的结果以形成合成图像。下图说明了这个过程:


遮罩(minkey 为 0,maxkey 为 1)和合成效果

maxkey 属性设置右边输出矩阵的强度,minkey 属性设置左边矩阵的强度。如果要反转 minkey 和 maxkey 属性,chromakey 将被反转:


minkey 为 1,maxkey 为 0(反向色度键)的合成效果

fade 属性在被去除和保留的区域之间生成插值,可以生成柔化边缘。左边矩阵中的颜色略微超出了容差范围,但是在参考颜色的 tol + fade 的范围内,在原始颜色和右侧矩阵对应单元格中的颜色之间插值。插值取决于 fade 值的大小,以及颜色距离容差边界有多远。

尝试不同的 tol,fade,minkey,maxkey 和 color 值。观察五个属性如何影响不同的抠图效果,以及 minkey 和 maxkey 值如何相互补充。

完全去除背景很困难。选取合适的 tol 和 fade 属性值,才能确保第一个图像中的区域对第二个图像起作用。包含很多细节的图像,通常会在抠图和保留区域之间颜色变化的区域,出现轻微的斑点。此外,单一颜色(例如蓝色)基本上满足不了去背景的需要,必须使用一系列值。但是你会发现,希望去除的颜色会出现在想要保留的区域中!平衡所有因素以获得满意的效果,是使用 jit.chromakey 对象最困难的部分。

小结

jit.chromakey 对象实现两个 Jitter 对象的 chromakeying。可以使用 color 和 tol 属性设置抠图的颜色范围,并用 fade,minkey 和 maxkey 值来定义两个矩阵在合成时的工作方式。suckah 对象放置在 jit.pwindow 上方,点击即可以获取所在位置的颜色。


友情提示:独自折腾 Max 易患上癔症……不妨入群互助

👇👇👇

kidult00 wechat
扫码关注 00 的公众号
如果文章帮您节省时间或者解答疑问,不妨打个赏 :)