OpenCV和图像处理(六)

本文深入探讨OpenCV中的特征提取与匹配,包括Harris角点检测、Shi-Tomasi角点检测、SIFT和SURF算法(已废弃)、FAST算法、BRIEF算法以及ORB算法。此外,还介绍了BF算法和FLANN匹配算法在特征匹配中的应用,以及如何利用单应性查找图像中的对象。

本文以下OpenCV都简写成"cv2"的形式,所有img都默认为一张图片
关联文章:
OpenCV和图像处理(一)

OpenCV和图像处理(二)

OpenCV和图像处理(三)

OpenCV和图像处理(四)

OpenCV和图像处理(五)

十、特征提取和特征匹配

首先了解一个概念:角点。抽象的说,角点就是极值点,即在某方面属性特别突出的点。在图像特征提取中,角点可以是两条线的交叉处,也可以是位于相邻的两个主要方向不同的事物上的点。

1、特征提取

特征提取指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征提取的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。特征的好坏对泛化性能有至关重要的影响。

1-1:Harris角点检测

该算法基本思想是使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前与滑动后两种情况,窗口中的像素灰度变化程度,如果存在任意方向上的滑动,都有着较大灰度变化,那么我们可以认为该窗口中存在角点。具体推导我就不写了,但是结论公式我还是有必要摆一下:
R = d e t ( M ) − k ( t r a c e ( M ) ) 2 , R 越 大 越 有 可 能 是 角 点 R=det(M)-k(trace(M))^2,R越大越有可能是角点 R=det(M)k(trace(M))2,R
代码如下:

img = cv2.imread("1.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = np.float32(gray) # 拿到图,转成灰度图,再将int变成float32的类型
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
r'''
解释一下Harris算法的参数:
    src       :传入的灰度图
    blockSize :角点检测中要考虑的邻域的大小
    ksize     :Sobel求导中使用的窗口大小
    k         :Harris角点检测方程中的自由参数,取值参数为[0.04,0.06]。
-----------------------------------------------------------------------
返回的其实就是R值构成的灰度图像。灰度图像坐标会与原图像对应。R值就是角点分数,
当R值很大的时候,就可以认为这个点是一个角点。
'''
img[dst > 0.01 * dst.max()] 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值