【python】由一组对应特征点确定一种变换矩阵

在使用特征点进行图像变形的时候,我们需要算出一个最佳的变换矩阵,本文,学习一下网上牛人写出的算法。

东西/原料

  • 电脑
  • python
  • numpy模块

要领/步调

  1. 1

    先给出两组点作为对应的特性点,每一组各有五个点。

    point1=np.uint8(np.random.random((5,2))*10)

    point2=np.uint8(np.random.random((5,2))*10)

    d04eec260d9a310e2673289931b842406bfea27d.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_auto%2Fquality%2Cq_80
  2. 2

    计较每一组特性点的重心坐标:

    c1=np.mean(point1,axis=0)

    c2=np.mean(point2,axis=0)

    bbf95c406afec314c62f545dcac1b727ad539c7d.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_auto%2Fquality%2Cq_80
  3. 3

    计较每组特性点坐标的尺度差:

    s1 = np.std(point1)

    s2 = np.std(point2)

    94af5fc1b727ac533a62509f2ecadce89148997d.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_auto%2Fquality%2Cq_80
  4. 4

    把每组特性点的重心放到原点位置上,而且坐标值除以尺度差。

    p1=(point1-c1)/s1

    p2=(point2-c2)/s2

    a48bc2e8904800fc351d59bdd42043715edb937d.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_auto%2Fquality%2Cq_80
  5. 5

    把p1转置,并和p2举行矩阵乘法:

    A=np.matrix(p1.T)*np.matrix(p2)

    423041db3620b93a8463e176ad0f8835dc8a8a7d.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_auto%2Fquality%2Cq_80
  6. 6

    对矩阵A举行奇异值分化:

    u,v,w=np.linalg.svd(A)

    2184380f8835dd8a173484b403013870d441877d.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_auto%2Fquality%2Cq_80
  7. 7

    机关变换矩阵:

    R = (u*w).T

    M=np.vstack([np.hstack(((s2 / s1) * R,

                          c2.T - (s2 / s1) * R * c1.T)),

                            np.matrix([0., 0., 1.])])

    589f5b078801387087abfb3f2d08a50f95fc837d.jpg?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_500%2Climit_1%2Fformat%2Cf_auto%2Fquality%2Cq_80END
  • 发表于 2022-09-12 11:28
  • 阅读 ( 107 )
  • 分类:电脑网络

相关问题

0 条评论

请先 登录 后评论