Good Features to track特征点检测原理与opencv(python)实现
来源:互联网 发布:超声波老鼠软件下载 编辑:程序博客网 时间:2024/05/18 18:44
在学习Good Features to track特征点检测时,主要参考了opencv官方资料关于特征点检测的介绍,网址:http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_feature2d/py_shi_tomasi/py_shi_tomasi.html#shi-tomasi。
1.原理
Good Features to track特征点检测来自于Shi et al. 的一篇文章,就叫Good Features to track。文中讲了对于跟踪Track问题,有哪些特征点是好的。这里我们就要弄清楚其中选取特征点的方法原理。
由另一篇本人博客讲解可知,Harris角点检测是定义一个
,通过比较R>阈值来决定是否是一个角点。
对于Good Features to track,同样定义了R:
也是用R值大小来分析是否是特征点。
不过Good Features to track在实现上有一个参数是输入想要得到特征的数目,也就是说会选择最好的N个特征点来给出。举例来说,如果需要50个特征点,那么这个算法会给出R最大的点出来(也就是最小特征值最大的50个点)。
Good Features to track和Harris的不同可以从下图看出来(图来自官方资料)
左图是harris的特征点的分布,右图是Good Features to track,横轴纵轴分别是两个特征值。对比可以发现,Good Features to track需要最小的特征值也大于的,这一点上要求比harris要高。
Good Features to track 一般也能得到比harris更好的特征点。
2. 代码实现与解释
主要函数是cv2.goodFeaturesToTrack ( image, maxcorners, qualityLevel, minDistance, [, corners [, mask [, blocksize [, useHarrisDetector [, k ]]]]] )
--> corners
参数解释如下:
maxCorners : 最大数目的角点数。即上文提到的N。
qualityLevel:该参数指出最低可接受的角点质量,是一个百分数,示例中给出为0.01。 具体来说,如果最好的角点质量=1500,而qualityLevel = 0.01,那么角点质量<15的就都会被拒掉。这里需要对角点质量如何得到进行简单说明。在官方的函数说明中,角点质量可由cornerHarris() 或 cornerMinEigenval() 得到,即两种quality measure。第一种cornerHarris()就是Harris角点检测的代码,函数返回每个像素点处计算出的R值,R值越大,认为角点质量越好;而cornerMinEigval()是计算每个像素点处对应的协方差矩阵的最小特征值,作为该像素点处的角点质量,认为最小特征值越大,角点质量越好(协方差矩阵就是Harris中提到的M,参考我另一篇博客)。
minDistance:角点之间最小的欧拉距离,避免得到相邻特征点。
mask:可选参数,给出ROI。该参数与原图尺寸相同且类型为CV_8UC1,指示出需要进行特征检测的区域,如在人脸检测中检测到的人脸区域进行特征点提取(matlab中的KLT算法中就是这样)。
/* 注:CV_8UC1:
- 1
- 1
1--bit_depth---比特数---代表8bite,16bites,32bites,64bites---举个例子吧--比如说,如 如果你现在创建了一个存储--灰度图片的Mat对象,这个图像的大小为宽100,高100,那么,现在这张 灰度图片中有10000个像素点,它每一个像素点在内存空间所占的空间大小是8bite,8位--所以它对 应的就是CV_8 2--S|U|F--S--代表---signed int---有符号整形 U--代表--unsigned int--无符号整形 F--代表--float---------单精度浮点型 3--C<number_of_channels>----代表---一张图片的通道数,比如: 1--灰度图片--grayImg---是--单通道图像 2--RGB彩色图像---------是--3通道图像 3--带Alph通道的RGB图像--是--4通道图像
来自http://blog.csdn.net/maweifei/article/details/51221259
*/blocksize:在每一个像素的领域中计算derivative covariation matrix的平均块的大小。即计算M用到的块大小。
corners:检测到的角点的输出向量。
python代码(示例):
# -*- coding: utf-8 -*-"""Created on Thu Jun 15 06:43:25 2017@author: dc"""import numpy as npimport cv2#import matplotlib.pyplot as plt#读入图像filename = 'Dirk.jpg'img = cv2.imread(filename)img2 = img#转化为灰度float32类型进行处理img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)img_gray = np.float32(img_gray)#得到角点坐标向量goodfeatures_corners = cv2.goodFeaturesToTrack(img_gray, 25, 0.01, 10)goodfeatures_corners = np.int0(goodfeatures_corners)# 注意学习这种遍历的方法(写法)for i in goodfeatures_corners: #注意到i 是以列表为元素的列表,所以需要flatten或者ravel一下。 x,y = i.flatten() cv2.circle(img2,(x,y), 3, [0,255,], -1) cv2.imshow('goodfeature',img2)cv2.waitKey()
- Good Features to track特征点检测原理与opencv(python)实现
- OpenCV中SURF特征点检测原理与实现
- Harris角点检测原理与opencv(python)实现
- python+OpenCV 特征点检测
- python+OpenCV 特征点检测
- 【Python】使用openCV与dlib实现人脸68特征点的检测与手动修改
- OpenCV--特征点检测与图像匹配
- OpenCV:特征点检测与图像匹配
- OpenCV: 特征点检测与图像匹配
- OpenCV 特征点检测与图像匹配
- OpenCV:特征点检测与图像匹配
- OpenCV -- 特征点检测与图像匹配
- OpenCV 特征点检测
- OpenCV特征点检测
- OpenCV特征点检测------Surf(特征点篇)
- OpenCV特征点检测------Surf(特征点篇)
- OpenCV特征点检测------Surf(特征点篇)
- OpenCV特征点检测------Surf(特征点篇)
- python列表
- C#各个版本中的新增特性详解
- vue学习:解决vue变量未渲染前代码显示问题
- 欢迎使用CSDN-markdown编辑器
- VIM小的设置
- Good Features to track特征点检测原理与opencv(python)实现
- redis学习日志五(api-String类型常用命令与不常用命令)
- web service 开发过程中遇到的问题汇总:
- PSFTP常用命令
- angularJS
- 程序崩溃时windbg自动加载程序的设置方法
- Java读取pdf中文
- 分享一个学习 Git 的网站
- hdoj 1406