在不同跟踪软件之间的2D点转换工具

zhangly 2021-12-10 16:17:50
Categories: Tags:

前言

tracks-2d-tools-p1.jpg
看过之前电影视效制作中的Matchmove这篇文章的朋友应该知道,
跟踪最基本的步骤就是为匹配物或场景添加二维跟踪点。

在进行摄像机反求的时候,可能单一软件的解算效果不是很理想,
通常我们切换到另一个软件进行尝试解算。
(比如对于变焦镜头来说,SynthEyes的变焦解算会稍好于3DEqualizer。)
而这些二维跟踪点在跟踪软件之间是不互通的

当我们已经完成了二维点的添加工作,想要更换跟踪软件的时候。
就需要一个工具来进行点之间的转换。

分析

为了得知不同软件之间导出二维点格式的区别,
我们可以在同一段素材的同一个位置,添加一个二维点。
然后导出:

tracks-2d-tools-p2.gif
首先可以看到,点数据是以一个txt文本存储的,
里面记录了点的名称帧数,和对应帧的x,y位置

其中除排序格式不一样之外,最重要的则是对二维点x,y位置描述上的不同。
像3DE,PFTrack和Boujou,是以图像像素为标尺。
而SynthEyes则要独树一帜些。

以1920x1080的尺寸素材为例,我们可以为素材的四个角分别添加跟踪点,
观察点的x,y数值,这里用画图来表示结果:
(红线为X轴,绿线为Y轴)

tracks-2d-tools-p3.jpg
tracks-2d-tools-p4.jpg
PFTrack和3DE是相同的,以二维点在图像像素中的位置来进行记录。
它们之间的二维点x,y数值可以直接进行copy,不需做更改。
x_position = x_position
y_position = y_position

tracks-2d-tools-p5.jpg
而Boujou的Y轴向和上述两款软件恰好相反。
在进行二维点转换的时候,只需要重新计算y的位置即可。
x_position = x_position
y_position = image_width - y_position

tracks-2d-tools-p6.jpg
SynthEyes则是以-1到1之间进行取值,所以在转换二维点的时候,
需要将图像尺寸套入公式进行换算。
x_position = x_position / image_width * 2 - 1
y_position = 1 - y_position / image_height * 2

现在已经知道了二维点的x,y在不同软件之间如何进行换算,
剩下的就是每个软件的点数据排序格式,这个部分比较简单。
像Boujou和PFTrack已经用注释写明了每一行所表示的数据是什么。
这里就不再赘述了。

有了思路,这些繁琐的步骤就交给脚本来实现吧。

工具

代码放到github上了:
https://github.com/lingyunfx/tracks2d_conversion

下载下来后打开终端,
使用python conver_tracker.py --help来查看(简陋的)帮助。

tracks-2d-tools-p7.jpg
从上图可以看到有以下几个参数

指定类型可以用的参数值有:
syntheyes, 3de, pftrack, boujou, syn

基本调用
python conver_trakcer.py /Downloads/from_3de_point.txt
默认情况是不添加任何参数,
是将3DEqualizer二维点转换为SynthEyes。
图像尺寸为1920x1080,默认不偏移帧。

例子

# 将Boujou的跟踪点转换为SynthEyes,指定尺寸2880x1550,偏移+1000帧
python conver_trakcer.py -s boujou -t syn -wh 2880x1550 -o 1000 /Downloads/2dtracks.txt

结尾

这个是蹭着周六空闲临时写的一个工具,功能比较简单。
之后可能会加入nuke,blender等软件的支持。
也会添加对二维点的裁剪,镜像等操作。

如果对工具有什么建议或反馈,可以私信我。
如果觉得有用的话可以关注一下这个公众号,谢谢。