numpy.linalg.lstsq的向量化

时间:2018-07-24 13:35:06

标签: vectorization affinetransform numpy-broadcasting

我有两组点(A1,A2,B1,B2),我要为其计算仿射变换(从A1到B1,从A2到B2)。 使用numpy.linalg.lstsq,对于单个情况非常简单:

A1 = [[100   0   0]
      [  0 100   0]
      [100 100   0]
      [  0   0 100]
      [100 100 100]]

B1 = [[160   0   0]
      [  0 160   0]
      [160 160   0]
      [  0   0 160]
      [160 160 160]]

A1 = np.hstack([A1, np.ones((A1.shape[0], 1))])
B1 = np.hstack([B1, np.ones((B2.shape[0], 1))])
affine_transformation = np.linalg.lstsq(A1, B1, rcond=None)[0].transpose()

我想对它进行矢量化处理,以便为多组点计算它而没有循环。我想结束这样的事情:

pts_a = np.array([A1, A2])
pts_a = np.pad(pts_a, ((0, 0), (0, 0), (0,1)), mode='constant', constant_values=1)
pts_b = np.array([B1, B2])
pts_b = np.pad(pts_b, ((0, 0), (0, 0), (0,1)), mode='constant', constant_values=1)
affine_transformation = np.linalg.lstsq(pts_a, pts_b, rcond=None)[0].transpose()

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我通过以下方式对其进行了排序:

var video = document.getElementById("video");

navigator.mediaDevices.getUserMedia({video: true, audio: false})
    .then(function(s) {
    stream = s;
    video.srcObject = s;
    video.play();
  })

有没有更有效的方法?