Max/MSP/Jitter 教程12 - 视频去背景合成
00 翻译自 Cycling74 的 Max/MSP/Jitter 官方文档:Tutorial 10: Chromakeying
https://docs.cycling74.com/max7/tutorials/jitterchapter10
本教程介绍如何使用 jit.chromakey
对两个源视频Chromakeying(去背景合成,chroma-纯色,key-抽离颜色)。还将学习如何使用 suckah
对象获取屏幕上任意像素的颜色。
打开教程 patch,由 loadbang
发送 read
消息到两个 jit.movie
对象,自动读取两个视频(oh.mov 和 traffic.mov):
通过 loadbang
初始化 patch
其他参数也由连接到右侧消息框的 loadbang
初始化。消息框发送消息到 patch 中其他名为 receive
的对象完成初始化。(参见教程 18:Remote Messaging)。
点击开关启动 metro
。三个 jit.pwindow
对象中出现了图像。开关不仅可以启动和停止 metro
,还可以启动和停止两个 jit.movie
视频播放。
教程 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.chromakey
用 color
属性(称为参考颜色)来定义中心色。这个属性是一个值列表,应用于等待抠图的矩阵中的所有平面。tol
属性定义中心色的容差范围。此范围内的颜色也会被去除。
将 jit.chromakey
与 char 矩阵一起使用时,属性值的范围在 0.0~1.0,然后映射到 char 数据所需的 0~255。所以可以将属性设置为 color 0 0 1.0 0
,而不是 0 0 255 0
。tol
为 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/MSP/Jitter 教程系列
Max/MSP/Jitter 教程 01 - 什么是矩阵?
Max/MSP/Jitter 教程 02 - Jitter 对象的属性
Max/MSP/Jitter 教程 03 - 播放 QuickTime 视频
Max/MSP/Jitter 教程 04 - 创建矩阵
Max/MSP/Jitter 教程 05 - 矩阵的数学运算
Max/MSP/Jitter 教程 06 - 控制视频播放
Max/MSP/Jitter 教程 07 - ARGB 颜色
Max/MSP/Jitter 教程 08 - 调整颜色
Max/MSP/Jitter 教程 09 - 调整图像颜色
Max/MSP/Jitter 教程 10 - 交叉渐变
友情提示:独自折腾 Max 易患上癔症……不妨入群互助
👇👇👇