我试图找到两个简单椭圆图像之间的角度:
相对角度约为20度。
logPolar图像(对于比例幅度= 10)
但是openCV函数phaseCorrelate()给出了错误的结果:72.9
以下是代码:
cv::Mat image1 = cv::imread("ellipse1.png");
cv::Mat image2 = cv::imread("ellipse2.png");
cv::cvtColor(image1, image1, CV_RGB2GRAY);
cv::cvtColor(image2, image2, CV_RGB2GRAY);
cv::Mat logImage1 = cv::Mat::zeros(image1.size(), CV_8UC1);
cv::Mat logImage2 = cv::Mat::zeros(image2.size(), CV_8UC1);
double magnitude = 10;
cv::logPolar(image1, logImage1, cv::Point2f(image1.cols / 2.0, image1.rows / 2.0), magnitude, cv::INTER_CUBIC);
cv::logPolar(image2, logImage2, cv::Point2f(image2.cols / 2.0, image2.rows / 2.0), magnitude, cv::INTER_CUBIC);
logImage1.convertTo(logImage1, CV_64F);
logImage2.convertTo(logImage2, CV_64F);
cv::Point2d rotScale = cv::phaseCorrelate(logImage1, logImage2);
double rotation = rotScale.y * 180 / (logImage2.cols >> 1);
double scale = exp(rotScale.x / magnitude);
因此,旋转的结果是72.9而不是~20度。
我做错了什么?还是我忽略了一些重要的事情? 此外,logPolar()函数中有一个参数“scale magnitude”,它强烈影响旋转角度评估的结果。有没有可能估计这个参数的“好”值?
我认为结果是错误的,因为phaseCorrelate()函数在傅立叶域中提取错误的峰值。
提前谢谢。