计算机视觉简介


文档摘要

计算机视觉简介 计算机视觉是一门旨在让计算机从数字图像中获得高层次理解的学科。这个定义相当宽泛,因为“理解”可以有很多不同的含义,包括在图片中找到物体(目标检测)、理解正在发生的事情(事件检测)、用文本描述图片,或者重建场景的三维结构。还有一些与人类图像相关的特殊任务:年龄和情绪估计、面部检测和识别、以及三维姿态估计等。 课前测验 计算机视觉最简单的任务之一是图像分类。 计算机视觉通常被视为人工智能的一个分支。如今,大多数计算机视觉任务都是通过神经网络来解决的。在本节中,我们将学习用于计算机视觉的特殊类型的神经网络,即卷积神经网络。 然而,在将图像传递给神经网络之前,很多时候使用一些算法技术来增强图像是有意义的。

计算机视觉简介

计算机视觉是一门旨在让计算机从数字图像中获得高层次理解的学科。这个定义相当宽泛,因为“理解”可以有很多不同的含义,包括在图片中找到物体(目标检测)、理解正在发生的事情(事件检测)、用文本描述图片,或者重建场景的三维结构。还有一些与人类图像相关的特殊任务:年龄和情绪估计、面部检测和识别、以及三维姿态估计等。

课前测验

计算机视觉最简单的任务之一是图像分类

计算机视觉通常被视为人工智能的一个分支。如今,大多数计算机视觉任务都是通过神经网络来解决的。在本节中,我们将学习用于计算机视觉的特殊类型的神经网络,即卷积神经网络

然而,在将图像传递给神经网络之前,很多时候使用一些算法技术来增强图像是有意义的。

有几种Python库可用于图像处理:

  • imageio 可用于读取/写入不同格式的图像。它还支持ffmpeg,这是一种将视频帧转换为图像的有用工具。
  • Pillow(也称为PIL)功能更强大,并且还支持一些图像操作,如变形、调色板调整等。
  • OpenCV 是一个用C++编写的强大的图像处理库,已成为图像处理的默认标准。它有一个方便的Python接口。
  • dlib 是一个C++库,实现了许多机器学习算法,包括一些计算机视觉算法。它也有一个Python接口,可用于挑战性的任务,如面部和面部特征点检测。

OpenCV

OpenCV 被认为是图像处理的默认标准。它包含了许多有用的算法,这些算法是用C++实现的。你也可以从Python调用OpenCV。

学习OpenCV的好地方是this Learn OpenCV课程。在我们的课程中,我们的目标不是学习OpenCV,而是向你展示一些示例,说明在哪些情况下可以使用它,以及如何使用它。

加载图像

在Python中,图像可以通过NumPy数组方便地表示。例如,大小为320x200像素的灰度图像将存储在一个200x320的数组中,而相同尺寸的彩色图像将具有形状为200x320x3(对于3个颜色通道)。要加载图像,你可以使用以下代码:

import cv2 im = cv2.imread(https://www.aiknowledge.cn/images/初学者的AI课程/'image.webp)

传统上,OpenCV使用BGR(蓝-绿-红)编码彩色图像,而Python的其他工具则使用更传统的RGB(红-绿-蓝)。为了让图像看起来正确,你需要将其转换到RGB颜色空间,方法是在NumPy数组中交换维度,或者调用OpenCV函数:

im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)

OpenCV提供了多种功能来增强图像质量:

  • 应用不同的变换
    • 仿射变换 如果你需要对图像进行旋转、缩放和平移,并且知道图像中的三个点的源位置和目标位置,那么仿射变换会很有用。仿射变换保持平行线平行。
    • 透视变换 如果你知道图像中四个点的源位置和目标位置,那么透视变换会很有用。例如,如果你通过智能手机摄像头以某个角度拍摄矩形文件的照片,然后你想制作一个矩形的文件图像。
  • 使用光流来理解图像内部的运动。

计算机视觉示例

在我们的OpenCV笔记本中,我们提供了一些计算机视觉可以用于执行特定任务的例子:

  • 预处理盲文书籍的照片。我们关注的是如何使用阈值化、特征检测、透视变换和NumPy操作将单个盲文符号分离出来,以便后续通过神经网络进行分类。
盲文图像 预处理后的盲文图像 盲文符号

图片来自 OpenCV.ipynb

  • 使用帧差检测视频中的运动。如果相机固定不动,那么相机捕捉到的帧应该非常相似。由于帧被表示为数组,只需通过减去两个连续帧的数组,就可以得到像素差异,这在静态帧中应较低,而在图像中有显著运动时会变高。

视频帧及帧差图像

图片来自 OpenCV.ipynb

  • 使用光流检测运动光流允许我们理解视频帧中每个像素是如何移动的。有两种类型的光流:

    • 密集光流 计算矢量场,显示每个像素移动的方向
    • 稀疏光流 基于在图像中选取一些显著特征(如边缘),并建立它们从一帧到另一帧的轨迹。

光流图像

图片来自 OpenCV.ipynb

✍️ 示例笔记本:OpenCV 尝试OpenCV实战

让我们通过探索OpenCV笔记本做一些OpenCV实验。

结论

有时,相对复杂的任务如运动检测或指尖检测可以通过计算机视觉纯软件方式解决。因此,了解计算机视觉的基本技术,以及像OpenCV这样的库能做什么是非常有帮助的。

挑战

观看AI Show中的这段视频,了解Cortic Tigers项目的详情以及他们如何通过机器人构建一个基于模块的解决方案来普及计算机视觉任务。研究其他类似项目,帮助新学习者进入该领域。

课后测验

复习与自学

阅读更多关于光流的内容,参考this很棒的教程

作业

在这个实验室中,你将处理一段带有简单手势的视频,你的目标是使用光流提取上下左右的运动。

手掌运动帧

声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。


发布者: 作者: 转发
评论区 (0)
U