2012-10-10 12 views
5

Tengo la forma de una cara junto con la reconstrucción de esa cara y deseo modelar la imagen correspondiente de la forma inicial.OpenCV: implementación adecuada para Thin - Plate Spline Warping

Básicamente, quiero mover los puntos de la forma original a la posición indicada por la reconstrucción de la cara. He intentado hacer esto utilizando warping de placa delgada spline, esta implementación de la misma: http://ipwithopencv.blogspot.ro/2010/01/thin-plate-spline-example.html.

Sin embargo, no está funcionando como me gustaría. Quiero tener las esquinas de la imagen fijadas y solo mover los puntos correspondientes que definen la cara. Puedo ilustrar esto con 2 imágenes. En la primera imagen tengo la forma de la cara original con la forma reconstruida. enter image description here

Aquí tengo la imagen que quiero modificar y la imagen resultante utilizando el código del enlace mencionado anteriormente. Los puntos verdes marcan los puntos frontales originales y los puntos azules marcan su nueva posición y donde quiero reposicionarlos y estirar mi cara.

enter image description here

único que quiero es sólo para mover los puntos verdes a los puntos azules para que se vea deformado. ¿Conoces algún método para hacer esto que hayas probado?

Respuesta

1

Conseguir las esquinas fijas es bastante fácil. Solo agregue cuatro correspondencias adicionales para las cuatro esquinas de la imagen. En términos de su ejemplo:

iP.push_back(cv::Point(0, 0)); 
iiP.push_back(cv::Point(0, 0)); 
iP.push_back(cv::Point(0, height-1)); 
iiP.push_back(cv::Point(0, height-1)); 
iP.push_back(cv::Point(width-1, 0)); 
iiP.push_back(cv::Point(width-1, 0)); 
iP.push_back(cv::Point(width-1, height-1)); 
iiP.push_back(cv::Point(width-1, height-1)); 

donde, por supuesto, anchura es el ancho de la imagen y altura es la altura de la imagen

Cuestiones relacionadas