[bezier] Muestreo de Bezier y BezierAlign del modelo ABCNet y la implementación de python


prefacio

¿Qué es una curva de Bezier?

Una curva de Bézier es una curva matemática utilizada en aplicaciones de gráficos bidimensionales. Definición de la curva: punto inicial, punto final (también llamado punto de anclaje), punto de control. Al ajustar los puntos de control, la forma de la curva Bezier cambia. En 1962, el matemático francés Pierre Bézier fue el primero en estudiar este método de dibujar curvas vectoriales, y dio una fórmula de cálculo detallada, por lo que la curva dibujada según esta fórmula lleva el nombre de su apellido, llamada Curva de Bezier.
La fórmula matemática más primitiva en la que se basan las curvas de Bezier es el polinomio de Bernstein. En pocas palabras, los polinomios de Bernstein se pueden usar para demostrar que todas las funciones continuas en el intervalo [a, b] se pueden aproximar mediante polinomios, y la convergencia es muy fuerte, es decir, convergencia uniforme. Es una función continua, puedes escribirla como la suma de varios polinomios de Bernstein y, como n→∞, este polinomio convergerá uniformemente a la función original, esta es la propiedad de aproximación de Bernstein.
En 1959, el matemático francés Paul de Casteljau, que trabajaba en Citroën en ese momento, comenzó a intentar visualizar los polinomios de Bernstein y proporcionó un algoritmo de Casteljau numéricamente estable. De acuerdo con este algoritmo, solo se pueden usar unos pocos puntos de control para generar curvas suaves complejas, es decir, curvas de Bezier.
El nombre de la curva de Bezier se atribuye a Pierre Bézier, un ingeniero francés que trabajó para Renault en 1962. Utilizó este método para ayudar al diseño industrial de la carrocería del automóvil y lo publicitó ampliamente. Es por eso que todos lo llaman curva de Bezier.
Las curvas Bezier son curvas aplicadas a gráficos bidimensionales. La curva se compone de vértices y puntos de control, y la forma de la curva se puede cambiar cambiando las coordenadas de los puntos de control.

1. Polinomios de Bernstein

inserte la descripción de la imagen aquí

2. Curva de Bézier

1. Curva de Bézier de tercer orden

inserte la descripción de la imagen aquí

2. La fórmula de derivación de la curva de Bezier de tercer orden

inserte la descripción de la imagen aquí

3. Resolver la curva de Bézier de tercer orden

Resuelva la curva de Bezier utilizando el método de mínimos cuadrados: aquí B es el valor en el polinomio de Bernstein anterior, que puede determinarse mediante t. Aquí t está determinada por la relación entre la longitud del segmento de línea segmentada de la curva y la polilínea del cuadrilátero externo. Aquí b son los puntos de control y p es la etiqueta original del texto. Para el marco inclinado, los puntos de control son 8 puntos en el lado largo (4 puntos en los dos lados respectivamente); Primero, use estos 14 puntos para calcular los 8 puntos de control iniciales, cuatro en los lados superior e inferior, y luego use el método de mínimos cuadrados para encontrar los mejores pts de control, lo que equivale a un proceso de aproximación, y finalmente obtener los puntos como los pts de control finales.
inserte la descripción de la imagen aquí

4. Implementación del código de solución de la curva de Bezier

Aquí sólo se escribe la solución de la curva de Bézier de tercer orden, y así sucesivamente para los demás órdenes;

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

Supongo que te gusta

Origin blog.csdn.net/m0_37661841/article/details/108749177
Recomendado
Clasificación