自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(104)
  • 资源 (4)
  • 收藏
  • 关注

原创 应用DeepSORT实现目标跟踪

但在这里,我们不使用官方的代码,而使用第三方代码,其网址为https://github.com/levan92/deep_sort_realtime。orginal_ltwh、det_conf、det_class:分别表示目标边框信息、置信值和类型,这三个值都是由tracker.update_tracks传入系统的原始目标的信息,但此时已匹配上了目标ID。max_iou_distance:IoU的门控阈值,大于该值的关联会被忽略,默认值为0.7。n_init:在初始阶段轨迹被保留的帧数,默认值为3。

2023-10-08 17:41:19 877 5

原创 应用第三方ByteTrack实现目标跟踪

但吹毛求疵地说,官网的ByteTrack有一些不足:1、为了通用性及科研的要求,代码过于冗长,但这不利于集成到自己的程序中;输出参数为该帧的跟踪结果,前4个元素为目标边框的左上角和右下角坐标(其与boxes有所不同),第4个元素为跟踪ID,第5个元素为目标得分值,第6个元素为目标类型,第7个元素为boxes所对应的索引值。为此,我们把核心函数整合到一个名为track.py的文件内,并把其放入到mytrack的文件夹内,然后把该文件夹复制到当前目录下。我把track.py文件内的完整内容复制到本博文的后面。

2023-10-06 15:50:01 1063 5

原创 部署并应用ByteTrack实现目标跟踪

outputs表示目标检测器的输出,ByteTrack需要先进行目标检测,然后才能利用ByteTrack算法实现跟踪,outputs应为二维数组,第一维表示目标,第二维表示该目标的信息,其前四个元素为目标边框的左上角和右下角的坐标,第5个元素为该目标的得分值,一般我们可以为该值赋予目标的置信值。从中可以看出,我们共得到了4个目标跟踪结果,它们的ID分别为2、3、4和7,其中ID为2的目标在第1帧开始出现,28为当前帧数,即在第28帧时,我们使用了print(tracks)这个代码。默认值为False。

2023-10-02 17:27:57 2270 5

原创 编写自己的目标跟踪算法

函数set_id的作用就是为当前目标设置ID,它的输入变量是被设置目标ID的中心点坐标centerPt,返回的是该目标的ID号return_id。在这里,我们除了为目标标注ID外,还实现了另一个功能:绘制了该目标的运动轨迹,所以这里的坐标不仅仅是当前帧的坐标,还包括以前同一目标的坐标。由于我们已经把当前帧内出现的ID保存在了now_id内,所以我们只需要把id_history内的ID与now_id比较,将now_id内没有出现的ID从id_history内剔除掉即可。id_counter为目标ID的编号。

2023-09-20 19:44:40 330 1

原创 基于YOLOv8的目标跟踪——汽车跟踪和计数

因为我们这里应用的场景比较简单,所以我们只是设置了一条水平基准线,通过前后两帧同一辆车辆的坐标位置,可以判断出其行驶的方向,当越过基准线时,就计数一次。这是因为除了没有被统计进来的车辆(如,左上角和右上角的车辆)外,主要原因还是YOLOv8并没有完整的按顺序标记车辆ID,比如没有标记#6的车辆。在这里,我们不介绍任何原理性的内容,只以一个很简单的例子讲解如何应用YOLOv8进行目标跟踪,以及它所带来的一个附加功能——计数。目标跟踪针对的是视频处理,它是目标检测的更高级的应用。

2023-09-13 15:42:41 4861 18

原创 基于YOLO V8的车牌识别

十年前就想实现车牌识别这项任务,虽然当时这项技术就已较成熟(与现在的实现方法不同),但那时的我还具备这个能力。弹指一瞬间,没想到十年间人工智能技术已经发展到一个新的高度,图像识别早已不成问题,以ChapGPT为代表的生成式技术大行其道。写作、作曲、绘画等内容创作,甚至编程都可由计算机自动完成,这在以前只会出现在电影里。回到主题,正如上文提到的那样,图像识别经过十几年的发展,已经不再触不可及。基于各类预训练模型,通过简单的微调和迁移学习,就可以实现我们想要的各类图像分类、图像识别和图像分割。

2023-06-27 15:12:05 3543 4

原创 谷歌全景拼接出错之我见

最近,一篇关于使用谷歌AI全景拼接技术对照片进行拼接出错的新闻引爆了社交网络。这和我前段时间所研究的Opencv全景拼接技术有关,因此这篇新闻也引起了我的兴趣。事件的起因是Alex Harker和他的朋友在加拿大路易斯湖滑雪场滑雪时,拍了三张照片(如图1所示),一张有人物的,另两张为纯风景照,当用谷歌照片合成时,竟然出现了“山中巨人”般的效果(如图2所示)。图1 原始三张照片图

2018-01-26 20:10:35 5875 3

原创 Opencv2.4.9源码分析——Stitching(九)

9、Stitcher类图像拼接方法用到的算法较多,内容较复杂,可能对于一些人来说用起来过于繁琐,因此Opencv把拼接算法封装到了Stitcher类中,这样就不必理会拼接算法中的具体实现过程。下面我们就简单介绍一下Stitcher类中的一些常用的函数: 用系统缺省值创建图像拼接器stitcher:Stitcher Stitcher::createDefault(bool try

2018-01-06 16:15:59 11780 22

原创 Opencv2.4.9源码分析——Stitching(八)

8、完整的拼接程序 下面给出完整的拼接程序:#include "opencv2/core/core.hpp"#include "highgui.h"#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/features2d/features2d.hpp"#include "opencv2/nonfree/nonfree.

2018-01-04 08:17:04 11625 16

原创 Opencv2.4.9源码分析——Stitching(七)

7、融合7.1 原理在上一步中,虽然我们已经得到了接缝线,但如果只是简单的对接缝线的两侧选取不同的图像,那么对于重叠区域,在接缝线处的过度会出现不连贯的现象,在视觉上会显得有些突兀。因此我们还需要在接缝线两侧,对不同图像进行融合处理来克服上述不足之处。应用于图像拼接的融合算法有两种常用的方法:羽化和多频段融合。羽化的原理是对边界进行平滑虚化,通过渐变的方法达到自然衔接的效果。在应用于图

2018-01-03 14:00:13 12712 4

原创 Opencv2.4.9源码分析——Stitching(六)

6、寻找接缝线6.1 原理拼接图像的另一个重要的步骤是找到图像重叠部分内的一条接缝线,该接缝是重叠部分最相似的像素的连线。当确定了接缝线后,在重叠部分,线的一侧只选择该侧的图像部分,线的另一侧只选择这一侧的图像部分,而不是把重叠部分的两幅图像简单融合起来。这么做的目的可以避免图像的模糊及伪像。目前,常用的寻找接缝线的方法有三种:逐点法、动态规划法和图割法。逐点法比较简单,它的原理就

2018-01-01 11:27:40 13744 5

原创 Opencv2.4.9源码分析——Stitching(五)

5、曝光补偿5.1 原理即使通过几何投影,图像之间可以做到很好的拼接,但如果不同图像之间有不同的曝光程度,那么拼接图像中的重叠部分也会出现明显的边缘,这样就使图像看起来十分不自然。因此,我们还需要对每幅图像进行曝光补偿,来使所有图像具有相同的曝光程度。目前,常用的曝光补偿方法有增益补偿和分块补偿这两种方法。增益补偿就是为每幅图像赋予一个增益系数,使重叠部分的图像强度相等或相似。它可以利

2017-12-24 10:25:50 16193 7

原创 Opencv2.4.9源码分析——Stitching(四)

4、图像投影变换4.1 原理前文我们已经说过,每幅图像是相机在不同角度下拍摄得到的,它们并不在同一个投影平面上,如果对重叠部分直接进行拼接,则会破坏实际场景的视觉一致性。所以我们需要在拼接之前,对图像进行投影变换,即对图像进行扭曲变形。设图像中某像素点的二维坐标为(x, y),它所对应的世界坐标为(X, Y, Z),两者之间的关系为:(70)式中,R为旋转矩阵,K为相机的内

2017-12-18 09:46:12 15449 13

原创 Opencv2.4.9源码分析——Stitching(三)

3、相机参数评估3.1 原理相机参数的评估也称为相机定标。要想理解这部分内容,首先应该从成像原理开始讲起。图6 小孔成像原理从图6可以看出,真实物体通过小孔映射到成像平面上,小孔到成像平面的距离称为焦距f。在成像平面上的图像是镜像倒立的,所以为了研究方便,在小孔和物体之间定义一个虚拟成像平面(在后面,我们把该平面也称为成像平面),它与小孔的距离也为焦距,则两个成像平面的

2017-12-15 09:34:05 23851 21

原创 Opencv2.4.9源码分析——Stitching(二)

2、计算单应矩阵2.1 原理在得到了图像特征点以后,我们就可以根据这些特征点,实现图像匹配,即得到重叠区域。而要把多幅图像拼接成一幅图像,就需要以某幅图像为基准,把其他图像映射到该图像所在的平面。映射的关键所在就是根据重叠区域的特征点计算图像间的单应矩阵。我们可以通过最近邻算法(K-NN,这里的K表示最近邻特征点的数量)得到与图像A中的某一特征点a最相似的其他任意一幅图像B的K个特征点

2017-12-14 10:33:26 19451 17

原创 Opencv2.4.9源码分析——Stitching(一)

相机镜头所呈现出的景物要比人类的视觉系统所看到的景物要狭小得多,因此一幅图像不可能捕获到我们所看到的整个景物。全景图像拼接给出了这个问题的解决办法,它是把图像间重叠部分拿出来拼接起来,从而得到一幅更大的图像。这种算法也可以用于把一幅图像插入到另一幅图像中。图1 图像拼接执行过程及方法要想完成图像拼接,所要用到的算法较多,Opencv把这些算法用一张图呈现了处理,如图1所示。下面我们

2017-12-14 09:08:13 24669 6

原创 Opencv2.4.9源码分析——Cascade Classification(三)

前两篇文章分别介绍了级联分类器的原理和源码解析,下面我们给出一个具体的应用实例。 下面我们以车牌识别为例,具体讲解OpenCV的级联分类器的用法。在这里我们只对蓝底白字的普通车牌进行识别判断,对于其他车牌不在考虑范围内。而且车牌是正面照,略微倾斜可以,倾斜程度太大也是不在识别范围内的。我们通过不同渠道共收集了1545幅符合要求的带有车牌图像的照片(很遗憾,我只能得到这么多车牌照片,

2017-01-13 21:32:45 9829 10

原创 Opencv2.4.9源码分析——Cascade Classification(二)

上一篇文章我们介绍了级联分类器的原理,下面我们给出级联分类器的源码分析。训练级联分类器的源码在opencv/sources/app/traincascade目录下。首先我们给出级联分类器的特征类型的相关类和函数。CvHaarFeatureParams、CvLBPFeatureParams和CvHOGFeatureParams分别表示HAAR状特征、LBP特征和HOG特征的参数类

2017-01-09 19:09:23 6494

原创 Opencv2.4.9源码分析——Cascade Classification(一)

我把级联分类器分为三部分内容介绍,第一部分内容是原理。物体识别,尤其是人脸识别,是近二、三十年里计算机视觉领域一个热门的课题。它的应用范围极广,目前成熟的算法也较多。OpenCV也集成了一个物体识别的算法,它主要是基于Viola和Jones这两个人于2001年提出的震惊业界的Viola & Jones算法,该算法最初是用于人脸识别,但在对其它刚性物体的识别上效果也极佳。Viol

2017-01-04 09:16:36 8158 14

原创 Opencv2.4.9源码分析——Neural Networks

一、原理神经网络(Neural Networks)是一种模仿生物神经系统的机器学习算法。该算法的提出最早可追述至上个世纪四十年代,这几乎与电子计算机的历史同步。但它的发展并非一帆风顺,也经历了初创阶段—黄金阶段—停滞阶段—复兴阶段,直到目前的高速发展阶段。年初由Google公司开发的神经网络围棋——AlphaGo击败世界围棋冠军李世石,使神经网络技术更是受到世人的注目,因为它的意义要远大于19

2016-10-07 09:35:08 8387 15

原创 Opencv2.4.9源码分析——Expectation Maximization

一、原理 期望极大算法(EM,Expectation Maximization)是一种能够得到极大似然参数估计的迭代方法。虽然EM算法在不同的领域被更早的提出,但它是由Dempster等人于1977年被正式命名并给出解释。对于一个除了拥有未知参数和可观测变量外,还包含隐含变量的统计模型来说,是无法用极大似然方法直接得到参数的,这是因为我们不能像极大似然法那样,同时对未知参数和隐含变量求

2016-09-02 20:10:59 5403

原创 Opencv2.4.9源码分析——Extremely randomized trees

一、原理 ET或Extra-Trees(Extremely randomized trees,极端随机树)是由PierreGeurts等人于2006年提出。该算法与随机森林算法十分相似,都是由许多决策树构成。但该算法与随机森林有两点主要的区别:1、随机森林应用的是Bagging模型,而ET是使用所有的训练样本得到每棵决策树,也就是每棵决策树应用的是相同的全部训练样本;2、随机森林是

2016-06-12 21:04:38 10679 9

原创 Opencv2.4.9源码分析——Random Trees

一、原理 随机森林(Random Forest)的思想最早是由Ho于1995年首次提出,后来Breiman完整系统的发展了该算法,并命名为随机森林,而且他和他的博士学生兼同事Cutler把Random Forest注册成了商标,这可能也是Opencv把该算法命名为Random Trees的原因吧。一片森林是由许多棵树木组成,森林中的每棵树可以说是彼此不相关,也就是说每棵树木的生长完全是

2016-06-03 17:01:28 9079 10

原创 Opencv2.4.9源码分析——Gradient Boosted Trees

一、原理 梯度提升树(GBT,Gradient Boosted Trees,或称为梯度提升决策树)算法是由Friedman于1999年首次完整的提出,该算法可以实现回归、分类和排序。GBT的优点是特征属性无需进行归一化处理,预测速度快,可以应用不同的损失函数等。从它的名字就可以看出,GBT包括三个机器学习的优化算法:决策树方法、提升方法和梯度下降法。前两种算法在我以前的文章中都有详细的

2016-05-20 15:28:16 9324 8

原创 OpenCV2.4.9源码分析——Support Vector Machines

引言本文共分为三个部分,第一个部分介绍SVM的原理,我们全面介绍了5中常用的SVM算法:C-SVC、ν-SVC、单类SVM、ε-SVR和ν-SVR,其中C-SVC和ν-SVC不仅介绍了处理两类分类问题的情况,还介绍处理多类问题的情况。在具体求解SVM过程中,我们介绍了SMO算法和广义SMO算法。第二个部分我们给出了OpenCV中SVM程序的详细注解。第三个部分我们给出了一个基于OpenCV的S

2016-05-02 20:14:06 10286 5

原创 Opencv2.4.9源码分析——K-Nearest Neighbors

一、原理 K近邻算法(KNN,K-NearestNeighbors)是一种非常简单的机器学习方法,它既可以处理分类问题,也可以处理回归问题,而且它的执行效果非常好。KNN是一种懒惰学习算法(lazy learningalgorithm)。所谓懒惰算法指的是,直到有了新的测试样本,该算法才开始依据训练样本进行样本的预测处理工作,也就是说该算法事先不会对训练样本进行任何的处理,只会“懒散”

2016-02-29 11:21:31 6946 5

原创 Opencv2.4.9源码分析——Normal Bayes Classifier

一、原理 OpenCV实现的贝叶斯分类器不是我们所熟悉的朴素贝叶斯分类器(Naïve Bayes Classifier),而是正态贝叶斯分类器(Normal Bayes Classifier),两者虽然英文名称很相似,但它们是不同的贝叶斯分类器。前者在使用上有一个限制条件,那就是变量的特征之间要相互独立,而后者没有这个苛刻的条件,因此它的适用范围更广。为了保持理论的系统性和完整性,我们还是

2016-01-31 16:26:11 5316 1

原创 Opencv2.4.9源码分析——Boosting

一、原理 AdaBoost(Adaptive Boosting,自适应提升)算法是由来自AT&T实验室的Freund和Schapire于1995年首次提出,该算法解决了早期Boosting算法的一些实际执行难题,而且该算法可以作为一种从一系列弱分类器中产生一个强分类器的通用方法。正由于AdaBoost算法的优异性能,Freund和Schapire因此获得了2003年度的哥德尔奖(Gödel

2016-01-18 14:51:50 9081 10

原创 Opencv2.4.9源码分析——Decision Trees

一、原理 决策树是一种非参数的监督学习方法,它主要用于分类和回归。决策树的目的是构造一种模型,使之能够从样本数据的特征属性中,通过学习简单的决策规则——IF THEN规则,从而预测目标变量的值。图1 决策树例如,在某医院内,对因心脏病发作而入院治疗的患者,在住院的前24小时内,观测记录下来他们的19个特征属性——血压、年龄、以及其他17项可以综合判断病人状况的重要指标,

2016-01-12 13:42:39 10547 7

原创 Opencv2.4.9源码分析——HoughCircles

图形可以用一些参数进行表示,标准霍夫变换的原理就是把图像空间转换成参数空间(即霍夫空间),例如霍夫变换的直线检测就是在距离-角度空间内进行检测。圆可以表示成:(x-a)2+(y-b)2=r2                  (1)其中a和b表示圆心坐标,r表示圆半径,因此霍夫变换的圆检测就是在这三个参数组成的三维空间内进行检测。原则上,霍夫变换可以检测任何形状。但复杂的形状需要的

2016-01-04 11:17:14 30440 33

原创 Opencv2.4.9源码分析——HoughLines

霍夫变换是一种特征提取技术。经典的霍夫变换能够识别出图像中的直线,后来又发展到能够识别出任意形状,但更常见的识别形状是圆和椭圆。函数HoughLines的作用就是能够检测出边缘图像中的直线。在直角坐标系下,直线被定义为:y = mx + b         (1)其中,m为斜率,b为与y轴的截距,只要确定了m和b,一条直线就可以被唯一地确定下来。如果用ρ0表示原点到该直线的代数距离,θ

2015-12-13 11:05:47 18169 17

原创 Opencv2.4.9源码分析——phaseCorrelate

相位相关法(phase correlate)可以用于检测两幅内容相同的图像之间的相对位移量。它是基于傅立叶变换的位移定理:一个平移过的函数的傅立叶变换仅仅是未平移函数的傅立叶变换与一个具有线性相位的指数因子的乘积,即空间域中的平移会造成频域中频谱的相移。它的公式定义为:设二维函数(图像)f(x,y)的傅立叶变换为F(u,v),即DFT[f(x,y)]=F(u,v),如果f(x,y)平移(a,b),

2015-12-03 11:10:05 17983 21

原创 Opencv2.4.9源码分析——DenseFeatureDetector

DenseFeatureDetector可以生成具有一定密度和规律分布的图像特征点,它主要用于3D VIZ。DenseFeatureDetector的原理是,把输入图像分割成大小相等的网格,每一个网格提取一个像素作为特征点。类似于图像尺度金字塔,该方法也可以生成不同层图像的特征点,每一层图像所分割的网格大小是不同的,即表示各层的尺度不同。 下面我们就来分析它

2015-04-22 18:58:14 5997

原创 Opencv2.4.9源码分析——SimpleBlobDetector

Opencv中提供了SimpleBlobDetector的特征点检测方法,正如它的名称,该算法使用最简单的方式来检测斑点类的特征点。下面我们就来分析一下该算法。首先通过一系列连续的阈值把输入的灰度图像转换为一个二值图像的集合,阈值范围为[T1,T2],步长为t,则所有阈值为:T1,T1+t,T1+2t,T1+3t,……,T2              (1)

2015-04-05 11:28:09 22694 2

原创 Opencv2.4.9源码分析——BRIEF

在嵌入式系统内,对图像进行实时匹配,这项任务给特征点的检测与描述提出了更高的要求。这不仅要求运算速度快,而且还要求占用更少的内存。SIFT和SURF方法性能优异,但它们在实时应用中就力不从心,一个主要的原因就是特征点的描述符结构较复杂,表现形式是第一描述符的维数较多,第二描述符采用浮点型的数据格式。维数多固然可以提高特征点的可区分性,但使描述符的生成和特征点的匹配的效率降低,另

2015-03-13 09:41:54 7655 8

原创 Opencv2.4.9源码分析——MSCR

前面我们介绍了MSER方法,但该方法不适用于对彩色图像的区域检测。为此,Forssen于2007年提出了针对彩色图像的最大稳定极值区域的检测方法——MSCR(Maximally Stable Colour Regions)。MSCR的检测方法是基于凝聚聚类(AgglomerativeClustering)算法,它把图像中的每个像素作为对象,通过某种相似度准则,依次逐层的进行

2015-01-27 10:51:24 6859 6

原创 Opencv2.4.9源码分析——SURF

SURF (Speeded Up Robust Features)是一种具有鲁棒性的局部特征检测算法,它首先由Herbert Bay等人于2006年提出,并在2008年进行了完善。其实该算法是Herbert Bay在博士期间的研究内容,并作为博士毕业论文的一部分发表。SURF算法的部分灵感来自于SIFT算法,但正如它的名字一样,该算法除了具有重复性高的检测器和可区分性好的描述符特点外,

2015-01-10 18:45:53 13461 17

原创 Opencv2.4.9源码分析——SIFT

SIFT(尺度不变特征变换,Scale-Invariant Feature Transform)是在计算机视觉领域中检测和描述图像中局部特征的算法,该算法于1999年被David Lowe提出,并于2004年进行了补充和完善。该算法应用很广,如目标识别,自动导航,图像拼接,三维建模,手势识别,视频跟踪等。不幸的是,该算法已经在美国申请了专利,专利拥有者为Lowe所在的加拿大不列颠哥伦比亚大...

2014-12-24 15:34:28 38500 149

原创 Opencv2.4.9源码分析——MSER

最大稳定极值区域(MSER-Maximally Stable Extremal Regions)可以用于图像的斑点区域检测。该算法最早是由Matas等人于2002年提出,它是基于分水岭的概念。MSER的基本原理是对一幅灰度图像(灰度值为0~255)取阈值进行二值化处理,阈值从0到255依次递增。阈值的递增类似于分水岭算法中的水面的上升,随着水面的上升,有一些较矮的丘陵会被淹没,如果从天空往下看

2014-11-03 16:10:08 55196 25

原创 Opencv2.4.9源码分析——FAST

FAST(Features fromaccelerated segment test)是一种角点检测方法,它可以用于特征点的提取,并完成跟踪和映射物体。FAST角点检测算法最初是由Edward Rosten和Tom Drummond提出,该算法最突出的优点是它的计算效率。正如它的缩写名字,它很快而且事实上它比其他著名的特征点提取方法(如SIFT,SUSAN,Harris)都要快。而且如果应用机器学

2014-10-20 15:47:11 19863 16

用于Opencv的车牌识别xml文件

cascade.xml用于opencv所需的车牌识别xml文件,该文件可以识别蓝底白字的普通车牌。该xml文件由本人生成,详细的内容请看我的博客:http://blog.csdn.net/zhaocj

2017-01-13

Opencv2.4.9源码分析——Support Vector Machines

本文档共分为三个部分,第一个部分介绍SVM的原理,我们全面介绍了5中常用的SVM算法:C-SVC、ν-SVC、单类SVM、ε-SVR和ν-SVR,其中C-SVC和ν-SVC不仅介绍了处理两类分类问题的情况,还介绍处理多类问题的情况。在具体求解SVM过程中,我们介绍了SMO算法和广义SMO算法。第二个部分我们给出了OpenCV中SVM程序的详细注解。第三个部分我们给出了一个基于OpenCV的SVM算法的简单应用实例。

2016-05-02

opencv2.4.9源码分析——SURF

详细介绍SURF算法,以及opencv的源码分析,并给出应用实例。

2015-01-10

opencv2.4.9源码分析——SIFT

详细介绍SIFT算法,opencv的SIFT源码分析,以及应用实例

2014-12-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除