龙空技术网

「计算机视觉算法实战系列」1.计算机视觉导论

数据与智能 276

前言:

而今同学们对“大数据算法导论”大致比较重视,小伙伴们都需要知道一些“大数据算法导论”的相关知识。那么小编在网络上搜集了一些关于“大数据算法导论””的相关资讯,希望姐妹们能喜欢,大家快快来学习一下吧!

数据与智能 本公众号关注大数据与人工智能技术。由一批具备多年实战经验的技术极客参与运营管理,持续输出大数据、数据分析、推荐系统、机器学习、人工智能等方向的原创文章,每周至少输出7篇精品原创。同时,我们会关注和分享大数据与人工智能行业动态。欢迎关注。

来源 | Hands-On Algorithms for Computer Vision

作者 | Amin Ahmadi

翻译 | sunshine

校对 | gongyouliu

编辑 | auroral-L

全文共6608字,预计阅读时间40分钟。

第一章 计算机视觉导论

1. 技术要求

2. 理解计算机视觉

3. 了解图像相关的一切知识

3.1 颜色空间

3.2 输入、处理和输出

4. 计算机视觉框架和软件库

5. 总结

6. 若干问题

毫无疑问,计算机科学,特别是实现算法的方法,近年来发展迅速。这是因为你的个人电脑,甚至你口袋里的智能手机都比它们的前辈要快得多,也便宜得多。计算机视觉领域是计算机科学中受到这种变化的影响最重要的领域之一。近年来,计算机视觉算法的实现和使用方式发生了巨大的变化。本书将从这一介绍性章节开始,努力使用最先进和最现代的方法来讲授计算机视觉算法及其实现。

本章是一个简短的介绍性章节,列出了许多计算机视觉算法中可能用到的基本概念。如果你已经对计算机视觉比较熟悉,并且了解一些基础知识,比如图像、像素、通道等,也最好简要阅读本章以确保你理解计算机视觉的基本概念并帮助你巩固一些已有的知识。

在本章中,我们将首先简单介绍一下计算机视觉。介绍一些使用计算机视觉技术的最重要的行业,并举例说明。然后,我们将直接深入到图像等一些基本的计算机视觉概念。学习计算机视觉中的图像以及它们的构造块。在此过程中,我们将介绍像素、深度和通道等概念,所有这些概念对于理解和成功实践计算机视觉算法至关重要。到本章结束时,你将了解以下内容:

什么是计算机视觉,计算机视觉主要应用在哪些方面?

计算机视觉中的图像是什么?

像素、深度和通道的概念及它们之间的关系。

1. 技术要求

由于这是一个导论章节,我们只关注理论。因此,没有技术要求。

2. 理解计算机视觉

定义计算机视觉并不是一件容易的任务,计算机视觉专家在提供教科书定义时意见往往不一致。当然,这完全不是本书的范围和兴趣,我们将采用一个简单的、实用的、符合我们目的的定义。计算机视觉历来都是图像处理的同义词,图像处理基本上指的是以图像作为输入并基于该输入图像生成输出图像或一组输出值(或测量值),该值在执行完一组动作后取得。计算机视觉高速发展至今,我们注意到,一般来说,当计算机视觉工程师谈论计算机视觉时,通常指的是一个能够模拟人类视觉的算法,比如看到或者是检测到图像中的一个物体或一个人。那么,我们应该接受哪个定义呢? 答案很简单——两个都接受。

简单地说,计算机视觉是指以任何可以想象的方式使用数字可视化数据(或任何可以可视化的数据)处理这些问题的算法、方法和技术。请注意,这个意义上的视觉数据并不仅仅意味着使用传统相机拍摄的图像,它们可能是地图上的图形表示或立面、热强度地图,或任何可以可视化的数据,而不管其现实意义是什么。

有了这个定义,以下所有问题以及更多问题都可以用计算机视觉解决:

如何软化或锐化图像?

如何缩小图像的大小?

如何增加或减少图像的亮度?

我们如何检测图像中最亮的区域?

如何在视频(或一系列连续图像)中检测和跟踪人脸?

在现代计算机视觉科学中,图像处理通常是处理图像滤波、变换等问题的计算机视觉方法和算法的一个子类。不过,许多人还是可以互换使用计算机视觉和图像处理这个术语。

在这个时代,计算机视觉是计算机科学和软件行业中最热门的话题之一。原因在于它被用在多个领域,无论是应用于数字设备,还是处理或简化人类眼中通常期望的各种任务的工业机器的想法。我们刚才提到的有很多实际工业例子,这些行业各有各的特色,包括汽车、电影、生物医学设备、国防、照片编辑和共享工具,以及视频游戏行业。我们只讨论下面这些方面,剩余的由读者来研究。

汽车工业长期以来都使用计算机视觉以提高现代汽车的安全性和功能。车辆能够检测到交通标志,并警告司机道路限速违规等信息,甚至可以检测到道路上的车道和障碍物,并告知司机可能存在的危险。如何利用计算机视觉实现汽车工业现代化,这方面有非常多的实际使用案例,不过这不涉及汽车的自动驾驶。先进的科技公司正在投资大量资源,有的甚至正在与开源社区分享他们已经取得的一些成就。正如你在本书的最后一章中所看到的,我们将利用其中的一些内容,特别是实时检测多种类型的多个对象的实例。

下图展示了汽车行业的一些物体、符号和感兴趣的区域,这些图像通常通过安装在车辆上的摄像头看到:

处于技术革命边缘的另一个伟大例子是生物医学产业。计算机视觉算法不仅极大提升了人体器官和身体部位的成像方法,而且也使得这些图像的解释更清晰了,并且改进了这些图像的可视化方式。计算机视觉也被用在检测显微镜拍摄的图像中的癌症组织。例如,能够进行手术的机器人是一个很有希望的发展方向。

以下图像是使用计算机视觉对组织不同区域中特定类型的感兴趣的生物对象(在本例中为细胞)进行计数,并通过数字显微镜进行扫描的示例:

除了汽车和生物医学行业,计算机视觉还被用于数千种移动和桌面应用程序来执行许多不同的任务。浏览智能手机上的在线应用程序商店可以查看一些与计算机视觉相关的应用程序示例。此时,你就会立刻意识到,在你和你脑海中的计算机视觉应用想法之间,事实上,除了你的想象力之外,并没有什么实质的东西。

3. 了解图像相关的一切知识

现在,我们来介绍一些关于计算机视觉的基本知识。首先,我们介绍一下图像。什么是图像呢?在计算机视觉中,图像只是一个矩阵,或者换句话说,是一个二维向量,具有有效行数、列数等。这种看待图像的方式不仅简化了对图像本身的描述,还简化了图像本身的所有组成部分。

图像的组成部分如下所示:

图像的宽度对应于矩阵中的列数。图像的高度对应于矩阵中的行数。

矩阵中的每个元素都代表一个像素,该像素是图像中最基本的元素。

一个图像是一个像素的集合。每个像素或矩阵中的每个元素都可以包含一个或多个对应于其视觉表示(颜色、亮度等)的数值。

稍后我们将在讨论计算机视觉中的颜色空间时了解更多信息。但是,需要注意的是,每个与像素关联的数值都代表一个通道。例如,灰度图像中的像素通常使用一个在0和255之间变化的单一无符号8位整数值来表示;因此,灰度图像是一个单通道图像。在这种表示形式中,0表示黑色,255表示白色,而所有其他数字都对应于一个灰度值。另一个例子是标准的RGB图像表示,其中每个像素由三个在0和255之间变化的无符号8位整数值表示。在RGB图像中表示每个像素的三个通道对应于红、蓝、绿色的强度值,它们组合起来可以形成任何可能的颜色。这样的图像被称为三通道图像。

下图为来自同一图像的同一区域的两个缩放灰度和彩色(RGB)格式表示。注意灰度图像(左侧)中较高的值与较亮的值对应,反之亦然。类似地,在彩色图像(在右侧)中,你可以看到红色通道的值相当高,这与该区域的红色以及白色通道一致:

除了我们前面提到的,图像还有更多的规格,如下:

每个像素或矩阵的一个元素都可以是一个整数或浮点数。它可以是一个8位的数字,一个16位的数字,等等。表示每个像素和通道数量的数值的类型类似于图像的深度。例如,一个使用16位整数值来表示每个通道的四通道图像的深度为16乘以4位或64位(或4字节)。

图像的分辨率是指图像中的像素数量。例如,一个宽度为1920,高度为1080的图像(与全高清图像一样)的分辨率为1920乘以1080,略超过200万像素。

正是因为这种图像的表示形式,它可以很容易地被视为一个数学实体,这意味着许多不同类型的算法可以被设计来操作或处理图像。如果我们回到图像的最简单表示(灰度图像),通过几个简单的例子,我们可以看到大多数图片编辑软件(和计算机视觉算法)使用这种表示以及使用相当简单的算法和矩阵操作来轻松地修改图像。在下面的图像中,只向输入图像(中间图像)中的每个像素添加一个常数(在我们的例子中是80),这使得最终的图像更亮(右侧图像)。还可以从每个像素中减去一个数字,以使得图像更暗(左侧图像):

目前,我们将只关注计算机视觉的基本概念,而不是深入讨论前面的图像修改示例的实现细节。我们将在接下来的章节中了解这个问题,以及更多的图像处理技术和算法。

本节中提到的图像属性(宽度、高度、分辨率、深度和通道)广泛应用于计算机视觉。例如,在某些情况下,如果图像处理算法过于复杂和耗时,那么可以调整图像的大小,使其更小,以便使用更少的时间来处理它。一旦处理完成,结果可以映射到原始图像大小,并显示给用户。同样的过程也适用于深度和通道。如果算法只需要图像的特定通道,你可以单独提取和处理它,或者使用图像的灰度转换版本。请注意,一旦对象检测算法完成其工作,你将希望在原始彩色图像上显示结果。当你面对各种计算机视觉问题和使用计算机视觉算法时,正确地理解这些图像属性将对你很有帮助。不用再多说了,让我们继续进入颜色空间。

3.1 颜色空间

虽然它的定义可以有所不同,但通常来说,颜色空间(有时被称为颜色模型)是一种用于解释、存储和复制一组颜色的方法。让我们用一个例子来分解:灰度空间。在灰度颜色空间中,每个像素用一个8位无符号整数值表示,该值对应于该像素的亮度或灰度强度。这使得可以存储256个不同级别的灰度,其中零对应于绝对黑色,255对应于绝对白色。换句话说,一个像素的值越高,它就越亮,反之亦然。以下图像显示了灰度颜色空间中存在的所有可能的颜色:

另一个常用的颜色空间是RGB,其中每个像素由三个不同的8位整数值表示,它们对应于该像素的红色、绿色和蓝色的颜色强度。这种颜色空间尤其以用于电视、液晶显示屏和类似的显示器而闻名。你可以通过使用放大镜查看显示器的表面来自己检查这个问题。它依赖于一个简单的事实,即所有的颜色都可以通过结合各种数量的红色、绿色和蓝色来表示。下图描述了三种主要颜色之间的所有其他颜色(如黄色或粉红色):

在其每个像素中具有相同R、G和B值的RGB图像将产生灰度图像。换句话说,同样强度的红色、绿色和蓝色也会导致一种灰色的阴影。

另一个广泛应用于计算机视觉的颜色空间是HSV(色调、饱和度和值)颜色空间。在此颜色空间中,每个像素由色调(颜色)、饱和度(颜色强度)和值(亮度或深色)的三个值表示。如下图所示,色调可以是介于0到360(度)之间的值,它代表该像素的颜色。例如,零度和附近度对应于红色和其他类似颜色:

这个颜色空间在基于对象颜色的计算机视觉检测和跟踪算法中特别流行,稍后你将在本书中看到。原因是HSV颜色空间允许我们处理颜色,无论它们是多么黑暗或明亮。使用RGB和类似的颜色空间实现这一点并不容易,因为查看单个像素通道值不能告诉我们它的颜色。下图是HSV颜色空间的另一个表示形式,它显示了一个图像中颜色(从左到右)、饱和度和值的变化,从而产生所有可能的颜色:

除了本节中提到的颜色空间之外,还有许多其他的颜色空间,每个空间都有自己的用例。例如,四个通道的CMYK颜色空间(青色、栗色、黄色和钥匙/黑色)已经被证明在打印系统中是最有效的。确保从互联网上了解其他流行的颜色空间,以及它们如何对任何特定的计算机视觉问题有用。

3.2 输入、处理和输出

所以,现在我们知道图像基本上是类似矩阵的实体,它们具有宽度、高度、元素类型、通道、深度等基本属性,唯一剩下的大问题是它们来自哪里,它们会发生什么,它们会去哪里?

让我们以一个简单的照片库应用程序为例来进一步分解这个问题。假设你有一个智能手机默认包含这样的应用程序。图片库应用程序通常允许你使用智能手机上的内置摄像头拍摄新的照片或视频,使用以前录制的文件,对图像应用过滤器,甚至在社交媒体上,通过电子邮件,或与你的朋友和家人分享它们。此示例虽然在使用时看起来像一个简单的应用程序,但它包含了适当的计算机视觉应用程序的所有关键部分。

以此为例,我们可以说图像是由各种不同的输入设备提供的。一些最常见的图像输入设备如下:

存储在磁盘、内存、网络或任何其他可访问位置上的图像文件。注意,存储的图像文件可以是原始的(包含精确的图像数据)或编码的(如JPG);但是,它们仍然被视是图像文件。

由照相机捕捉到的图像。请注意,这个意义上的相机意味着个人电脑上的网络摄像头、智能手机上的相机或任何其他专业摄影设备、数字显微镜、望远镜等等。

存储在磁盘、内存、网络等上的视频文件中的连续或非连续帧。与图像文件类似,视频文件也可以进行编码,在这种情况下,需要一种特殊类型的软件(称为编解码器)才能对它们进行编码。

来自实时摄像机输入的连续帧。

使用输入设备读取图像后,开始对图像的实际处理。这可能是你在本书中寻找的计算机视觉过程周期的一部分,这是有充分理由的。实际的计算机视觉算法用于从图像中提取值,以某种方式修改图像,或执行任何类型的计算机视觉任务。此部分通常是由给定设备上的软件来完成的。

现在,需要创建整个过程的输出。这部分完全取决于计算机视觉算法和计算机视觉过程正在运行的设备类型,但一般来说,计算机视觉算法需要得到以下类型的输出:

从处理的图像派生出的数字、形状、图形或任何其他非图像类型的输出。例如,一种计算图像中人数的算法只需要输出一个整数或一个表示在安全摄像头的连续视频帧中发现的人数的图形。

存储在磁盘、内存和类似设备上的图像或视频文件。一个典型的例子是手机或个人计算机上的照片编辑软件,它允许你将修改后的图像记录为JPG或PNG文件。

在显示屏上绘制和渲染的图像和视频帧。显示通常由固件(可能在操作系统上)控制,该固件控制它们上显示的内容。

与输入设备类似,对图像输出设备略有不同的解释将产生更多的结果和条目(如打印机、绘图仪、视频投影仪等)。然而,前面的列表仍然足够了,因为它涵盖了我们在处理计算机视觉算法时将处理的最基本和最关键的输出类型。

4. 计算机视觉框架和软件库

为了构建计算机视觉应用程序,我们需要一套支持输入、输出和图像处理的工具、框架或库。选择计算机视觉库是一个非常重要的选择,因为你可能最终处于一个你需要自己重新发明轮子的位置。你还可能会编写占用你大量资源和时间的函数和代码,例如以你需要的格式阅读或写入图像。

一般来说,在开发计算机视觉应用程序时,你可以选择两种主要类型的计算机视觉库,它们如下:

√ 专有:专有计算机视觉库通常文档做得特别好。支持的公司维护它,但他们的价格,通常是针对一套特定的计算机视觉问题。

开源:开源库,另一方面,通常涵盖更广泛的计算机视觉相关问题,他们可以自由使用和探索。

你可以在网上搜索许多专有和开源计算机视觉库的好例子,以便为自己进行比较。

我们将在整本书中使用的库是开源计算机视觉库(OpenCV)。OpenCV是一个计算机视觉库,具有以下功能:

它是开源的,在学术或商业项目上免费用。

它支持C、Python和Java语言。

它是跨平台的,这意味着它可以用于开发Windows、macOS、Linux、Android和iOS的应用程序。

它以模块化方式构建,快速、文档良好,并被很好地支持。

值得注意的是,OpenCV还使用了一些第三方库来处理各种计算机视觉任务。例如,OpenCV中的FFmpeg库用于处理读取某些视频文件格式。

5. 总结

在本章中,我们介绍了计算机视觉科学中最基本的一些概念。首先,学习计算机视觉这个术语及其应用实例,介绍了一些广泛使用计算机视觉的行业。然后,我们继续了解图像及其最关键的一些特性,即像素、分辨率、信道、深度等。然后,我们讨论了一些被广泛使用的颜色空间,并学习了它们如何影响通道的数量和图像的其他属性。之后,我们介绍了计算机视觉中常用的输入设备和输出设备,以及计算机视觉算法及其实现过程中两者之间如何进行匹配。在这一章的结尾,我们对计算机视觉库进行了比较简要的讨论,并介绍了我们选择的计算机视觉库,也就是OpenCV。

在下一章中,我们将介绍OpenCV框架,并从一些实际操作的计算机视觉课程开始,学习如何使用OpenCV来访问输入设备、执行计算机视觉算法以及访问输出设备以显示或记录结果。下一章将是书中的第一个真正的实践章节,并为以后的计算机实践打下坚实的基础。

6. 若干问题

1. 除了本章提到的行业外,从计算机视觉中收益颇大的行业还有两个。

2. 谈谈你所知道的出于安全目的的计算机视觉应用程序的例子。(谈谈一个你还没有遇到过的计算机视觉应用程序的想法。)

3. 谈谈你所知道的出于生产力的原因而使用的计算机视觉应用程序的例子。(同样,想想你没有遇到的应用程序的想法,即使你可能会怀疑它的存在。)

4. 存储一个具有四个通道和32位深度的1920x1080图像需要多少兆字节?

5. 超高清图像,也被称为4K或8K图像,现在很常见,但是一个超高清图像包含多少百万像素呢?

6. 除了本章中提到的颜色空间外,说出两个常用的颜色空间。

7. 比较OpenCV库和MATLAB中的计算机视觉工具。两者的利弊是什么?

标签: #大数据算法导论 #三维计算机视觉技术和算法导论 #学校视觉算法课程内容