Мозаика сталкивается с проблемами в opencv

Привет, я использую OpenCV и C ++. У меня есть левый профиль и лицо одного и того же человека. Если после определения матрицы преобразования между изображениями лиц и применения этой матрицы преобразования к левому изображению, когда я накладываю его на исходное фронтальное лицо, не должно было быть такого лица желаемый результат,со всем выровненным? Я явно делаю что-то не так и получаю этот результат введите описание изображения здесь. Может ли кто-нибудь помочь с этим, пожалуйста? Вот ссылка на эту исследовательскую работу http://www.utdallas.edu/~herve/abdi-ypaa-jmm2006.pdf

1

Решение

взял изображения из одного из ваших предыдущих вопросов, вручную найдя соответствия пикселей только для зеленых точек (таким образом, 3 соответствия) и этот код

//cv::Mat perspectiveTransform = cv::getPerspectiveTransform(firstFacePositions, secondFacePositions) ;
cv::Mat affineTransform = cv::getAffineTransform(firstFacePositions, secondFacePositions) ;
std::cout << affineTransform << std::endl;
cv::Mat perspectiveTransform = cv::Mat::eye(3,3,CV_64FC1);
for(unsigned int y=0; y<2; ++y)
for(unsigned int x=0; x<3; ++x)
{
perspectiveTransform.at<double>(y,x) = affineTransform.at<double>(y,x);
}

std::cout << perspectiveTransform << std::endl;

cv::Mat warped1;
cv::warpPerspective(face1,warped1,perspectiveTransform,face2.size());

cv::imshow("combined",warped1/2 + face2/2);

Я получаю следующий результат:

введите описание изображения здесь

используя линию cv::Mat perspectiveTransform = cv::getPerspectiveTransform(firstFacePositions, secondFacePositions); вместо этого и используя синий маркер, я получаю:

введите описание изображения здесь

редактироватьСинтаксис C ++, но это работает с C # и Java, похоже.

0

Другие решения

Процедура регистрации, возможно, работает, но вам нужно лучше определить, какие функции вы хотите использовать для выравнивания, или вы используете изображения с слишком большой деформацией.

  • На маленьком (цветном) изображении глаза выровнены.
  • На большом (сером) изображении части лица выглядят правильно выровненными, но не глаза (например).

Если ваша цель состоит в том, чтобы выровнять глаза и рот, то вы должны обнаружить их и применить некоторое 2D (аффинное или гомографическое) отображение, которое сопоставляет их с вашим шаблоном. если ваша цель состоит в том, чтобы выровнять зеленые / синие точки, то вам необходимо использовать их для подачи оценки 2D-картографирования, но в этом случае не будет гарантии, что глаза, рот и т. д. выровнены: только точки должны матч.

4

По вопросам рекламы [email protected]