在不同跟踪软件之间的2D点转换工具
在不同跟踪软件之间的2D点转换工具
lingyun前言
看过之前电影视效制作中的Matchmove这篇文章的朋友应该知道,
跟踪最基本的步骤就是为匹配物或场景添加二维跟踪点。
在进行摄像机反求的时候,可能单一软件的解算效果不是很理想,
通常我们切换到另一个软件进行尝试解算。
(比如对于变焦镜头来说,SynthEyes的变焦解算会稍好于3DEqualizer。)
而这些二维跟踪点,在跟踪软件之间是不互通的。
当我们已经完成了二维点的添加工作,想要更换跟踪软件的时候。
就需要一个工具来进行点之间的转换。
分析
为了得知不同软件之间导出二维点格式的区别,
我们可以在同一段素材的同一个位置,添加一个二维点。
然后导出:
首先可以看到,点数据是以一个txt文本存储的,
里面记录了点的名称,帧数,和对应帧的x,y位置。
其中除排序格式不一样之外,最重要的则是对二维点x,y位置描述上的不同。
像3DE,PFTrack和Boujou,是以图像像素为标尺。
而SynthEyes则要独树一帜些。
以1920x1080的尺寸素材为例,我们可以为素材的四个角分别添加跟踪点,
观察点的x,y数值,这里用画图来表示结果:
(红线为X轴,绿线为Y轴)
PFTrack和3DE是相同的,以二维点在图像像素中的位置来进行记录。
它们之间的二维点x,y数值可以直接进行copy,不需做更改。x_position = x_position
y_position = y_position
而Boujou的Y轴向和上述两款软件恰好相反。
在进行二维点转换的时候,只需要重新计算y的位置即可。x_position = x_position
y_position = image_width - y_position
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
来查看(简陋的)帮助。
从上图可以看到有以下几个参数
-s
指定来源二维点的类型-t
指定目标二维点的类型-wh
指定使用序列帧的尺寸-o
设置偏移帧
指定类型可以用的参数值有:
syntheyes, 3de, pftrack, boujou, syn
基本调用python conver_trakcer.py /Downloads/from_3de_point.txt
默认情况是不添加任何参数,
是将3DEqualizer二维点转换为SynthEyes。
图像尺寸为1920x1080,默认不偏移帧。
例子
1 | 将Boujou的跟踪点转换为SynthEyes,指定尺寸2880x1550,偏移+1000帧 |
结尾
这个是蹭着周六空闲临时写的一个工具,功能比较简单。
之后可能会加入nuke,blender等软件的支持。
也会添加对二维点的裁剪,镜像等操作。
如果对工具有什么建议或反馈,可以私信我。
如果觉得有用的话可以关注一下这个公众号,谢谢。