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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值