《Opencv3计算机视觉》Python语言实现-第六章特征检测算法

6.1特征检测算法

Opencv中常见的特征检测和提取算法有:
Harris:该算法用于检测角点
SIFT:该算法用于检测斑点
SURF:该算法用于检测斑点
FAST:该算法用于检测角点
BRIEF:该算法用于检测斑点
ORB:该算法代表方向的FAST算法与具有旋转不变性的BRIEF算法

特征的定义:特征就是有意义的图像区域。例如,角点及高密度区域、边缘、斑点等。

检测角点特征

connerHarris是一个opencv函数,可以检测图像的角点。

python代码实现:

import cv2
import numpy as np

img=cv2.imread(r'D:\\picture\\chess_board.jpg')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray=np.float32(gray)
dst=cv2.cornerHarris(gray,2,23,0.04)
img[dst>0.01*dst.max()] = [0,0,255]
while(True):
    cv2.imshow('corners',img)
    if cv2.waitKey(1000//12) & 0xff==ord("q"):
        break
cv2.destroyAllWindows()

输入:在这里插入图片描述输出:在这里插入图片描述

使用DoG和SIFT进行特征提取与描述

当图像大小发生变化的时候发现上述方法的角点数目也发生变化。所以我们应该选择一种与图像比例无关的角点检测方法。SIFT可以解决这个问题。SIFT检测特征,对不同的图像尺度输出相同的结果。(需要注意的是,SIFT并不检测关键点,关键点可以由Difference of Gaussians检测,但SIFT会通过一个特征向量来描述关键点周围区域的情况。)

DoG:是对同一图像使用不同高斯滤波器所得到的结果,DoG的操作最终结果会得到感兴趣的区域(关键点)。SIFT对象会使用DoG检测关键点,并且对每个关键点周围的区域计算特征向量。

python代码实现:

import cv2
import sys
import numpy as np

imgpath='D:\\picture\\nopicture.png'
img = cv2.imread(imgpath)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#将图像变为灰度格式

sift = cv2.xfeatures2d.SIFT_create()#创建一个sift对象,并计算灰度图像
keypoints, descriptor = sift.detectAndCompute(gray,None)#sift会使用DoG检测关键点,并且对每个关键点周围的区域计算特征向量

img = cv2.drawKeypoints(image=img, outImage=img, keypoints = keypoints, flags = 4, color = (51, 163, 236))

cv2.imshow('sift_keypoints', img)
while (True):
  if cv2.waitKey(1000 // 12) & 0xff == ord("q"):
    break
cv2.destroyAllWindows()

使用快速Hessian算法和SURF来提取和检测特征

SURF吸收SIFT算法的思想,但是速度快了好几倍。
SURF采用快速Hessian算法检测关键点,SURF会提取特征。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值