特征运动点估计

cv::Mat getRansacMat(const std::vector<cv::DMatch>& matches,
const std::vector<cv::KeyPoint>& keypoints1,
const std::vector<cv::KeyPoint>& keypoints2,
std::vector<cv::DMatch>& outMatches)
{
	// 转换特征点格式

	std::vector<cv::Point2f> points1, points2;
	cv::Mat featureMat;
	for (std::vector<cv::DMatch>::const_iterator it =
	matches.begin(); it!= matches.end(); ++it)
	{
		// 获取特征点的左侧位置
		float x= keypoints1[it->queryIdx].pt.x;
		float y= keypoints1[it->queryIdx].pt.y;
		points1.push_back(cv::Point2f(x,y));
		// 获取特征点的右侧位置
		x= keypoints2[it->trainIdx].pt.x;
		y= keypoints2[it->trainIdx].pt.y;
		points2.push_back(cv::Point2f(x,y));
	}
	// 计算 good 特征矩阵
	std::vector<uchar> inliers(points1.size(),0);
	if (points1.size()>0 &&points2.size()>0)
	{
		// 计算两幅图像的对应点的特征矩阵
		cv::Mat featureMat= cv::findFundamentalMat(
		cv::Mat(points1),cv::Mat(points2), inliers,
		CV_FM_RANSAC,distance,confidence);
		// 提取存在特征点匹配
		std::vector<uchar>::const_iterator
		itIn= inliers.begin();
		std::vector<cv::DMatch>::const_iterator
		itM= matches.begin();
		// 遍历所有特征点
		for ( ;itIn!= inliers.end(); ++itIn, ++itM)
		{
			if (*itIn)
			outMatches.push_back(*itM);
		}
		if (refineF)
		{
			points1.clear();
			points2.clear();
			for (std::vector<cv::DMatch>::
			const_iterator it= outMatches.begin();
			it!= outMatches.end(); ++it)
			{
				float x= keypoints1[it->queryIdx].pt.x;
				float y= keypoints1[it->queryIdx].pt.y;
				points1.push_back(cv::Point2f(x,y));
				x= keypoints2[it->trainIdx].pt.x;
				y= keypoints2[it->trainIdx].pt.y;
				points2.push_back(cv::Point2f(x,y));
			}
			// 计算两幅图像的特征矩阵
			if (points1.size()>0 && points2.size()>0)
			{

				featureMat= cv::findFundamentalMat(
				cv::Mat(points1),cv::Mat(points2),
				CV_FM_8POINT);
			}
		}
	}
	return featureMat;
 }



转载:http://blog.youkuaiyun.com/zhuwei1988

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值