2017-10-24 60 views
5

Pracuję nad aplikacją dla systemu Android, która wyłuskuje lub otula twarze, wykrywając ją. Obecnie osiągnąłem to przy użyciu algorytmu splajnu cienkich płyt. http://ipwithopencv.blogspot.com.tr/2010/01/thin-plate-spline-example.htmlDopasowywanie obrazu OpenGL przy użyciu tabeli odnośników

Problem polega na tym, że algorytm nie jest wystarczająco szybki, więc postanowiłem zmienić go na OpenGL. Po niektórych badaniach widzę, że tekstura tabeli odnośników jest najlepszą opcją dla tego. Mam zestaw punktów kontrolnych dla obrazu źródłowego i nowe pozycje dla efektu osnowy. Jak utworzyć teksturę tabeli odnośników, aby uzyskać efekt odkształcenia?

Odpowiedz

1

Czy na pewno potrzebujesz tekstury odnośnika? Wydaje się, że byłoby lepiej, gdybyś miał teksturowaną prostokątną siatkę (lub nie prostokątną siatkę, oczywiście, ponieważ algorytm wykrywania twarzy najprawdopodobniej zwróci twarzową siatkę) i wypaczony zgodnie z algorytm:

enter image description here

Nie tylko ty `d być w stanie to zrobić w vertex shader, więc każdy węzeł przetwarzania siatkowego równolegle, ale także` s mniej wartości przetwarzać w porównaniu do dynamicznego generowania tekstur.

Najbardziej zgodną metodą osiągnięcia tego jest nadanie każdemu punktowi siatki współrzędnej Y współrzędnej 0 i X, w której ma być przechowywany indeks siatki, a następnie przekazanie tekstury (może nawet buffer texture, jeśli urządzenia docelowe ją obsługują). moduł cieniujący wierzchołków, gdzie w wymaganym indeksie kanały R i G zawierają żądane współrzędne X i Y.

Wewnątrz wierzchołka modułu cieniującego współrzędne należy załadować z tekstury.

To podejście umożliwia dynamiczne wypaczanie bez ponownego ładowania geometrii, jeśli docelowa tekstura danych jest poprawnie aktualizowana - na przykład wewnątrz modułu cieniującego pikseli.