2012-10-10 9 views
5

Ho la forma di un viso insieme alla ricostruzione di quella faccia e voglio modellare l'immagine corrispondente della forma iniziale.OpenCV - implementazione adatta per la deformazione della piastra sottile -

Fondamentalmente, voglio spostare i punti dalla forma originale alla posizione indicata dalla ricostruzione della faccia. Ho provato a farlo utilizzando la deformazione spline della piastra sottile, questa implementazione: http://ipwithopencv.blogspot.ro/2010/01/thin-plate-spline-example.html.

Tuttavia, non funziona come vorrei. Voglio avere gli angoli dell'immagine fissi e solo per spostare i punti corrispondenti che definiscono la faccia. Posso illustrare questo con 2 foto. Nella prima immagine ho la forma della faccia originale con la forma ricostruita. enter image description here

Qui ho l'immagine che desidero modificare e l'immagine risultante utilizzando il codice dal collegamento menzionato sopra. I punti verdi indicano i punti del viso originali e i punti blu indicano la loro nuova posizione e dove voglio riposizionarli e allungare la mia faccia.

enter image description here

Tutto quello che voglio è solo per spostare i punti verdi per i punti blu in modo che sembra deformato. Conosci qualche metodo per fare ciò che hai testato?

risposta

1

Ottenere gli angoli riparati è abbastanza facile. Basta aggiungere quattro corrispondenze aggiuntive per i quattro angoli dell'immagine. In termini di tuo esempio:

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)); 

Dove, naturalmente, larghezza è la larghezza dell'immagine e altezza è l'altezza dell'immagine

Problemi correlati