热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

3d人脸识别算法opencv_硬核图像算法开讲啦

作者:刘刚来源:郑老师频道郑老师特意邀请了资深算法大牛来给咱们讲讲图像算法基础,也是咱们粉丝的小福利啦,下面我们就一起来学习

作者:刘刚

来源:郑老师频道

郑老师特意邀请了资深算法大牛来给咱们讲讲图像算法基础,也是咱们粉丝的小福利啦,下面我们就一起来学习吧。

以下内容为视频文字整理版。

---------------------------------------------

9548539ca22b3674787425003eecc2d6.png

应郑老师的要求,给大家分享一下图像处理的基础知识。讲的不好请大家谅解一下。

【图像处理领域】

首先讲下图像处理在哪些方面有应用。其实我们生活当中很多方面都用到图像处理。

我大概举例几个图片,其实这些图片只是冰山一角。

比如我知道这个人的位置,例如用空调,风扇的时候,我们就可以做智能送风。

比如康护,例如老人摔倒了或者家人摔倒了,我们可以进行姿态识别,可以进行识别并提醒

比如现在新冠病毒,我们可以进行一些肺部识别,识别出病灶。

还有一些工业生产领域的摄像头,例如摄像头有没有划痕,坏点,组装过程有没有异常,导致视野变小,或者颜色,畸变

还有一些3D测量领域里面,我们怎么分离去提取物体的高度。

总之,像人脸识别,美图秀秀,这些用得非常广,像photoshop这种很经典的工具,图像处理的算法特别多。

3bbd44fbc6a57f81c0d3c778192e7d51.png

【图像处理——基本工具】

我简单说下图像处理的工具。我说的是开发的工具,像美图秀秀,ps等这些也是一些图像处理的工具。这些工具是后台已经集成很多算法。比如图像做些去噪点,塑脸,平滑等的处理。

我这里讲的是我们用一些工具,也可以做一些算法。

图像算法工具:

1.Matlab,多用于学校实验室。有专门图像处理的库。

2.python,也很强大,和Matlab一样是脚本,也可以做到项目里面,生成动态链接库等。

3.openCV,也是强大的开源的图像处理库

4.Halcon,是工业级的,它的算法做了很多优化,编程方面做了很多工具,我们的算法可以从Halcon导出成代码。

5. VisionPro,也是可以直接导出算法,通过拖拽的方式集成到程序里面

Halcon,VisionPro 和NI-Vision都是收费的。

除了这些还有很多图像工具,医学里面很多工具像ITK,神经网络用的也很多,例如caffe,像深度学习方面,通过cnn去检测,识别。

3bbd44fbc6a57f81c0d3c778192e7d51.png

【Matlab——处理效果】

这里简单讲下Matlab。效果怎么样,我用Matlab简单尝试一下,验证一下哪个算法在实际中应用的比较好。

这里引脚,结合高度信息和灰度信息提取的引脚。其实这块引脚的高度和引脚高度是一样的。现在我们去掉噪声,得到信息再把噪声去掉。从算法里面,这个流程效果是比较好的,最后我们通过过滤,把引脚过滤出来。我们通过这个区域,把高度数据提取出来,取得他的平面度,大概是这样的一个思路。

4e50c60b8ceb70f7e3d08a66b5d51399.png

【Matlab图像处理——滤波器】

接下来我简单讲一下,这就是Matlab的脚本。

前面这里是我们设置运算卷积的形状。读取一副图片,这里是中值滤波。

中值滤波我大概简单给大家讲一下,这里是1个3*3的卷积,这个3*3的卷积和和我的一个图片做卷积的时候,得到的一个,

实际上是这个3*3的范围内,我取到一个值,做一个排序,这9个值做一个排序,然后我拿中间的那个值和这9个值做一个填充,那么我再进行划窗。

第2步我们再对这个区域进行一个处理,类似的我们叫做一个感兴趣的区域(ROI)吧,我对我感兴趣的区域才做图像处理,其他区域不做处理,或者屏蔽掉。

第3步是做阈值处理,我们所有图片做处理的时候,一般都使用灰度图片。实际上我们拍摄到的是3通道的图像,我们叫彩色图片(就是RGB图片)。一般我们把RGB的图像转换成灰色图像,把这个灰度图像转换到0~255这个范围,然后对这个图片进行二值化,二值化之后就变成只有0和1这两个值。这样我们就好处理了,比如是0的区域我们怎么处理,是1的区域我们怎么处理,它叫做二值化。那么二值化的时候,比如有个值100,那么在小于100的时候我就认为是黑色(认为是0),大于等于100的时候我就认为是白色(认为是1)。

第4步,这里有个开运算,图像处理里面比较常见的形态学运动,开运算以及闭运算。

第5步,最后是对二值图像进行中值滤波。

590af296068915b1b265deb0fa6874b8.png

【Matlab——自动阈值】

简单说下阈值处理的算法。其实我们每个人都有一套自己的算法,不管干任何事情的时候都有一套算法。只要把你的想法,转换成代码,他就是一个算法。比如我们去买菜或者去超市购物,我们想的是用最短的路径能买到所有的东西,我们买的时候肯定是有个路径的。这个跟我们常说的TSP,最短路由算法类似的。我们平时在家里做事也有这样,闭频处理的方法,我先做菜还是先做饭。我们每个人都是天生的智能算法的制造者。

我简单的说个自动阈值的方法。自动阈值的方法实际上来说就是提取一个图片,我先把图片进行二值化。比如这个图片直方图的分布是这样的,像这样比较常见的,比如我要提取他的前景和背景的时候,我找到一个峰值,找到中间的这样一个点的时候,比如这个是前景,这个是后景,那么我找到这两个峰值中间的这一个点的时候,那么我就可以把这个图片进行二值化。

二值化之后,我想要的目标可以提取出来。那么,就要找到这个阈值。比如这个是0,这是255,这个方法是这样的。首先,我们找到这个图片最大的灰度值。假如最大的灰度值在这里,最小的在这里,那么我先给他一个初始的灰度值(1/2倍的)来作为它的阈值,大于它的我就是认为是前景,小于它的就是背景。再把它的前景跟背景计算出来之后,计算出来之后再取他的二分之一,作为这个新的阈值,通过这个新的阈值再划分前景背景。

在求得这个阈值的时候跟初始化的阈值进行比较,如果这两个值不相等,那我就继续进行迭代,直到这个值不变了,就停止了。如果他们还不相同,我就把这个值赋值,每次进行迭代,直到一个平衡点。不变了,均值跟上次的分割点不变了,那么我们就找到了这个阈值。

我们还可以认为的给它一个阈值,比如我知道这个值认为的给它100。

这个就是Matlab处理图像的一个方式。我这里演示一下。

(Matlab演示中)这里参数跟之前设置的参数有点不同(演示过程文稿略)

adaa94b72ce238713e8d3a722105371f.png

【Python图像处理】

Python实际也是很好的图像处理工具。这个地方(例子)是Python用来提取图像的轮廓。我们可以引入python图像的包,叫做PIL,还有工具包pylab。

4de44972da16ee15247180dc90e8d86a.png

【Python+OpenCV】

另一个就是Python可以把opencv的包cv2,安装的方法:pip install opencv-python。

这个课程主要简单讲下入门的知识,我接着往下讲。

Opencv还有这个图像处理的网站不错,http://wiki.opencv.org.cn

【OpenCV简介】

(OpenCV教程演示)

OpenCV是基于C/C++语言的库,但是他有很多版本。有c#的,有python的版本,经过了优化,可以做实时图像处理,有很多接口可以调用。Opencv有很多模块,像深度学习,GPU的模块。

【OpenCV功能】

OpenCV有很多操作,比如有数据的操作,内存分配释放,图像复制,最多是矩阵的操作,但Matlab对矩阵操作更强。

还有支持一些数据结构,像链表,队列这些。

比如轮廓,轮廓可以看成点的链表,或者队列,都可以。

还有一些点的处理。

另外一些像结构分析的,连通域,比如说4连通,或者8连通。很多基础算法都是用4连通和8连通做出来的。

还有些摄像头标定。摄像头标定后,图片就像一把尺子一样,每个像素代表一毫米,那么我这里就可以做一些测量,拍个照片就知道有多远。

另外还可以做些运动跟踪,比如安防里面,可以做些目标跟踪,比如家里做些智能检测。

还有目标识别,像人脸识别,人脸检测,这些类型的。

还有些界面的用的比较少,还有图像标注。

Opencv的功能还是挺强大的。

20b2f72f1c867708a48a5e8f34faa8ce.png

【Debug VS Release】

很多程序都是可以做一些优化,64位会比32位的快,Release会比Debug的快。

【Halcon是个强大的图像处理工具】

Halcon这里的算子我大概简单讲一下,算法很强大的包括一维测量,二维,三维的,每个模块里面包括很多基础的算子。Halcon这个工具他的开发版和license比较贵,在大型的项目里用的比较多,他开发的效率比较高,比如说我做一个简单的字符识别,可能只要一个小时,就可以把这个项目demo做出来,再在这个基础上进行迭代完善。

它这里专门有个OCR模块,还有标定的模块也很方便Calibration模块,我们直接的在线的方式就可以采集跟标定。它还可以检测我们标定的精度,做得非常好,匹配也做得非常好Matching模块,匹配的精度也做得非常高。

32a8e3e8952680234e08c9c855e41d18.png

【提取圆方法过程】

这里简单讲一下,比如这个算子,在Halcon里面的时候这个算法,比如这里相当于是做了一个连通域。对Halcon来说他就相当于是一个锐减,我对这个图片这个圆做了边缘提取之后,得到了它的锐减。我只希望要这个圆形的区域,那么我就可以对这个圆形的边缘进行过滤,通过这个过滤我只保留像素在10~30的这个范围内。我过滤了这个区域后,我得到了想要的这个目标,得到目标后在算法里面怎么用了,我可以导出的方式,导出C++或者C#,放到工程,当然我们也可以直接api的方式调用halcon接口。

然后对每个参数进行调整,像这里每个函数有它的C++或者C#的版本,像这里读取图片的索贝尔的算子,还有那个转化,二值化图片,还有这个连通区域的提取,另外这个是对连通区域进行过滤。

a45d6b573a04ab90dbea1a70e387c68e.png

【Halcon输出代码如下】

这里我们刚才导出来的C++的代码。最后加了一个Union,通过Hough检测圆的算法得到检测到的圆。

今天大概就是讲这些,简单给大家讲下图像处理的应用领域和用到的工具,谢谢大家。

5bbaebb82e3bb5b7d93773b5683f584b.png

---------------------------------

作者:刘刚

文字编辑:郑虹

声明:如需转载请联系作者刘刚|ID(liugang9931706)

如果喜欢本文,请关注郑老师频道。

3b74060cdd22bd4bad9bcdea54b023a9.png

 成长,就是每天进步一点点。坚持哦,共勉!




推荐阅读
  • 计算机学报精选论文概览(2020-2022)
    本文汇总了2020年至2022年间《计算机学报》上发表的若干重要论文,旨在为即将投稿的研究者提供参考。 ... [详细]
  • 尤洋:夸父AI系统——大规模并行训练的深度学习解决方案
    自从AlexNet等模型在计算机视觉领域取得突破以来,深度学习技术迅速发展。近年来,随着BERT等大型模型的广泛应用,AI模型的规模持续扩大,对硬件提出了更高的要求。本文介绍了新加坡国立大学尤洋教授团队开发的夸父AI系统,旨在解决大规模模型训练中的并行计算挑战。 ... [详细]
  • 自动驾驶中的9种传感器融合算法
    来源丨AI修炼之路在自动驾驶汽车中,传感器融合是融合来自多个传感器数据的过程。该步骤在机器人技术中是强制性的,因为它提供了更高的可靠性、冗余性以及最终的 ... [详细]
  • 本文介绍了如何使用 Google Colab 的免费 GPU 资源进行深度学习应用开发。Google Colab 是一个无需配置即可使用的云端 Jupyter 笔记本环境,支持多种深度学习框架,并且提供免费的 GPU 计算资源。 ... [详细]
  • 在Windows系统中安装TensorFlow GPU版的详细指南与常见问题解决
    在Windows系统中安装TensorFlow GPU版是许多深度学习初学者面临的挑战。本文详细介绍了安装过程中的每一个步骤,并针对常见的问题提供了有效的解决方案。通过本文的指导,读者可以顺利地完成安装并避免常见的陷阱。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 利用50行Python代码打造经典游戏,既是休闲娱乐,也是编程学习的利器
    Free Python Games 是一个适合学生和初学者的项目,它不仅提供了高度的组织性和灵活性,还极大地激发了用户的探索与理解能力。 ... [详细]
  • 本文详细介绍了如何在 EasyUI 框架中实现 DataGrid 组件的分页功能,包括配置方法和常见问题的解决方案。 ... [详细]
  • 探索CNN的可视化技术
    神经网络的可视化在理论学习与实践应用中扮演着至关重要的角色。本文深入探讨了三种有效的CNN(卷积神经网络)可视化方法,旨在帮助读者更好地理解和优化模型。 ... [详细]
  • 本周三大青年学术分享会即将开启
    由雷锋网旗下的AI研习社主办,旨在促进AI领域的知识共享和技术交流。通过邀请来自学术界和工业界的专家进行在线分享,活动致力于搭建一个连接理论与实践的平台。 ... [详细]
  • 龙蜥社区开发者访谈:技术生涯的三次蜕变 | 第3期
    龙蜥社区的开发者们通过自己的实践和经验,推动着开源技术的发展。本期「龙蜥开发者说」聚焦于一位资深开发者的三次技术转型,分享他在龙蜥社区的成长故事。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 非计算机专业的朋友如何拿下多个Offer
    大家好,我是归辰。秋招结束后,我已顺利入职,并应公子龙的邀请,分享一些秋招面试的心得体会,希望能帮助到学弟学妹们,让他们在未来的面试中更加顺利。 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
author-avatar
花生vs布丁丁7_835
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有