day31:特征点检测

本文介绍了图像处理中的特征点检测,特别是SIFT、SURF和ORB三种方法。SIFT特征点在光照、噪声等变化下保持稳定,而SURF以其速度优化了SIFT。ORB则以更快的计算速度成为近年来的热门选择。通过示例代码展示了如何使用OpenCV库检测和计算这些特征点。
摘要由CSDN通过智能技术生成
特征点与角点在宏观定义上相同,都是能够表现图像中局部特征的像素点,但是特征点区别于角点的是其具有能够唯一描述像素点特征的描述子,例如该点左侧像素比右侧像素的像素值大、该点是局部最低点等.通常特征点由关键点和描述子组成。例如SIFT 特征点、 O RB 特征点等,都需要 先计算关键点坐标 之后再计算描述子.
1.关键点

 

 2.描述子

描述子是用来唯一描述关键点的一串数字,与每个人的个人信息类似。 通过描述子可以区分两个不同的关键点,也可以在不同的图像中寻找同一个关键点.描述子的构 建方 式多种多样。 例如统计关键点周围每个像素点的梯度、随机比较周围 128 对像素点像素值的大小组成描述向量等.
Features 2D类 同样提供了用于计算每种特征 点描述子的co mpute()函 数, 该函数的原型如下:

 

 3.SIFT特征点检测

SIFT 特征点之所以备受欢迎是因 为其在 光照、噪声、视角、缩放和旋转等干扰下仍然具有良好的稳定性.

 

 

4.SURF特征点检测

 

 

 

void visionagin::MySURF()
{
	Mat img = imread("C:\\Users\\86176\\Downloads\\visionimage\\women.jfif");
	if (img.empty() == true)
	{
		cout << "读取失败!" << endl;
	}
	imshow("原图", img);
	Ptr <SURF> surf = SURF::create(500, 4, 3, true, false);//128维,创建SURF类
	Mat imgcopy;
	img.copyTo(imgcopy);
	vector<KeyPoint> keypoints;
	//计算关键点
	surf->detect(img, keypoints);
	//计算特征点
	Mat descriptions;
	surf->compute(img, keypoints, descriptions);
	drawKeypoints(img, keypoints, img, Scalar(255, 255, 255));
	drawKeypoints(img, keypoints, imgcopy, Scalar(255, 255, 255),DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
	imshow("无方向", img);
	imshow("带方向", imgcopy);
}

 5.ORB特征点检测

即使 SURF 特征点已经对 SIFT 进行改进,提高了计算速度,但是应用在没有 GPU 的环境中时仍然很难保证算法的实行性。 ORB 特征点以计算速度快著称,计算速度可以达到 SURF 特征点 10 倍、 SIFT 特征点的 100倍,  因此近些年在计算机视觉领域受到广泛关注。

 

 

 

void visionagin:: MyORB()
{
	Mat img = imread("C:\\Users\\86176\\Downloads\\visionimage\\women.jfif");
	if (img.empty() == true)
	{
		cout << "读取失败!" << endl;
	}
	imshow("原图", img);
	Ptr<ORB> orb = ORB::create(
		500,//特征点数目
		1.2,//金字塔层级间缩放比例
		8,//金字塔层数系数
		31,//边缘阈值
		0,//原图在金字塔的层级
		2,//生成描述子需要的像素点数目
		ORB::HARRIS_SCORE,//使用HARRIS方法评价特征点
		31,// 生成描述子时关键点周围邻域的尺寸
		20);//计算 FAST 角点时像素值差值的阈值
	vector<KeyPoint> keypoints;
	orb->detect(img, keypoints);
	Mat descriptions;
	orb->compute(img, keypoints, descriptions);
	Mat imgcopy;
	img.copyTo(imgcopy);
	drawKeypoints(img, keypoints, img, Scalar(255, 255, 255));
	drawKeypoints(img, keypoints, imgcopy, Scalar(255, 255, 255),DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
	imshow("不带方向", img);
	imshow("带方向", imgcopy);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值