2020-04-30 12:29:00

全文共2475字,预计学习时长8分钟

图源:unsplash

图像识别、对象跟踪、多标签分类……这些概念你一定不陌生,如今计算机视觉(CV)已成为人工智能的一项重要应用。本文将引导你完成搭建计算机视觉系统的一些主要步骤。

计算机视觉系统的标准工作流程是:

· 一组图像进入系统。

· 为了对这些图像进行预处理并提取特征,使用特征提取器。

· 机器学习系统利用提取的特征来训练模型,并做出预测。

下面将简要介绍数据可能在这三个不同步骤中的一些主要过程。

图像进入系统

在尝试实现计算机视觉系统时,需要考虑两个主要组件:图像采集硬件和图像处理软件。构建计算机视觉系统要满足的一个主要要求是测试其鲁棒性。

实际上,系统应该能够适应环境变化(例如光源、方向、缩放比例的变化),并能够重复执行其设计任务。为了满足这些要求,可能有必要对系统的硬件或软件进行某种形式的约束(例如,远程控制光照环境)。

图源:unsplash

从硬件设备获取图像后,可以使用多种方法在软件系统中以数字方式表示颜色(颜色空间)。两种最著名的颜色空间是 RGB(红色、绿色、蓝色)和 HSV(色调、饱和度、值)。使用 HSV 颜色空间的一个主要优点是:仅考虑 HS 分量,就可以使系统照明保持不变(如下图所示)。

RGB 和 HSV 色彩空间

特征提取器

图像预处理

一旦图像进入系统并使用颜色空间表示,便可以在图像上应用不同的运算符以改善其表示情况:

1.点类运算符:使用图像中的所有点来创建原始图像的转换版本(以便在不更改其内容的情况下明确显示图像中的内容)。点类运算符的一些示例:强度归一化,直方图均衡化和阈值化。通常使用点类运算符来更好地可视化人类视觉图像,但这不一定为计算机视觉系统提供任何优势。

2.组类运算符:在这种情况下,从原始图像中获取一组点,以便在图像的转换版本中创建一个点。这种类型的操作通常通过使用卷积来完成。为了获得转换后的结果,可以使用不同类型的内核与图像进行卷积(如下图所示)。

一些例子是:直接平均、高斯平均和中值滤波器。结果,对图像进行卷积运算可以减少图像中的噪声并改善其平滑度(尽管这也会导致图像变得稍微模糊)。由于使用一组点来在新图像中创建单个新点,因此新图像的尺寸将必然小于原始图像的尺寸。

解决此问题的其中一种方法是应用零填充(将像素值设置为零)或通过在图像的边界使用较小的模板。使用卷积的一大主要限制是在处理大模板大小时其执行速度,对此问题的一种可行解决方案是改为使用傅立叶变换。

内核卷积

一旦对图像进行了预处理,便可以应用更高级的技术,以尝试通过使用一阶边缘检测(例如 Prewitt 算子,Sobel 算子,Canny 边缘检测器)和霍夫变换等方法来提取图像的边缘和形状。

特征提取

对图像进行预处理后,可以使用特征提取器从图像中提取四种主要类型的特征形态:

· 全局特征:将整个图像作为一个整体进行分析,然后从特征提取器中提取单个特征向量。全局特征的一个简单例子可以是合并像素值的直方图。

· 基于区域的特征:将图像分割为不同的区域(例如,使用阈值或 K-Means 聚类等技术,然后使用连通域将其连接为片段),然后从每个区域中提取特征。可以通过使用区域和边界描述技术(例如“矩”和“链码”)来提取特征。

· 基于网格或基于块的特征:将图像分为不同的块,并从每个不同的块中提取特征。为了从图像块中提取特征而使用的一种主要技术是密集 SIFT(尺度不变特征转换)。这种类型的功能通常用于训练机器学习模型。

· 局部特征:在图像中检测到多个单个兴趣点,并通过分析邻近兴趣点的像素来提取特征。可以从图像中提取的兴趣点的两种主要类型是角点和斑点,可以使用诸如 Harris&Stephens 角点检测算法和高斯拉普拉斯算子等方法来提取它们。

最后,可以使用诸如SIFT(尺度不变特征转换)之类的技术从检测到的兴趣点中提取特征。通常使用局部特征来匹配图像以构建全景图/ 3D重建或从数据库中检索图像。

图源:unsplash

一旦提取了一组判别特征,就可以使用它们来训练机器学习模型进行推理。使用OpenCV之类的库可以轻松地在 Python中应用功能描述符。

机器学习

在计算机视觉中用于对图像进行分类的一个主要概念是视觉词袋模型(BoVW)。为了构造视觉词袋模型,首先需要通过从一组图像中提取所有特征(例如,使用基于网格的特征或局部特征)来创建词汇表。

接下来,可以计算提取的特征在图像中出现的次数,并根据结果构建频率直方图。使用频率直方图作为基本模板,最终可以通过比较图像的直方图来根据图像是否属于同一类进行分类。

图源:unsplash

此过程可以概括为以下几个步骤:

1.首先通过使用特征提取算法(例如 SIFT 和 Dense SIFT)从图像数据集中提取不同的特征来构建词汇表。

2.其次,使用 K-Means 或 DBSCAN 等算法对词汇表中的所有特征进行聚类,并使用聚类质心来总结数据分布。

3.最后,可以通过计算词汇中不同特征出现在图像中的次数从每个图像构建频率直方图。

然后,通过对要分类的每个图像重复相同的过程,然后使用任意分类算法,找出词汇表中哪个图像与测试图像最相似,可以对新图像进行分类。

视觉词袋模型

如今,由于创建了诸如卷积神经网络(CNN)和递归人工神经网络(RCNN)的人工神经网络体系结构,可以为计算机视觉提出一个替代的工作流程。

计算机视觉工作流程

在这种情况下,深度学习算法结合了计算机视觉工作流程的特征提取和分类步骤。当使用卷积神经网络时,神经网络的每一层在向密集层分类器提供特征向量之前,在其描述中应用不同的特征提取技术(例如,第1层检测边缘,第2层发现图像中的形状,第3层分割图像等)。

图源:unsplash

不止于此,机器学习在计算机视觉中的进一步应用包括多标签分类和对象识别等领域。多标签分类中将构建一个模型,该模型能够正确识别图像中有多少个对象,以及它们属于哪个类。而在对象识别中,通过识别图像中不同对象的位置,将进一步发展这一概念。

可以说,计算机视觉中的机器学习,未来可期。

计算机视觉系统怎样剖析“看到”的一切?相关推荐

  1. 计算机视觉系统中图像究竟经历了哪些“折磨”

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 如今,计算机视觉(CV)已成为人工智能的主要应用之一(例如, ...

  2. 网易云信自研大规模传输网核心系统架构剖析

    随着边缘计算及RTC技术的兴起,业务服务器的边缘化可以带来大量收益:一方面就近接入可以优化客户端上下行质量,另一方面边缘节点可以大幅降低带宽成本.但如何保证相隔千山万水的边缘服务器之间的网络传输质量成 ...

  3. 尴尬!OpenAI惊现大漏洞,一张手写纸条竟瞒过计算机视觉系统

    作者 | Carol 出品 | CSDN(ID:CSDNnews) 第一反应:这字是什么颜色? 正确答案:这两个字的颜色是黄色. 有没有第一反应是"红色"的小伙伴?恭喜你,你阅读文 ...

  4. 微信 日志服务器 并发大,微信高性能线上日志系统xlog剖析

    微信高性能线上日志系统xlog剖析 做移动开发的同学经常会遇到一个头疼的问题,就是当用户反馈一些问题,又比较冷僻难以复现的时候(不是Crash),常常就会陷入一筹莫展的境地.因此,很多人就研发了相关的 ...

  5. 论文整理——用于跟踪散养猪的实时计算机视觉系统的开发

    论文简介 论文中文翻译:<用于跟踪散养猪的实时计算机视觉系统的开发> 论文名称:<Development of a real-time computer vision system ...

  6. 计算机视觉在小机器人中应用,计算机视觉系统在工业机器人上的应用研究.doc...

    计算机视觉系统在工业机器人上的应用研究.doc 计算机视觉系统在工业机器人上的应用研究 摘要:目前,工业机器人广泛适用于工业生产中,在工作人员的指引操作下,可以完成许多的指令,但是机器人没有感知外界的 ...

  7. 汇总 |计算机视觉系统学习资料下载

    微信公众号推荐 关注公众号 后台回复 「资料」,即可下载 计算机视觉干货资料,涉及相机标定.三维重建. 立体视觉.SLAM.深度学习.点云后处理.姿态估计.多视图几何.多传感器融合等方向 [计算机视觉 ...

  8. 计算机视觉系统学习书籍/综述汇总

    计算机视觉入门的一些综述类文章和经典pdf书籍,[3D视觉工坊]按照不同领域帮大家划分了下,涉及图像处理.计算机视觉.自动驾驶.立体视觉.深度估计.姿态估计.OpenCV.SLAM.点云处理.多视图几 ...

  9. 自动驾驶行业观察 | 停车不再难,L2到L4的泊车辅助系统技术剖析

    作者 | 陈光 来源 | 自动驾驶干货铺(ID:IntelligentDrive) [导读]在汽车智能化的浪潮中,车载传感器发展迅速,越来越多搭载了先进传感器的汽车进入了我们的视野.比如能够在高速公路 ...

最新文章

  1. ScrollView和ListView冲突解决
  2. OpenCV cv :: Mat的串行输出功能的实例(附完整代码)
  3. [转]我们为什么要用vue,他解决了什么问题,如何使用它?
  4. POJ1275-Cashier Employment【差分约束系统】
  5. php实现excel单元格合并,字体加粗居中等操作
  6. python进程池一个进程卡住_python进程池,每个进程都有超时
  7. arduino步进电机程序库_Arduino基础入门篇27—步进电机驱动库的使用
  8. Eclipse 常用快捷键及使用技巧!
  9. 使用Python列表方法模拟约瑟夫环问题
  10. HTML和CSS 基本要点必看
  11. 用户组培训资料和资源
  12. opencv访问图像中每个像素的值
  13. 超详细!JDK 8 下载、安装和环境配置(macOS 和 Windows 版本)
  14. 22_ue4进阶末日生存游戏开发[EQS]
  15. 如何将docx文本转换成使用微信小程序rich-text能编译的格式
  16. 番茄时间管理——规则
  17. Spring Boot 注解原理,自动装配原理,图文并茂,万字长文!
  18. 从“心”认识Vue(五):父组件与子组件
  19. 鲍尔默:我当CEO时,微软对硬件研发投入真不够
  20. 一张图理解非对称加密解密过程

热门文章

  1. 微型计算机步进电机控制,步进电机的微型计算机控制
  2. LinkedList方法(可实现栈和队列)
  3. jupyter notebook修改默认工作目录
  4. Java Synchronized获得类的锁和获得对象的锁有什么区别呢?
  5. 《强化学习周刊》第8期:强化学习应用之自然语言处理
  6. 斯坦福大学Christopher Manning:Transformer语言模型为什么能取得突破
  7. 传闻,Google曾用股票来换取他的数学研究
  8. 没办法,我必须干掉他们团队的 Leader
  9. 使用GitLab或者Github简单实用地将数据导入Colab的方法
  10. 理解神经网络,从简单的例子开始(2)使用python建立多层神经网络