使用Pulp求解齐次变换矩阵中的最佳系数

时间:2019-11-24 21:56:27

标签: python-3.x computer-vision linear-programming pulp

在较高级别,我正在尝试实现一种视频稳定算法,该算法利用线性编程来找到最佳路径。开头我对线性编程和python所做的工作几乎一无所知,因此欢迎任何批评。

视频长度为n帧,我有一个3x3矩阵的n-1列表 F ,描述了摄像机在帧之间的平移和旋转

我想通过在原始图像的边界内获取一个裁剪窗口并通过另一个3x3齐次变换矩阵对其进行变换,以使此新的最佳路径的运动不像原始的那样不稳定,从而稳定路径。

该算法致力于通过最小化F(t + 1)xB(t + 1)-B(t)的L1-范数来解决此问题... F = 3x3均匀变换矩阵的列表,描述视频中的逐帧过渡 B =应用于F以平滑路径的3x3齐次变换矩阵的列表 t =给定的帧转换(总共n-1个帧转换)

到目前为止,我唯一要应用的约束条件是裁剪窗口的角(占整个帧的75%,最初位于图像的中心)在原始帧的边界内

更正式。

Minimize L1-Norm( F[t+1]B[t+1] - B[t] ):
     with respect to B = (B1, B2,... Bn)

     where B[t] = [a  b  c]
                  [c  d  e]
                  [0  0  1]
           F[t] = [cos(theta) -sin(theta) dx]
                  [sin(theta) cos(theta   dy]
                  [0          0            1]
     and F[t] is known

     subject to:
          (0,0)^T <= CR[i]B[t] <= (width, height)^T
     where CR is list of matrices representing a corner 

现在,我的纸浆铺设问题正在解决这个问题,因此可以由纸浆溶解器解决。我主要阅读this guide的本能如下

prob = LpProblem("find best sequence of B", LpMinimize)
frame_transitions = np.linspace(1, len(F), len(F))
B = LpVariable.dicts("B_vars", frame_transitions)
prob += lpSum( [abs( np.matmul(F[t+1], B[t+1]) - B[t] ) for t in range(1, len(frame_transitions))] )
prob += lpSum( [ np.matmul(CR[0], B[t]) ] for t in range(1, len(frame_transitions))] ) <= [width, height] 
prob += lpSum( [ np.matmul(CR[0], B[t]) ] for t in range(1, len(frame_transitions))] ) >= [0, 0] 
#constraint for upper left corner, repeat same process for corners 1,2,3     

显然这是行不通的,因为LpVariable.dicts并没有为B中的每个条目设置一个矩阵,因此我不确定该如何实现。添加主要操作和约束函数时,是否应该为B中的6个自由度中的每个自由度创建一个变量并将它们组合成矩阵?

0 个答案:

没有答案