https://docs.opencv.org/3.3.0/d6/d00/tutorial_py_root.html
https://github.com/makelove/OpenCV-Python-Tutorial
Intro:
- 理解什么是特征点?
小孩子玩拼图的时候,依据的是什么,依据的是那些显著的图片特征。下图:
AB, 就属于平面flat 类型的特征(右图蓝色)。--出现的地方很多,很难准确的定位
CD, 就是边缘edge特征。(黑色)--水平和垂直是明显不同的,还算比较好区分的特征
EF,就是corner特征(红色)--基本上独一无二。可能很容易定位。
ABCDEF,这些就是特征点
换言之:
- 如何描述特征点?
用计算机的语音系统的描述上面说的这些特征点-- 比如用数据结构etc。 描述方法就是feature description
具有推广的能力(不受图片的限制)
- 如何找到特征点?
在图片中,寻找(定位)特征点的过程--feature detection. 可以有很多种方法。
feature description ---输入--> feature detection( algorithm)--输出--> feature locations
CV_Lesson28_harris角点检测.py--corner detector
数学原理:https://www.cnblogs.com/klitech/p/5779600.html HARD-TBD
设有N阶矩阵A,那么矩阵A的迹(用 表示)就等于A的特征值的总和,也即矩阵A的主对角线元素的总和。
一个n×n的方阵A的行列式记为det(A)或者|A|,一个2×2矩阵的行列式可表示如下:
超像素-目前只了解了。
cornerSubPix
CV_Lesson29_Shi-Tomasi Corner Detector.py
Theory -TBD
In last chapter, we saw Harris Corner Detector. Later in 1994, J. Shi and C. Tomasi made a small modification to it in their paper Good Features to Trackwhich shows better results compared to Harris Corner Detector. The scoring function (打分函数) in Harris Corner Detector was given by:
If it is a greater than a threshold value, it is considered as a corner. If we plot it in λ1−λ2 space as we did in Harris Corner Detector, we get an image as below:
From the figure, you can see that only when λ1 and λ2 are above a minimum value, λmin, it is conidered as a corner(green region).
这个函数很适合在目标跟踪中使用
算法流程:
- 计算每个像素的梯度 ,
- 运用打分公式,过滤掉强度低于最大值* % 的像素
- 过滤掉2个corner 欧式距离过近的点。降序排列
输出 corner 坐标
Introduction to SIFT (Scale-Invariant Feature Transform) 空间尺度不变性
CV_Lesson30_SIFT_intro.py
图片通过变换(transfrom)后,某些特征变成不变的特点---
比如,旋转不变, 平移不变,缩放不变 ,仿射、投影变化 等等-- 这些都叫空间尺度
我们回顾一下前面的harris corner 算法, 图像旋转后,算法依然OK, 但是缩放呢。可能就不行了,原来的角点,放大,局部就可能不是角点。。。如下图:
理论学习: paper:--2004, D.Lowe, University of British Columbia, came up with a new algorithm, Scale Invariant Feature Transform (SIFT) in his paper, Distinctive Image Features from Scale-Invariant Keypoints, which extract keypoints and compute its descriptors. *
此算法有其专利,专利拥有者为英属哥伦比亚大学。
尺度空间理论的基本思想是:在图像信息处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得多尺度下的尺度空间表示序列,对这些序列进行尺度空间主轮廓的提取,并以该主轮廓作为一种特征向量,实现边缘、角点检测和不同分辨率上的特征提取等。
尺度空间方法将传统的单尺度图像信息处理技术纳入尺度不断变化的动态分析框架中,更容易获取图像的本质特征。尺度空间中各尺度图像的模糊程度逐渐变大,能够模拟人在距离目标由近到远时目标在视网膜上的形成过程。
尺度空间满足视觉不变性。该不变性的视觉解释如下:当我们用眼睛观察物体时,一方面当物体所处背景的光照条件变化时,视网膜感知图像的亮度水平和对比度是不同的,因此要求尺度空间算子对图像的分析不受图像的灰度水平和对比度变化的影响,即满足灰度不变性和对比度不变性。另一方面,相对于某一固定坐标系,当观察者和物体之间的相对位置变化时,视网膜所感知的图像的位置、大小、角度和形状是不同的,因此要求尺度空间算子对图像的分析和图像的位置、大小、角度以及仿射变换无关,即满足平移不变性、尺度不变性、欧几里德不变性以及仿射不变性。
理论:SIFT算法在一定程度上可解决:
1. 目标的旋转、缩放、平移(RST)
2. 图像仿射/投影变换(视点viewpoint)
3. 光照影响(illumination)
4. 目标遮挡(occlusion)
5. 杂物场景(clutter)
6. 噪声
SIFT算法的实质---是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。
https://blog.csdn.net/zddblog/article/details/7521424 写的有点乱!TBC
算法steps:
- 图像进行缩放,获得图像金字塔, 每层,再进行5组(typical)不同参数的高斯模糊(不同尺度-缩放+模糊尺度-FOV)
- 然后求X,Y 方向梯度极大值(复杂的数学操作DOG 差分高斯)。
- 求梯度对应的方向(直方图统计的方式)。 arctan |x,y| , (方向)
- 输出总的特征描述符(包含尺度,方向,特征点位置)
优缺点:
SIFT在图像的不变特征提取方面拥有无与伦比的优势,但并不完美,仍然存在:
1. 实时性不高。太慢
2. 有时特征点较少。
3. 对边缘光滑的目标无法准确提取特征点。
等缺点,如下图7.1所示,对模糊的图像和边缘平滑的图像,检测出的特征点过少,对圆更是无能为力。近来不断有人改进,其中最著名的有SURF和CSIFT。
SURF (Speeded-Up Robust Features) 介绍--加速版的SITF-
CV_Lesson31_SURF_intro.py
原理:TBC
https://www.cnblogs.com/gfgwxw/p/9415218.html
https://www.cnblogs.com/jinjidexuetu/p/90ace4e8de574e3d5f4e6ac16a0dc157.html
CV_Lesson32_FAST_角点检测.py
前面的这些算法都不够快,要解决实时性应用要求,比如SLAM, 需要更快的算法--
缺点:-不计算方向!
FAST Algorithm for Corner Detection 原理:TBC
https://blog.csdn.net/akadiao/article/details/79189599
CV_Lesson33_BRIEF.py
BRIEF (Binary Robust Independent Elementary Features)
由于SIFT 算法的 特征描述是128个浮点类型, 占用太多空间。不利于特征比较操作。(遍历开销太大了)
需要压缩,降维度。 降成2进制0/1串表示,也易于特征匹配。
只提供计算desciription 的算法,不同检测特征点的算法--
因此需要用SIFT,SURF 来detect, 然后用Brief来计算
原理介绍:
https://blog.csdn.net/xiangxianghehe/article/details/78770377
优点
1.计算速度快,可在SLAM中达到实时计算
2.二进制描述子存储和匹配更加方便,匹配质量较高
缺点
1.对噪声敏感(因为二进制编码是通过比较具体像素值来判定的)
2.不具备旋转不变性 -
3.不具备尺度不变性
CV_Lesson33_ORB.py
由于SIFT,SURF 都是有版权的算法。如果使用每年都需要付钱,
OPENcv 提供了一个免费的版本 ORB--Oriented FAST and Rotated BRIEF
使用与全景拼接。 ORB is a good choice in low-power devices for panorama stitching (全景拼接!!!) etc
回顾:
至此,我们初步学习了好多个图像特征检测和计算特征描述符的算法 (主要就是corner detection,找轮廓).尺度不变性很重要。
下面我们将学习利用这些特征描述符 来做特征的比较(匹配)feature matching !
CV_Lesson34_feaature match.py
OPEN CV 提供了2中特征匹配的算法: Brute-Force matcher (暴力匹配) and FLANN based matcher.BF matcher: 原理很简单粗暴,直接利用距离公式来计算需要比较的2个描述符,返回距离近的
使用特征匹配和单应性查找复杂对象TBD
CV_Lesson35_feaature match+单应性.py