2012-10-10 16 views
5

Mam kształt twarzy wraz z rekonstrukcją tej twarzy i chcę modelować odpowiedni obraz początkowego kształtu.OpenCV - odpowiednia implementacja dla Thin - Plate Spline Warping

Zasadniczo chcę przenieść punkty z oryginalnego kształtu do pozycji wskazanej przez rekonstrukcję twarzy. Próbowałem to zrobić za pomocą wypaczania cienkich płyt, tej implementacji: http://ipwithopencv.blogspot.ro/2010/01/thin-plate-spline-example.html.

Jednak nie działa tak, jak bym chciał. Chcę, aby rogi obrazu były stałe i po prostu przesuwać odpowiednie punkty, które definiują twarz. Mogę to zilustrować 2 zdjęciami. Na pierwszym zdjęciu mam kształt oryginalnej twarzy z zrekonstruowanym kształtem. enter image description here

Tutaj mam zdjęcie, które chcę zmodyfikować, a wynikowe zdjęcie za pomocą kodu z powyższego linku. Zielone punkty oznaczają oryginalne punkty twarzy, a niebieskie punkty oznaczają ich nową pozycję i miejsce, w którym chcę je zmienić i rozciągnąć twarz.

enter image description here

Wszystko czego chcę to po prostu przenieść zielone punkty niebieskich punktów tak, że wygląda zdeformowany. Czy znasz jakąkolwiek metodę wykonania tego, którą przetestowałeś?

Odpowiedz

1

Naprawienie narożników jest dość łatwe. Po prostu dodaj cztery dodatkowe odpowiedniki dla czterech rogów obrazu. Pod względem swojej przykład:

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

Jeżeli, oczywiście, szerokość jest szerokość i wysokośćjest wysokość obrazu

Powiązane problemy