【bezier】ABCNet模型的Bezier和BezierAlign采样以及python实现


前言

什么是贝塞尔曲线?

Bézier curve(贝塞尔曲线) 是应用于二维图形应用程序的数学曲线。 曲线定义:起始点、终止点(也称锚点)、控制点。通过调整控制点,贝塞尔曲线的形状会发生变化。 1962年,法国数学家Pierre Bézier第一个研究了这种矢量绘制曲线的方法,并给出了详细的计算公式,因此按照这样的公式绘制出来的曲线就用他的姓氏来命名,称为贝塞尔曲线。
贝塞尔曲线所依据的最原始的数学公式是 伯恩斯坦多项式。 简单来说,伯恩斯坦多项式可以用来证明,在[ a, b ] 区间上所有的连续函数都可以用多项式来逼近,并且收敛性很强,也就是一致收敛。 就是一个连续函数,你可以将它写成若干个伯恩斯坦多项式相加的形式,并且,随着 n→∞,这个多项式将一致收敛到原函数,这个就是伯恩斯坦斯的逼近性质。
到了1959年,当时就职于雪铁龙的法国数学家 Paul de Casteljau 开始对伯恩斯坦多项式进行了图形化的尝试,并且提供了一种数值稳定的德卡斯特里奥(de Casteljau) 算法。根据这个算法,就可以只通过很少的控制点,去生成复杂的平滑曲线,也就是贝塞尔曲线。
而贝塞尔曲线的得名,得归功于1962年就职于雷诺的法国工程师皮埃尔·贝塞尔(Pierre Bézier),他使用这种方法来辅助汽车的车体工业设计,并且广泛宣传,因此大家才都称他为贝塞尔曲线 。
Bezier曲线是应用于二维图形的曲线。曲线由顶点和控制点组成,通过改变控制点坐标可以改变曲线的形状。

一、伯恩斯坦多项式

在这里插入图片描述

二、贝塞尔曲线

1.三阶贝塞尔曲线

在这里插入图片描述

2、三阶贝塞尔曲线推导公式

在这里插入图片描述

3、三阶贝塞尔曲线求解

使用最小二乘法求解贝塞尔曲线:这里B为上述伯恩斯坦多项式中的值,可以通过t来确定。这里t作者由曲线分段线段长度与外界四边形polyline的比例确定。这里b为control pts,p为文本原始的标注。对于倾斜框来说,control pts就是长边上的8个点(两条边分别4个点);对于曲形文本,比如有的曲形文本标注为上下各7个点,这种情况,需要首先利用这14个点计算得到初始的8个control pts,上下边各四个,接着利用最小二乘法去寻找最佳的control pts, 相当于逼近的一个过程,最终得到点作为最终的control pts。
在这里插入图片描述

4、贝塞尔曲线求解代码实现

这里仅写了三阶贝塞尔曲线的求解,其他阶以此类推;

def bezier_to_poly(bezier):
        # bezier to polygon, 修改600可以获取采样点数量
        u = np.linspace(0, 1, 600)
        bezier = bezier.reshape(2, 4, 2).transpose(0, 2, 1).reshape(4, 4)
        points = np.outer((1 - u) ** 3, bezier[:, 0]) \
            + np.outer(3 * u * ((1 - u) ** 2), bezier[:, 1]) \
            + np.outer(3 * (u ** 2) * (1 - u), bezier[:, 2]) \
            + np.outer(u ** 3

猜你喜欢

转载自blog.csdn.net/m0_37661841/article/details/108749177