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