OpenCV+Python计算机视觉导学
由于当前技术风潮正处于人工智能的大环境之下,计算机视觉变得尤为重要,而以此为基础的深度学习则是以Python为主,所以当前OpenCV中传统的C++反而不如Python受欢迎,为了后面进阶深度学习,本系列教程将以OpenCV+Python为出发点进行学习爱。针对其多语言支持的特性,我们选择使用Pyt
OpenVINO生态社区
这个作者很懒,什么都没留下…
展开
-
【转载】项目实战—疲劳检测(十八)
我们在上次已经讲过人脸的关键点定位,用到了Dlib的库,这次我们将其用于疲劳检测。代码实现1、导入工具包view plaincopy to clipboardprint?from scipy.spatial import distance as dist import numpy as np import dlib import cv2 接下来老样子。2、对脸上的部位进行定义在关键点定位的官方文档中,提取68个关键点来表示脸上的部位。其中:第1个点到第17个点:脸颊;第18转载 2020-12-10 09:38:33 · 1163 阅读 · 2 评论 -
【转载】项目实战—人脸关键点定位(十七)
在之前我们使用过Dlib库进行人脸检测, 今天我们将使用其进行人脸关键点定位,我们仍将使用dlib,现在直接进入实战部分。本次我们将在包含(一个或多个)人脸的图片中对脸上的某些部位(嘴巴、眉毛等部位)进行标记。1、导入工具包view plaincopy to clipboardprint?import numpy as np import dlib import cv2 2、对脸上的部位进行定义在关键点定位的官方文档中,提取68个关键点来表示脸上的部位。其中:第1个点到第17个点:脸转载 2020-12-09 10:57:55 · 1062 阅读 · 0 评论 -
【转载】项目实战—全景图像拼接(十六)
图像拼接是计算机视觉中最成功的应用之一。如今,很难找到不包含此功能的手机或图像处理API。在本次教程中,我们将讨论如何使用Python和OpenCV进行图像拼接。也就是,给定两张共享某些公共区域的图像,目标是“缝合”它们并创建一个全景图像场景。当然也可以是给定多张图像,但是总会转换成两张共享某些公共区域图像拼接的问题,因此我们将以最简单的形式进行介绍。我们在之前已经讲过OpenCV的特征点的问题,今天我们将使用这些知识来完成图像的全景拼接。我们需要拼接的两张图像如下:给定上述一对图像,我们希望将它们转载 2020-12-08 09:35:36 · 533 阅读 · 0 评论 -
【转载】项目实战—答题卡识别判卷续(十五)
在之前的轮廓检测之后,接下来我们需要开始进行对图像进行Transform变换,从而对图像进行校正。view plaincopy to clipboardprint?# 对原始图像和灰度图都进行四点Transform变换 paper = four_point_transform(image, docCnt.reshape(4, 2)) warped = four_point_transform(gray, docCnt.reshape(4, 2)) 我们使用了four_point_transf转载 2020-12-07 09:41:12 · 445 阅读 · 0 评论 -
【转载】项目实战—答题卡识别判卷(十四)
本次我们将进行另一个实战项目,从本质上来讲,其与之前的卡片的数字识别基本上原理是一样的。本次我们将使用的实验图片:实现答题卡识别的7步 Step #1: 检测到图片中的答题卡 Step #2: 应用****变换来提取图中的答题卡(以自上向下的鸟瞰视图) Step #3: 从****变换后的答题卡中提取 the set of 气泡/圆点 (答案选项) Step #4: 将题目/气泡排序成行 Step #5: 判断每行中被标记/涂的答案 Step #6: 在我们转载 2020-12-04 09:40:30 · 505 阅读 · 0 评论 -
【转载】项目实战—文档扫描OCR识别(十三)
这次我们将使用OCR进行实战。我们将使用示例图片:首先我们需要安装tesserocr在Windows下安装tessocr,首先需要下载tesseract,它为tesserocr提供了支持。tesseract下载地址:https://digi.bib.uni-mannheim.de/tesseract/进入下载页面,可以看到有各种.exe文件的下载列表:其中文件名中带有dev的为开发版本,不带dev的为稳定版本,可以选择下载不带dev的版本,需要安装 “tesseract-ocr-w64-se转载 2020-12-03 09:48:04 · 647 阅读 · 0 评论 -
【转载】项目实战—CreditCard数字识别(十二)
现在我们需要进行第二阶段的工作。准备工作(opencv)cv2.getStructuringElement()kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(11,11))这个函数的第一个参数表示内核的形状,有三种形状可以选择。矩形:MORPH_RECT;交叉形:MORPH_CROSS;椭圆形:MORPH_ELLIPSE;第二和第三个参数分别是内核的尺寸以及锚点的位置。一般在调用erode以及dilate函数之前,先定义一个Mat类转载 2020-12-02 11:06:21 · 334 阅读 · 0 评论 -
【转载】项目实战—CreditCard数字识别(十一)
之前在进阶篇我们已经讨论过OpenCV的模板匹配,本次我们可以将其用于Credit Card数字识别,当然这是最简单的也是最直接的方法,后面我们也会介绍到OCR识别,但本次我们暂不涉及。准备工作argparse用法使用argparse模块创建一个ArgumentParser解析对象,可以理解成一个容器,将包含将命令行解析为Python数据类型所需的所有信息。parse_args()是将之前add_argument()定义的参数进行赋值,并返回相关的namespace:view plaincopy t转载 2020-12-01 09:54:05 · 244 阅读 · 0 评论 -
【转载】项目实战—文档区域MSER检测实战(十)
上次已经讨论过相关的理论,这次我们来进行相关的实战。OCR相关工作都有一个第一步,那就是检测图像中的文本区域,只有找到了文本区域,才能对其内容进行识别,也只有找到了文本区域,才能更有针对性地判断该文本图像的质量好坏,我们期望达到如下的文本区域检测效果:MSER对一幅已经处理成灰度的图像做二值化处理,这个处理的阈值从0到255递增,这个阈值的递增类似于在一片土地上做水平面的上升,随着水平面上升,高高低低凹凸不平的土地区域就会不断被淹没,这就是分水岭算法,而这个高低不同,就是图像中灰度值的不同。而在一幅含转载 2020-11-30 10:40:30 · 398 阅读 · 0 评论 -
【转载】项目实战—文档区域MSER检测理论(九)
通常我们需要对文档进行OCR识别的时候,我们需要首先找到文字的区域,今天我们就来讨论相关的方法。Lowe和Bay提出的SIFT和SURF算法高效实现了具有尺度和旋转不变性的特征检测,但这些特征不具有仿射不变性。区域检测针对各种不同形状的图像区域,通过对区域的旋转和尺寸归一化,可以实现仿射不变性。MSER(Maximally Stable Extrernal Regions)是区域检测中影响最大的算法原理MSER基于分水岭的概念:对图像进行二值化,二值化阈值取[0, 255],这样二值化图像就经历一转载 2020-11-27 09:37:02 · 229 阅读 · 0 评论 -
【转载】项目实战—行人检测之SVM实战(八)
本次我们将使用SVM+HOG来进行行人识别。行人检测,就是将一张图片中的行人检测出来,并输出bounding box级别的结果。而如果将各个行人之间的轨迹关联起来,就变成了行人跟踪。而行人检索则是把一段视频中的某个感兴趣的人检索出来。在2005年CVPR上,来自法国的研究人员Navneet Dalal 和Bill Triggs提出利用Hog进行特征提取,利用线性SVM作为分类器,从而实现行人检测。HOG+SVM行人检测首先计算样本图像的HOG描述子,组成一个特征向量矩阵,对应的要有一个指定每个特征向量转载 2020-11-26 09:35:57 · 578 阅读 · 0 评论 -
【转载】项目实战—行人检测之SVM理论(七)
现在我们将使用HOG+SVM来进行行人检测,之前我们已经简述过HOG,现在我们来简述SVM,又称为支持向量机。由于其属于机器学习的内容,故我们只是简述,详细的推导并不涉及。SVM(支持向量机)主要用于分类问题,主要的应用场景有字符识别、面部识别、行人检测、文本分类等领域。通常SVM用于二元分类问题,对于多元分类通常将其分解为多个二元分类问题,再进行分类。下面我们首先讨论一下二元分类问题。对于二元分类问题,如果存在一个分隔超平面能够将不同类别的数据完美的分隔开(即两类数据正好完全落在超平面的两侧),则转载 2020-11-25 09:34:32 · 322 阅读 · 0 评论 -
【转载】项目实战—人脸检测之卷积神经网络实战(六)
现在我们来进行实战,以前的方法中,很大一部分工作是选择滤波器来创建特征,以便尽从图像中可能多地提取信息。随着深度学习和计算能力的提高,这项工作现在可以实现自动化。CNN 的名称就来自我们用一组滤波器卷积初始图像输入的事实。需要选择的参数仍是需要应用的滤波器数量以及尺寸。滤波器的尺寸称为步幅。一般步幅设置在 2 到 5 之间。在这种特定情况下,CNN 的输出是二分类,如果有人脸,则取值 1,否则取 0。检测图像上的人脸一些元素在实现中会发生变化。第一步是下载预训练模型:https://github.转载 2020-11-24 09:42:00 · 291 阅读 · 0 评论 -
【转载】项目实战—人脸检测之卷积神经网络理论(五)
我们已经讨论了两个关于人脸检测的两个方法,分别为OpenCV中的级联分类器以及Dlib库中的人脸检测,这次我们来讨论第三种方法,使用Dlib中的卷积神经网络来进行人脸检测。卷积神经网络的背景作为机器学习算法中最核心的理论,卷积神经网络在任何情况下都有着非常突出的表现。由于神经网络理论本身较为复杂,在这里我们只是简单的进行讨论一下。深度学习的许多研究成果,离不开对大脑认知原理的研究,尤其是视觉原理的研究。1981 年的诺贝尔医学奖,颁发给了 David Hubel(出生于加拿大的美国神经生物学家)转载 2020-11-23 09:34:31 · 255 阅读 · 0 评论 -
【转载】项目实战—人脸检测之HOG实战(四)
我们在之前注意到,在计算HOG方向梯度直方图特征时,如果按照上面说的直接对每一个小块进行梯度、梯度幅值、角度的计算,然后在进行统计,这样做的话,HOG的计算复杂度将会十分大,因此,我们可以将积分图的概念引入HOG的计算,以便加速HOG的计算性能。积分图就是:对于一幅灰度图像而言,如果每一像素点的灰度值等于该像素点左上矩形区域所有像素点的灰度值之和,那么这幅图像就是积分图像。1)为什么要用积分图像图像直方图的计算方法为:遍历图像中的全部像素并累加计算每个灰度强度值出现的次数。但是,有时候需要计算图像中多转载 2020-11-20 10:51:03 · 516 阅读 · 0 评论 -
【转载】项目实战—人脸检测之HOG理论(三)
之前我们讲述了使用级联分类器来进行人脸检测,现在我们将使用第二种方法来实现。第二种常用的人脸检测工具由 Dlib 提供,它使用了方向梯度直方图(HOG)的概念。论文《Histograms of Oriented Gradients for Human Detection》实现这一方案。Histogram of Oritentd Gradients,缩写为HOG,是目前计算机视觉、模式识别领域很常用的一种描述图像局部纹理的特征。它通过计算和统计图像的局部区域(Cell和Block)的方向梯度直方图来构成特转载 2020-11-19 09:39:55 · 379 阅读 · 0 评论 -
【转载】项目实战—人脸检测之级联分类器实战(二)
在上个教程中,使用 Adaboost 学习分类函数过程非常有效,但仍存在一个重大问题。在图像中,大部分图像为非面部区域。对图像的每个区域给予等同的注意力是没有意义的,因为我们应该主要关注最有可能包含人脸的区域。Viola 和 Jone 使用级联分类器在减少了计算时间的同时,实现了更高的检测率。关键思想是在识别人脸区域时排除不含人脸的子窗口。由于任务是正确识别人脸,我们希望假阴率最小,即包含人脸却未被识别的子窗口最少。每个子窗口都使用一系列分类器。这些分类器是简单的决策树:·如果第一个分类器检测为正样本转载 2020-11-18 10:06:04 · 461 阅读 · 0 评论 -
【转载】项目实战—人脸检测之级联分类器理论(一)
至本次教程开始,我们将进入实战篇,当然仍然会设计到一些理论部分,比如机器学习相关的知识,级联分类器等等。接下来,我们将使用OpenCV自带的级联分类器实现一个简单的人脸检测的功能。首先逐步开始研究级联分类器。级联分类器,即使用类 Haar 特征工作的级联增强分类器,是集成学习的一种特殊情况,称为 boost。它通常依赖于 Adaboost 分类器(以及其他模型,如 Real Adaboost、Gentle Adaboost 或 Logitboost)。我们如何检测图上是否有人脸呢?有一种名为 Viol转载 2020-11-13 09:54:55 · 438 阅读 · 0 评论 -
【转载】OpenCV-Python系列之立体图像的深度图(六十六)
双目立体匹配一直是双目视觉的研究热点,双目相机拍摄同一场景的左、右两幅视点图像,运用立体匹配匹配算法获取视差图,进而获取深度图。而深度图的应用范围非常广泛,由于其能够记录场景中物体距离摄像机的距离,可以用以测量、三维重建、以及虚拟视点的合成等。在上一节中,我们看到了对极约束和其他相关术语等基本概念。我们还看到,如果我们有两个场景相同的图像,则可以通过直观的方式从中获取深度信息。下面是一张图片和一些简单的数学公式证明了这种想法。上图包含等效三角形。编写它们的等式将产生以下结果:x和x′是图像平面中与转载 2020-11-13 09:40:48 · 462 阅读 · 0 评论 -
【转载】OpenCV-Python系列之对极几何实践(六十五)
OpenCV中的对极几何在上个教程中我们已经简述了对极几何的一些理论知识,本次我们来使用OpenCV中的一些函数来进行实战,为了得到基础矩阵我们应该在两幅图像中找到尽量多的匹配点。我们可以使用 SIFT 描述符,FLANN 匹配器和比值检测。我们使用示例图片:先看代码:view plaincopy to clipboardprint?import numpy as np import cv2 as cv from matplotlib import pyplot as plt转载 2020-11-12 09:52:00 · 409 阅读 · 0 评论 -
【转载】OpenCV-Python系列之对极几何理论(六十四)
在我们使用针孔相机时,我们会丢失大量重要的信息,比如说图像的深度,或者说图像上的点和摄像机的距离,因这是一个从 3D 到 2D 的转换。因此一 个重要的问题就产生了,使用这样的摄像机我们能否计算除深度信息呢?答案 就是使用多个相机。我们的眼睛就是这样工作的,使用两个摄像机(两个眼睛), 这被称为立体视觉。在进入深度图像之前,我们要先掌握一些多视角几何的基本概念。在本节中我们要处理对极几何。下图为使用两台摄像机同时对一个一个场景进行拍摄的示意图。如果只是用一台摄像机我们不可能知道 3D 空间中的 X 点转载 2020-11-12 09:44:11 · 193 阅读 · 0 评论 -
【转载】OpenCV-Python系列之姿态估计(六十三)
在上一节摄像机校准里,我们找到了摄像机矩阵,畸变参数等,给一个模板图像,我们可以用上面的信息来计算它的姿态,或者物体是如何处于空间中的,比如如何旋转的,怎么被移动的。对于一个平面物体。我们可以假设Z = 0,这样,问题现在变成了摄像机如何放置的来看我们的模板图像,所以,如果我们知道物体是怎么放在空间中的,我们可以画出2D图来模拟3D效果。在计算机视觉中,物体的姿势指的是其相对于相机的相对取向和位置,一般用旋转矩阵、旋转向量、四元数或欧拉角表示(这四个量也可以互相转换)。一般而言,欧拉角可读性更好一些,也可转载 2020-11-11 10:00:32 · 695 阅读 · 0 评论 -
【转载】OpenCV-Python系列之相机校准实践(六十二)
上个教程已经谈到,为了校准摄像头,我们至少需要10种测试模式。现在我们使用示例图片:用同一相机从不同的位置,不同的角度,拍摄标定板的多张照片(10-20张最佳),将照片放到文件夹中:设想一张棋盘的图像,需要用于校准摄像头最重要的输入数据是3D真实世界点的集合以及图像中这些点的相应2D坐标。2D图像点我们得能够轻易从图像中找出来。(这些图像点是棋盘中两个黑色方块相互接触的位置)那现实世界空间的3D点怎么来呢?这些图像是从一个静止的摄像头上取下来的,并且棋盘被放置成了不同的位置和方向。所以我们得知道(转载 2020-11-11 09:54:08 · 443 阅读 · 1 评论 -
【转载】OpenCV-Python系列之相机校准理论(六十一)
其实大家可能已经发现,越到后面,所涉及的跟视频处理都有很大的关系,包括特征点,目标跟踪以及光流等等这些东西。在本次教程中,我们将介绍:· 由相机引起的失真类型,· 如何找到相机的固有和非固有特性· 如何根据这些特性使图像不失真一些针孔相机会给图像带来明显的失真。两种主要的变形是径向变形和切向变形。径向变形会导致直线出现弯曲。距图像中心越远,径向畸变越大。例如,下面显示一个图像,其中棋盘的两个边缘用红线标记。但是,我们会看到棋盘的边框不是直线,并且与红线不匹配,所有预期的直线都凸出。径向变形可转载 2020-11-10 10:01:36 · 255 阅读 · 0 评论 -
【转载】OpenCV-Python系列之稠密光流(六十)
之前我们讨论过LK算法,其本质来讲属于稀疏光流算法,我们在OpenCV中所用的函数为:calcOpticalFlowPyrLK。这次来介绍一种稠密光流算法(即图像上所有像素点的光流都计算出来),它由Gunnar Farneback 所提出。光流是由物体或相机的运动引起的图像对象在两个连续帧之间的视在运动模式.光流方法计算在t和 t+Δt时刻拍摄的两个图像帧之间的每个像素的运动位置。这些方法被称为差分,因为它们基于图像信号的局部泰勒级数近似; 也就是说,它们使用关于空间和时间坐标的偏导数。和稀疏光流相比,转载 2020-11-10 09:54:43 · 1881 阅读 · 0 评论 -
【转载】OpenCV-Python系列之稀疏光流(五十九)
之前介绍的两种算法对于视频中的跟踪而言仍然有一定的局限性。这次我们来讨论一种光流估计的方法用于进行目标跟踪。光流是物体或者摄像头的运动导致的两个连续帧之间的图像对象的视觉运动的模式。它是一个向量场,每个向量是一个位移矢量,显示了从第一帧到第二帧的点的移动,如图:它显示了一个球在5个连续帧里的移动。箭头显示了它的位移矢量。光流在很多领域有应用:·移动构建·视频压缩·视频稳定光流在很多假设下有效:1.物体像素强度在连续帧之间不变化2.邻居像素有相似运动考虑第一帧里的一个像素I(x转载 2020-11-09 14:58:12 · 694 阅读 · 0 评论 -
【转载】OpenCV-Python系列之Camshift算法(五十八)
上一个教程中我们介绍了一个视频跟踪的算法,但是通过实验我们发现,在视频或者是摄像头当中,如果被追踪的物体迎面过来,由于****效果,物体会放大,之前设置好的窗口区域大小会不合适。OpenCV实现了一个Camshift算法,首先使用meanshift算法找到目标,然后调整窗口大小,而且还会计算目标对象的的最佳外接圆的角度,并调整窗口。并使用调整后的窗口对物体继续追踪。使用方法与meanShift算法一样,不过返回的是一个带有旋转角度的矩形。Camshift原理camshift利用目标的颜色直方图模型将转载 2020-11-06 13:50:17 · 639 阅读 · 0 评论 -
【转载】OpenCV-Python系列之Meanshift算法(五十七)
之前我们就已经用过OpenCV中的特征检测进行过目标跟踪,这次我们将介绍一种算法,用来寻找和追踪视频中的目标物体。Meanshift算法:meanshift算法的原理很简单。假设你有一堆点集,例如直方图反向投影得到的点集。还有一个小的窗口,这个窗口可能是圆形的,现在要移动这个窗口到点集密度最大的区域当中。如下图:最开始的窗口是蓝色圆环的区域,命名为C1。蓝色圆环的重音用一个蓝色的矩形标注,命名为C1_o。然而,我们发现在这个窗口当中所有点的点集构成的质心在蓝色圆形点处。而且,圆环的型心和质心并转载 2020-11-05 10:23:36 · 427 阅读 · 0 评论 -
【转载】OpenCV-Python系列之背景分离(五十六)
从本次教程开始,我们进入新的篇章,之前一直在讨论OpenCV的特征部分,这次我们来讨论OpenCV中的背景分离,又称背景减法模型。**背景分离(BS)**是一种通过使用静态相机来生成前景掩码(即包含属于场景中的移动对象像素的二进制图像)的常用技术。顾名思义,BS计算前景掩码,在当前帧与背景模型之间执行减法运算,其中包含场景的静态部分,或者更一般而言,考虑到所观察场景的特征,可以将其视为背景的所有内容。背景建模包括两个主要步骤:1 背景初始化;2. 背景更新。初步转载 2020-11-04 10:14:29 · 1535 阅读 · 0 评论 -
【转载】OpenCV-Python系列之单应性查找对象实战篇(五十五)
之前我们讨论到cv2.findHomography()函数里有四个算法,这次我们来简述最后两个算法。LMEDSLMEDS又称最小中值平方法,LMedS的经典步骤是:随机采样计算模型参数计算相对模型的点集偏差err,并求出偏差中值Med(err)迭代2. 3.步直至获得符合阈值的最优解:Med(err)最小精确优化模型参数(LM算法迭代优化)LMedS的函数接口 参照OpenCV来说主要需要2-3个参数(第三个不是必须的)1.置信度confidence:设置之后代表R转载 2020-11-02 10:15:42 · 735 阅读 · 0 评论 -
【转载】OpenCV-Python系列之单应性查找对象理论篇(五十四)
注意:本教程中将涉及到机器学习的一些概念,但不进行过多的详述。我们在上一个教程中所提及到的FLANN算法就属于单应性算法,先解释一下单应性,在计算机视觉中:平面的单应性被定义为从一个平面到另一个平面的投影映射。比如,一个二维平面上的点映射到摄像机成像仪上的映射就是平面单应性的例子。之前我们使用一个查询图像,在其中找到一些 特征点(关键点),我们又在另一幅图像中也找到了一些特征点,最后对这两幅 图像之间的特征点进行匹配。简单来说就是:我们在一张杂乱的图像中找到了 一个对象(的某些部分)的位置。这些信息足以转载 2020-10-30 10:23:15 · 223 阅读 · 0 评论 -
【转载】OpenCV-Python系列之特征匹配(五十三)
之前我们讨论过了诸多的特征检测算法,这次我们来讨论如何运用相关的方法进行特征匹配。本次教程完全为实战教程,没有相关的算法原理介绍,大家可以轻松一下了。蛮力匹配(ORB匹配)Brute-Force匹配非常简单,首先在第一幅图像中选择一个关键点然后依次与第二幅图像的每个关键点进行(改变)距离测试,最后返回距离最近的关键点。对于BF匹配器,首先我们必须使用cv2.BFMatcher()创建BFMatcher对象。它需要两个可选的参数。1.第一个是normType,它指定要使用的距离测量,或在其他情况下,转载 2020-10-29 10:52:45 · 806 阅读 · 0 评论 -
【转载】OpenCV-Python系列之FAST算法(五十二)
我们已经学习带走几个特征检测器,它们都really good , 但是从实时的角度来说,它们的速度还不够快.作为解决方案,**FAST(加速段测试的特征)**算法由Edward Rosten和Tom Drummond在2006年的论文“Machine learning for high-speed corner detection”中提出(后来在2010年修订)。FAST 全称 Features from accelerated segment test,一种用于角点检测的算法,该算法的原理是取图像中检测转载 2020-10-28 09:48:35 · 259 阅读 · 0 评论 -
【转载】OpenCV-Python系列之ORB算法(五十一)
ORB是2011年ICCV上作者Rublee所提出,主要针对目前主流的SIFT或者SURF等算法的实时性进行改进。当然在实时性大为提升的基础上,匹配性能也在一定程度较SIFT与SURF算法降低。但是,在图像Two Views匹配对之间变换关系较小时,能够匹配性能逼近SIFT算法,同时计算耗时极大降低。ORB算法实时性在移动端设备上提供很好的应用,当下比较流行SLAM中采用较多的ORB-SLAM算法主要就是青睐于ORB算法实时性同时匹配精度并不差。论文对ORB算法主要贡献如下:1、 在FAST角点算子快转载 2020-10-27 09:56:25 · 935 阅读 · 0 评论 -
【转载】OpenCV-Python系列之BRIEF算法(五十)
之前讨论过的SIFT算法以及SURF算法由于受到了专利的保护,在高版本的OpenCV中是没法使用的,这就有些强人所难了,但今天我们介绍一种算法,不仅更加简单,而且是免费使用的。原理在SIFT算法使用128维的描述符,因为使用float类型描述,所以需要512字节的内存。在SURF算法中,以64维描述符来计算,至少需要256字节的内存。在创建一个含有数千个特征的向量会消耗大量的内存,这种情况在资源的有限的设备上不实用,尤其是嵌入式设备。 此外,它们计算时间也非常漫长。但是在实际的匹配过程中,不是所有转载 2020-10-26 09:51:44 · 453 阅读 · 0 评论 -
【转载】OpenCV-Python系列之SURF算法(四十九)
我们在上个教程讨论了SIFT算法用于检测特征点,SIFT算法对旋转、尺度缩放、亮度变化等保持不变性,对视角变换、仿射变化、噪声也保持一定程度的稳定性,是一种非常优秀的局部特征描述算法。但是其实时性相对不高。SURF(Speeded Up Robust Features)算法改进了特征了提取和描述方式,用一种更为高效的方式完成特征点的提取和描述。SURF算法原理SURF特征检测的步骤1.尺度空间的极值检测:搜索所有尺度空间上的图像,通过Hessian来识别潜在的对尺度和选择不变的兴趣点。2.特征转载 2020-10-23 10:03:33 · 986 阅读 · 0 评论 -
【转载】OpenCV-Python系列之SIFT尺度不变特征变换二(四十八)
我们在上一个教程中谈到SIFT总共有四个步骤,之前已经讨论了一部分,今天我们将结束这一部分,我们现在接着上一个教程继续。删除不好的极值点(特征点)通过比较检测得到的DoG的局部极值点实在离散的空间搜索得到的,由于离散空间是对连续空间采样得到的结果,因此在离散空间找到的极值点不一定是真正意义上的极值点,因此要设法将不满足条件的点剔除掉。可以通过尺度空间DoG函数进行曲线拟合寻找极值点,这一步的本质是去掉DoG局部曲率非常不对称的点。要剔除掉的不符合要求的点主要有两种:1.低对比度的特征点2.不稳定转载 2020-10-22 09:52:18 · 263 阅读 · 0 评论 -
【转载】OpenCV-Python系列之SIFT尺度不变特征变换一(四十七)
经过了之前教程的过渡,本次我们来讲解一个相当重要的变换——SIFT尺度不变特征变换,之所以称其为尺度不变,是因为其不受图片放缩以及旋转的影响。在前两个教程中,我们看到了一些像Harris这样的拐角检测器。它们是旋转不变的,这意味着即使图像旋转了,我们也可以找到相同的角。很明显,因为转角在旋转的图像中也仍然是转角。但是缩放呢?如果缩放图像,则拐角可能不是角。例如,检查下面的简单图像。在同一窗口中放大小窗口中小图像中的拐角时,该角是平坦的,因此,Harris拐角不是尺度不变的。因此,在2004年,不列颠哥转载 2020-10-21 09:43:38 · 363 阅读 · 1 评论 -
【转载】OpenCV-Python系列之Shi—tomasi拐角检测(四十六)
在上一个教程中,我们看到了Harris Corner Detector。1994年下半年,J。Shi和C. Tomasi在他们的论文《有益于跟踪的特征》中做了一个小修改,与Harris Harris Detector相比,显示了更好的结果。哈里斯角落探测器由下式给出:取而代之的是,史托马西提出:如果大于阈值,则将其视为拐角。如果像在Harris Corner Detector中那样在image.png空间中绘制它,则会得到如下图像:从图中可以看出,只有当两个值都大于最小值时,才将其视为拐角,也就转载 2020-10-20 10:07:30 · 449 阅读 · 0 评论 -
【转载】OpenCV-Python系列之哈里斯角检测(四十五)
我们在上次简述了OpenCV的特征基础原理,本次我们将步入实战部分,开始进行特征的初阶检测。原理在上一个教程中,我们知道了角点是图像中向任意方向发生改变时,都引起图像强烈变动的区域。Chris Harris 和 Mike Stephens 在他们1988年的论文 A Combined Corner and Edge Detector 中,做了早期的尝试,尝试找出这些角点。因此现在这个算法被称为哈里斯角点检测。他把这个简单的想法变成了数学的形式。它基本上求出了位移(u,v)在各个方向上的强度差,这表示如下转载 2020-10-19 11:22:30 · 251 阅读 · 0 评论