图像的平滑拼接,基于的技术理论是特征匹配,将两张图重叠的地方特征匹配,选取强匹配特征点,根据选取到的匹配点,将图片进行形变,,然后复制到同一张图片上,实现拼接,最后对拼接处进行优化处理,使拼接处更加自然。听上去不难,实现还是不容易的。
第一部分,特征点匹配,这部分直接采用特征匹配的相同方法即可
//灰度图转换
Mat image1, image2;
cvtColor(image01, image1, COLOR_RGB2GRAY);
cvtColor(image02, image2, COLOR_RGB2GRAY);
//提取特征点
Ptr<xfeatures2d::SURF> surf = xfeatures2d::SURF::create(1000);
vector<KeyPoint> keyPoint1, keyPoint2;
Mat imageDesc1, imageDesc2;
surf->detect(image01, keyPoint1);
surf->detect(image02, keyPoint2);
surf->compute(image1, keyPoint1, imageDesc1);
surf->compute(image2, keyPoint2, imageDesc2);
FlannBasedMatcher matcher;
vector<vector<DMatch> > matchePoints;
vector<DMatch> GoodMatchePoints;
vector<Mat> train_desc(1, imageDesc1);
matcher.add(train_desc);
matcher.train();
matcher.knnMatch(imageDesc2, matchePoints, 2);
//cout << "total match points: " << matchePoints.size() << endl;
// Lowe's algorithm,获取优