05.卷积神经初探

  • 一、5-1 计算机视觉基本概念
  • 二, 5-2 图像处理常见概念

转自慕课网,自我总结。

一、5-1 计算机视觉基本概念


今天介绍零基础入门pytorch中的pytorch加卷积神经网,解决计算机视觉的问题。那在介绍具体的网络模型之前呢,我们首先给大家弥补一些呢,关于计算机视觉的基础知识。这呢也是我在跟很多同学接触过以后,发现大家所欠缺的,大家不要单纯的以为pytorch是一门编程语言,是一个框架,或者是说是一些工具。那我们用这个工具呢,主要还是去解决了一些实际的问题,在解决这些问题之前呢,我们首先要搞清楚这些问题到底是什么,才能帮助我们去灵活的运用这些框架。那首先呢,我们来看人工智能与计算机视觉。什么是人工智能呢?这个呢也是一个比较经典的一个问题。

在使用它解决问题的时候呢,必须要搞清楚的一个概念,人工智能呢,它主要研究的呢,就是使计算机呢,来模拟人类的的思维方式,思维过程,一些智能行为等等相关的一些学科。而我们在解决这样的一些问题的时候呢?比如说去模拟思维过程,理解人类的行为方式,去进行学习、推理、思考等等这些行为的时候。我们需要做的首先呢,就是对客观世界呢进行知识表示,我们需要将客观世界呢表示成计算机能够理解的语言,计算机可以利用这些知识去完成计算机世界内的逻辑推理,逻辑运算

比如说我们在解决图像问题的时候这个时候呢,我们会将图片呢表示成一个数字矩阵,而在进行神经网络计算的时候呢,实际上就是在进行知识抽取的这样的一个过程,我们将它表示成卷积之后的一些特征向量。这些特征向量呢,描述的就是我们所要处理的这些图像数据,那除了图像数据以外呢,还有就是语音数据,我们会将它进行采样,进行分页变换,将时域上的信号呢转换到频域中。还有呢,就是在NLP中,我们需要将一个个的文字,将它表示成数字,表示成一些统计信息,再利用这些统计信息呢,去完成所谓的后续的这些逻辑推理,那这个过程呢,就是我们去获取知识,表示知识的过程,有了这些知识之后呢,我们再利用这些知识呢去完成逻辑推理,去完成建模等等啊。

这些过程都是使用知识的过程,那我们学会了如何去使用知识,这个时候呢,我们就可以根据特定的场景呢,来完成一些智能化的一些分析,比如说呢,我们去研究听说读写的能力,去实现语音信号的处理,语音信号的合成,图像信号的理解,图像分类,目标检测,目标分割等等一系列的和智能相关的一些行为,那这些行为呢,总结来看啊,实际上就包括了行动的能力,理解的能力,学习能力,情感推理、思考记忆,自我思维,听说等等,那这些呢,都是一个冰冷的机器,它的智慧的体现,我们去描述一个物体,让它具有智能,那到底什么样算是智能呢?

智能呢,肯定包括很多方面。那我们在今天这门课程中呢,主要还是去研究机器如何去看的能力,而这个看呢,就是所谓的视觉信号


那关于计算机视觉呢,它呢属于一个比较大的研究方向,除了计算机视觉以外呢,还包括了语音信号,NLP,还有一些哎策略相关的一些研究方向,比如说大家比较熟悉的就是阿尔法狗这样的一些下围棋的策略呀等等啊,跟一些策略决策相关的,都属于一些其他方面的一些研究。那数据存在的形态呢,实际上主要呢,根据这几个研究方向,或者是说我们有了数据的这个形态,进而呢,有了这几个研究方向,数据主要包括了哪几个形态呢?

包括了语音信号,文字信号,还有就是图像信号。再有呢就是我们可能会用到的一些表格等等。那根据这些不同的数据存在的形态呢,就有了我们这些研究方向,而在解决这些相关的研究方向和领域的时候呢,我们就需要用到大数据,所谓的大数据呢,其实就是。描述了这些我们想要研究的这些信号,这些数据,它的一个形态,它的一个规模。基于这样的一个海量的数据,我们就有了今天的这个人工智能发展的这个速度。

人工智能呢,它包括了很多方面,我们在上一页PPT中也给大家一一列出了,除了这些方面以外,还有很多其他的方面,那在解决这些问题的时候呢,我们就需要有一些方法,而这些方法呢,就是所谓的机器学习,这些方法我们通过机器学习的方法来解决人工智能的问题,在这个章节呢,我们通过机器学习的方法呢,来解决计算机视觉的问题,而深度学习呢,属于机器学习方法中的一种,它主要是用来完成机器学习建模以及深度学习模型求解相关的一些问题所需要用到的工具,那在人工智能发展非常迅猛的今天,深度学习技术呢,在各个领域呢也大放异彩,所以呢,我们在使用pytorch的时候呢,主要还是用来解决深度学习的问题,

同样呢,在计算机视觉领域呢,我们在处理计算机视觉的这些问题,比如说图像分类任务,图像检索。目标检测、分割、图像生成、目标跟踪、超分辨率重构、关键点定位、图像降噪、多模态图像加密、视频编解码、3D视觉等等啊这些问题的时候,我们会用到非常多的和深度学习相关的一些方法和技术,尤其是在计算机视觉的这些基本的任务中,深度学习呢,是目前基本上是主流的技术。所以呢,我们在今天给大家介绍pytorch的时候呢,主要还是围绕着深度学习的相关应用呢,来给大家展开。

那具体呢,我们再来看一些在计算机视觉中的一些基本的一些概念,首先呢,就是颜色空间,所谓的颜色空间呢,就是我们在表示图像信号的时候。大家都接触过图像,我们会看到各种各样的图片,那这些图片它到底是如何来表示整个色彩空间的?我们看到有的图片是红色的,是绿色的,是蓝色的,是粉色的,是橙色的,各种各样的颜色。

那这些颜色我们如何是通过数据来将它表示出来的呢?因为计算机在解决这些问题的时候呢,这些一定是输入数。那这些数如何构成了所谓的颜色空间呢?大家呢,其实可以从编码的角度上去理解这个问题,每一种颜色实际上呢,它都是一种编码,根据不同的编码方式和组合方式,我们会存在非常多的颜色空间,比如说RGB空间,YUV空间,lab空间,hsl空间,hsv空间,HSB空间,cmyk空间等等。

其中RGB是我们最常用到的颜色空间,也是和我们视觉比较相符的一个颜色空间。而CMYK呢,实际上是用在比如说那个纺织领域。在纺织领域呢,会有布匹上色,这个时候呢,经常会用CMYK这个空间呢,去合成相关的颜色。而YUV空间呢,主要还是很多大家用到的这个智能设备,比如说摄像头,比如说这个智能手机,他们在摄像头出图的时候,大多数还是以YUV的数据出图为主等等啊,包括后面的这些lab,HSV等等这些颜色空间。他们有很多不同的颜色空间,它的表示方式呢在不同的领域呢,都有相关的应用。我们在解决图像信号理解的这些任务中呢,其实主要还是围绕着RGB空间呢来展开,另外呢,在PPT中呢,我们给大家列出了这样的两个色相环,这个所谓的色相环呢,实际上就是通过不同的这个编码方式来描述色彩啊,大家可以看到啊,在这里呢,实际上是有不同的数字的。而这些数字呢,就描述了不同的颜色空间的相关维度上的一个具体的值。

我们具体来看一下RGB色彩模式,RGB色彩模式呢,也是我们经常会用到的一种模式。这种模式是大家一定要熟悉和掌握的一种色彩模式。RGB色彩模式呢,它是工业界的一种颜色标准。它描述了一种加色的这样的一个色彩,表示的这样的一个原理,我们通过对RGB这三种三基色来进行不同数值上的混合。也就是R取一个值,G取一个值,B再取一个值,将这三个值拼凑到一起,我们变成了一个RGB。那这个呢,它就表示了一个彩色图片上的像素点所对应的RGB的值,经过这三个值组合之后呢,就表示了一种色彩

那在PPT中呢,我们给大家列出了这样的一幅图像,我们可以看到这个图像呢,它包含了一个H和一个W,就是这个图片的大小,它有在水平方向上有W个像素点,在垂直方向上有H个像素点。每一个像素点呢,它其实都包含了三个值,也就是包含了这RGB三个值。所以呢,我们将这个图片画出来。它实际上是这样的,它是一个长方体的这样的一个结构,其中这里是W,这里是H,那这个地方是什么呢?就是所谓的这个RGB,我们将这里的这三个基色呢,将它称之为通道。也就是三通道的一个彩色图片,对于图片上的一个像素点,这里对于一个H乘上W的图片,它包含了H乘上W个像素点,每一个像素点上呢,都包含了RGB这样的三个值。

也就是说呢,对于一幅彩色图像,我们通常将它表示成H乘上W,再乘上三维的一个张量。我们也可以把它想象成了三个H乘上W的二阶的矩阵构造出来的一个数据,对于每一个H上W呢,它都表示了一个通道上的数据,我们取R通道的话,那这个时候呢,我们就可以拿到PPT中给出大家列出这样的一个二阶的一个矩阵,我们看到在R通道上,它实际上它就包含了H乘上W个值。每一个值呢,都表示了一个像素点所对应的R通道的值,对于每一个颜色通道上的值呢,我们将它称之为呢在当前的这个通道上的一个亮度

那对于一副RGB空间的这样的一幅彩色图像,每一个通道上的值它呢,一般是0到255。在这个范围内,变化最小的时候是零,最大的时候呢是255。也就是一共有256个不同的亮度值,所以大家可以去想象一下啊,对于RGB这三基色,我们来进行颜色空间编码的话,它一共包含了多少个颜色值呢?实际上就是256再乘上256再乘上256。这是他能够表示的全部的色彩,那对于一个彩色图像呢,我们通常会将它表示成H乘上W再乘上三,这里的三呢,我们将它改成C。也就是呢,每一个图像,我们将它描述成一个H乘上W再乘上C的这样的一个张量

而这里的C呢就表示了通道数,这个C呢,我们在后面给大家介绍深度学习的时候呢,同样也会用到这个概念。那这个时候呢,在深度学习中呢,我们搭建卷积神经网络之后呢,这个C可能就会变得大于三,也可能小于三。大家一定要注意,在这个维度上,也就是说C个H乘上W的二阶矩阵。这个C它表示了通道,在后面给大家介绍深度学习的时候呢,这个C也是我们后面讲的这个卷积核啊,我经过多少个卷积之后拿到的我的特征图,它的一个大小是什么样的呢?也是表示成了一个H乘上W再乘上C为的这样的一个特征图,这里的C呢,它也描述了一个通道。只是在经过卷积之后呢,这个C它所对应的概念变得更加抽象了,而在原始的这个彩色图像中呢,我们描述这个C它一般是三个通道,这三个通道它分别有它的含义是RGB这三个颜色通道。那在特征图在经过卷积之后算出来的这个多通道的这个数据的时候,这个C的含义是抽象的。

那除了RGB的色彩模式以外呢,我们再给大家介绍一个就是hsv的色彩模式,为什么要给大家介绍hsv呢?主要是因为呢,在hsv中呢,涉及到一些我们后面会用到的一些亮度,对比度,饱和度这样的一些概念,这些概念呢,是我们在用来进行数据增强的时候是会用到的。那对于hsv色彩模式呢?它在描述一个图像数据的时候呢?通过hsv这三个通道来描述每一个像素点它的属性,每一个像素点它都包含了一个Hue色相,一个Saturation饱和度和一个value明度,同样也是由三个值来构成。

其中第一个值H呢,它描述了色相,所谓的色相呢,就是我们可以将它理解成是一种色彩。就是我们所谓的红色,蓝色,绿色,黄色,橙色这些颜色呢,都是我们所谓的这个色彩,对于这个色彩呢,它的描述呢,是包含了0到360度个数值来进行描述,然后呢就是饱和度,饱和度呢就是描述了我们当前这个色彩的纯度,当这个色彩为0的时候呢,它的纯度最差,当它为100的时候呢,这个纯度是最高的,大家可以看啊,这个红色我们经常会见到深红色以及到暗红色,那这个变化呢,其实就是饱和度在发生了变化。但是它的色彩,它的色相都是红色,然后就是亮度,亮度呢就是表示了我们这个色彩它的一个明亮程度,有的同样是红色,它特别亮,有的呢就特别暗,这个时候呢,我们就通过value这个值来进行度量,它呢同样也是从0%-100%,描述了从黑到白的一个过程,大家要注意啊。在色彩空间里,0通常呢是黑。而255通常是白,也就是这个255就是所谓的这个100%啊。

它一般是白色在RGB的这个颜色空间里呢,我们进行加色。它是加色模式,在这个加色模式下呢,R等于255。G等于255。B等于255,这个时候我们拿到那个像素点,它的颜色就是白色。那RGB如果都是0的话,那这时候我们拿到那个相似点,它对应的是黑色。我们在介绍彩色图片的时候呢,大家经常使这个智能手机拍照的时候,会讲我们这个摄像头是前后两千万,那这个前后两千万它的分辨率到底是指什么呢?实际上就是指我们这幅图像中它的像素点的个数,也就是所谓的这个H乘上W乘上C。这个H乘上W之后的那个值,就表达了当前这个图像它的一个分辨率,也就是所谓的相素点的个数。

回到这个hsv这个色彩模式,在hsv这个色彩模式下呢,我们可以去调整图片的每一个像素点的色相Hue的值,或者是饱和度Saturation的值,或者是明度value的值。这个时候呢,这个图像它的明亮和它的色彩的一个饱和度,和它的色彩的一个色相就会发生变化,这个时候呢,我们在肉眼上看的时候,这个图它好像色彩发生了一些变化,但是呢,这个图的内容它是没有什么变化的。我们在经过深度学习训练的时候,为了保证我们的模型对不同的场景,它的理解能力具有一定的泛化性

为什么我们需要有泛化性呢?因为我们去采集数据的时候,比如说我们说这是一只猫,不同的手机,不同的sensor。在拿到这个猫的图像的时候,实际上它的图片的这个色彩上可能会有一些偏差。那我们在学习这些数据的时候就需要,将这些偏差呢加到数据里去,也就是所谓的这个数据增强,使我们的模型呢能够去容忍这些变化。

那在PPT中呢,我们给大家列出了hsv模式下的这样的一个色彩模型,我们可以看到在这个Hue的这个维度上是0到360度,它呢表示了不同的一个颜色。而在饱和度的这个维度上呢,我们可以看到它表示了一个色彩的一个纯度。然后就是在value这个维度上呢,主要是描述这个色彩的一个明亮的变化,我们将一幅图像从RGB空间转换到hsv空间之后,我们再通过RGB的这个方式,通过三通道的这个矩阵来将这个图片进行可视化之后我们会发现啊,这个可视化的图片实际上和RGB空间中的这个图片,它的一个可视化出来的结果是有一个很大的一个变化的。

所以我们讲啊,这个RGB是我们常用的一种颜色模式,就是大家看到的这些图像,其实大多是数是RGB的,但是我们在进行图像内容理解的时候呢,在某些特定的场景下,我们有的时候呢,实际上是对图片进行一些处理的,将它转化到其他的色彩空间中去,对图像的内容进行理解,这个时候呢,有的时候会给我们带来一些不一样的东西。那我们可以看到啊,在这里呢,hsv空间,包括一些其他空间。它所展示出来的这个可视化之后的结果呢,都是和RGB空间有一个比较大的这样的一个差别的。

那除了彩色图以外呢,我们在视觉中在进行图像内容理解的时候呢,也经常会用到灰度图,那所谓的灰度图呢,实际上就是我们在描述一幅图片的时候,我们将它那个C的这个通道呢,将它变成1,那如何进行从多个通道数到单个通道的一个转换呢?

实际上就是有一些转换的方式吧。我们通过这些浮点算法或者是说整数方法,移位方法,平均值法等等这些方式之后呢,我们会拿到这幅图片在每个像素点上的一个亮度值,那其中0表示了黑色,255表示了白色,从0到255的变化呢,就是从黑到白的一个过程,中间色呢就是灰色。这种图呢,我们将它称之为呢灰度图。对于一个灰度图像呢,因为它的那个通道的那个维度是1,所以我们在表示这个图像的时候呢,一般是用H乘上W来进行矩阵的表示,这个时候呢,它就是一个二阶的一个矩阵。那我们讲为什么会用到灰度图呢?实际上我们在描述一些数据的时候,有时候呢我们只需要去关注它的纹理信息,这个时候呢,我们就需要去用到它的彩色空间,再有呢,就是我们如果想让我们的模型对于颜色的变化不那么敏感,我们这个时候训练数据的时候也通常会用到灰度图。

还有就是我们在进行一些数据传输的时候,如果我们当前的这个任务不需要去用到彩色图,那我们将它表示成灰度图之后呢,整个图像的数据量也会加缩比较大,至少是三倍。但实际上经过一些编码之后呢,它可能不止三倍。那我们在描述这个图片数据的时候啊,经常大家会遇到一个现象,就是我们有的时候数据它的取值范围会是0到255,有的时候呢是0到1,当然呢,也有可能会有一些更高的一些值。我们常用的主要还是0到225和0到1,那这个时候主要是怎么回事呢?这个地方给大家提个醒,就是如果我们的数据矩阵它是U8的。这个时候呢,数值的范围就一定是0到255。其中呢,0表示了黑色,255呢表示了白色。如果它是float的,那这个时候它的数据的范围呢,我们可以将它转换到0到1之间去。其中0表示了黑色,1表示了白色,中间的这个过渡色呢,就是零点几。

那我们在训练模型的时候呢,经常会将我们的图片数据呢,将它转到-1到1之间,也有人会转到0到1之间。一般是在-1到1之间,我们在训练模型的时候呢,我们的收敛曲线呢,会更稳定一些。也就是将我们这个数据进行除128再减1这样的一个操作。我们在使用一些openCV啊,或者是说一些其他的函数库去读取图片数据的时候呢,大家一定要搞清楚我们读取出来的这个数据,它的一个布置范围到底是U8的还是float型的。这个时候我们在进行图片可视化的时候,才会显示出一个正常的结果,经常会有同学跟我反映,我为什么画出来的图是纯黑的或者是纯白的,那这个时候一定是你的这个数值的这个范围啊,可能没有搞清楚,一定要确保要么是由U8的,要么是float的,由U8的话,你就会把它转到0到225之间去,如果是float的话,就把它转到0到1,这个时候再进行可视化的时候,这个结果才是对的。那关于图像的色彩模式和颜色空间呢?我们给大家介绍这么多。

接下来呢,我们来看一下在图像处理中的一些常见的概念,这些概念呢,也是我们在利用深度学习解决一些图像数据的时候呢,经常会用到的一些常见的概念。大家在解决视觉问题的时候呢,首先是需要去搞清楚这些概念。

二, 5-2 图像处理常见概念


我们在介绍完计算机视觉的基本概念之后呢,我们再来看一些关于常见的图像处理的概念。那首先呢,就是关于亮度,对比度,饱和度这些基本概念,我们之前再给大家介绍hsv颜色空间的时候呢,也给大家涉及到这样一些相关的内容,然后呢,就是在图像中经常会用到平滑和锐化,还有呢就是直方度均衡化图像滤波图像边缘提取等等啊这些基本的概念。


首先呢就是关于亮度对比度和饱和度,我们在之前给大家介绍hsv颜色空间的时候呢,给大家提到过色相饱和度。还有这个value明度这样的一些基本概念,那所谓的亮度呢,实际上就是指图像的一个明亮程度。黑色它的亮度是最差的,白色它的亮度是最高的。我们通过调节从0到255,这256个值来使图像它的明亮程度呢变得越来越亮,这个呢,我们就能够改变图像的一个明亮程度。

那具体如何去改变一个图像的明亮程度呢?我们通常会做的做法呢,就是比如说我们可以将图像转换到hsv这个颜色空间中去,然后去调整每一个像素点。它的value这个值。这个时候呢,我们的图像就会变亮。或者呢,我们在RGB这个颜色空间上呢,我们可以直接对这个RGB每一个像素点的这三个值加一个值。这个时候我们图像就会变亮,为什么我们直接加它就会变亮呢?我们可以从灰度图的这个角度去理解啊,我们将一个彩色图转化成灰度图的时候呢,这个时候我们通常会用到的一种方法呢,就是对RGB这三个值呢,每一个像素的RGB这三个值进行加权,那在进行加权的时候呢,如果我们将它所有的值,就是RGB这三个值,每个值都加一个相同的值,那这个时候对应到的那个灰度值就会同样也会加一个相应的值,那这个时候呢,在灰度图上它就会变得更偏向白一点,图像就变亮了。所以我们在进行图像亮度调整的时候呢,经常用到的方法呢,就是直接加一个值,或者是减一个值。我们将图像的这个矩阵定义成M矩阵,那也就是说M矩阵加上一个亮度值,加上一个value,。或者是说减去这样的一个value。那这个时候我们的图像就会变亮或者是变暗。那在进行这个亮度调整的时候呢,我们一般是对这个图像整体这个全部的数据进行一个加同样的值或者是减同样的值这样的一个操作,使图像的整体上去变化。

然后呢,就是对比度,对比度呢,它描述的是图像中最亮的地方和最暗的地方,它的一个落差值,它的一个偏差,如果这个偏差值越大,就表示我们图像的对比度越大,如果这个偏差值越小呢,就表达了我们这个图像的对比度呢越小,那我们在进行图像对比度调整的时候呢,一般是对这个图像矩阵呢,乘上一个值。大家要注意啊,这里是不是矩阵的运算,是矩阵和数值的一个运算,我们乘上一个值V,如果这个值V是大于1的,就意味着我们最亮的那个值和最暗的那个值,它的偏差被拉大了。如果值V小于1的话,那这个时候呢,就意味着这个偏差变小了,大家可以去理解一下这个地方。

然后呢,就是饱和度,饱和度呢,它表示的是呢,图像的颜色种类的多少,如果饱和度越高呢,我们图像的种类呢,也会越丰富。在色彩上看,我们去看这幅图,它的饱和度越高,它的图像中的这个色彩啊,它的种类就会越丰富,从外观上来看呢,这个图片呢,也会越鲜艳,那对于亮度饱和度和对比度的调整呢,我们通常呢,在进行亮度对比度的时候呢,我们直接在RGB的图上呢,来对图像进行数据增强,也就是对图像这个矩阵呢,我们对它乘上一个值,我们将它定义成乘上V1,然后再减去一个值V2。这个时候呢,我们就能够完成对图像亮度和对比度的一个数据增强。

而对于饱和度呢,我们通常的做法呢,是将它转化到HSV,HSI或者HSL空间,包含了这个饱和度的这个维度的这个空间上呢,来对它进行分享。那通过调整饱和度呢,我们来改变图像中颜色的它一个种类。大家要注意啊,这里这个种类和我们所谓的这个色相,是两个不同的概念啊。就是比如说深红和浅红,我们也将它表示成两种颜色。但是从色相上来看,它们都属于红色。那通过从色彩、空间上来对图像呢进行丰富,我们能够提高模型训练的时候,对这些噪声啊,对这些由于声色带来的一些偏差呀,可以使我们的模型呢,对这些变化呢,更加的鲁棒性

那除了亮度和对比度以外呢,再有就是图像的平滑和降噪。平滑和降噪呢,一般是我们可以把它理解成是同一个概念啊。我们通过平滑的方式来解决图像噪声的问题,那图像平滑和降噪呢,也是我们在解决图像处理任务的时候呢,经常会用到的一个概念,尤其是高斯滤波,我们经常会用到这些方法去对我们拿到的分色的图像呢,做一些基本的一些处理。那所谓的图像的平滑呢,实际上就是用于突出图像宽大的区域、低频的部分和主干部分,抑制图像的噪声,干扰高频成分的图像处理方法。那在图像中它包含了低频的部分和高频的部分,所谓高频的部分它主要是指,在图像中的这些噪点,边缘点,这些呢,都属于高频的部分。而低频的部分呢,我们可以理解成是在图像中的一些色块,它都属于一些低频的部分。

而图像平滑呢,主要就是为了抑制这些高频的部分,比如说图像噪声。噪声呢,在图片中经常存在的就是一些孤立的点,而通过图像平滑的方式呢,我们就是将这些孤立的点呢,它尽可能的抑制住,使得图像的质量得到改善。那常用的一些图像平滑的方法呢,就包含了一些,高斯滤波,中值滤波,双边滤波,还有归一化块滤波,我们简单的去理解这个所谓的这些平滑和滤波这些方法,其实就是对于图像中的某一个点,我们用它的领域点来进行表示。那在PPT中呢,我们给大家列出了这样的一个经过图像平滑之后的这样的一幅图片,我们可以看到啊,在经过图像平滑之后呢,图片呢,明显是变得有一些些模糊了。

那给大家举个例子啊,我们举一个有噪点的例子,比如说我这样的一幅图片在图片的一个低频的部分,就是那个连续的色块里,就是这块区域是一个连续的色块。它的值是一个三乘以三的矩阵。我们讲这个色块啊,它的值分别就是周边是10,,然后这里中间来个255。我们对于这样的一个色块在图像上的时候,这个255的纸就特别扎眼,一看这个地方有一个点,这个点跟其他的周边的色块都不一样。这个点呢,我们经常会将它定义成噪点,那这个噪点我们怎么样将它过滤掉呢?

比如说我们采用高斯滤波的时候,那这个时候我们就会对于这个点,我们会用它邻域的这些值来进行高次函数的计算,计算之后呢,我们将这个值呢替换掉,发现这里周边的值都是10,那这个地方是255,我们算出来的这个值往往它会和这个10更接近。那我们也可以用中值滤波的话,就是我们对比如说我们用一个1乘以3的这样的一个中值滤波器,那这个时候呢,我们的数据就变成10,255的排序,排完序之后呢,我们取中间这个值,这个时候呢,255也会被我们滤波成10。我们有一系列的方法去对中间这个值进行平滑抑制,这个时候呢,我们的图像数据就变成了一个连续的色块,或者说这个高频的区域呢,就被我们抑制住,图像的这个数据上会变得更平滑,但是这样去做有一个问题,就是我们在一些边缘点,大家可以看到在这个我们给出大家列出这幅图像中,它的一些边缘的点是明显有些色差的点

那如果我们通过一些滤波的方法,在对边缘点进行处理之后,我们不仅会抑制住噪声,同样也会对这个边缘点呢,也会进行一些抑制,导致我们的这个边缘呢,看着没有之前那么清晰了。在PPT中给大家列出这幅图,大家可以看到在这些边缘点上实际上也是变得有些模糊了,整个图像看起来就有一些糊的。这也是图像平滑会带来的一些问题。那这个时候呢,我们就需要去调整它的一些滤波器的参数。在我们的图片质量和抑制噪声之间呢,做一个选择。

那除了图像平滑以外呢,我们还可以对图像呢进行锐化和增强,图像平滑呢,主要是抑制高频的部分,保留低频的部分,而图像锐化呢则是相反,我们去增强高频的部分。进而呢来减少图片中的模糊,使得图片它的轮廓和边缘呢变得更加的明显。图像锐化呢和图像平滑呢,属于相反的操作。

那我们具体来看啊。在PPT中给大家列出了这样的两幅图片。对于第一幅图片呢,我们对图像的边缘进行了提取,这个时候呢,我们可以看到经过边缘提取之后呢,我们只保留了图像的边缘,而对于这些连续的色块,也是所谓的这些低频的部分呢,我们就去掉了,然后呢,我们再将这个边缘呢,将它加到这个原始的图片上去,这个时候呢,我们的图片可以看到它的边缘信息呢,变得更加的突出。图片的纹理结构和它的轮廓呢,也变得更加的鲜明,尤其是在这个脸部啊,大家可以看看。在经过锐化之后。就变化还是比较明显的。

那我们通过图像锐化所带来的一些优点,就是我们边缘轮廓边的更加清晰了,同样呢,它也会带来一些问题,就是可能会增加图片中的噪声,我们一直讲图片噪声,它和边缘其实是都属于高频部分的,我们在经过实际上对话的时候。在增强这些高频部分的时候呢,就难免的会使我们的噪声也变得更加的突出。那对于图像锐化呢,我们经常用的方法呢,就包含了微分法,高通滤波法等等啊,有很多的方法去做。具体呢,我就不给大家介绍这些算法的一些原理了,大家呢,感兴趣的话可以去了解一下。

那再有呢,就是边缘提取,我们在给大家介绍这个锐化的时候,给大家看到这一幅图,其实就是在进行了边缘提取,边缘提取呢,其实也是我们在进行计算机视觉问题的时候呢,必须要了解的一个概念。通过边缘提取呢,我们可以去完成对图像纹理信息的一个抓取

那对于图片数据呢,我们一直给大家强调,在图片中呢,包含了高频的这样的一个数据和低频的部分呢,就是连续的色块,而高频的部分呢,则主要集中在了图像的边缘和图像的噪声上。那我们在进行边缘提取的时候呢,经常采用的一种方法呢,就是采用微分的方式。来计算图像的边缘。在图像微分的这些方法中呢,大家应该比较熟悉的一点就是梯度。我们如何去计算一个图像的边缘,实际上就是可以利用梯度的方法。进行微分的求解。去拿到每一个相似点的边缘。所谓的边缘实际上就是图片中相邻的这些像素点,它的色差或者说它的灰度值相差比较大的。

这些点都是所谓的这个边缘点。灰度值的越大,它的边缘越清晰,值差越小,它的边缘呢越不清晰,所以呢,我们只需要去用相邻的这个像素做差,我们这个时候呢就能够拿到。我们所谓的这个图像的边缘,这就是所谓的这个微分,微分呢其实就是做差,我们再来去理解这个图像平滑,实际上图像平滑呢,很多时候比如说我们用到的高斯滤波啊等等啊,这些滤波器,它其实都是做了一个积分的操作,积分的操作实际就是求和,而微分则是求差。大家再去理解一下这两个概念。

那基于这样的一个图像相邻像素求差的这样的一个思想呢,实际上就有了非常多的算子啊,那我们到底用它的周边的几个像素来进行求差,在进行求差的时候,每个像素算出来这个差,它的权重到底应该是多少。这个时候呢,根据不同的这个权重,不同的相邻像素,就出现了非常多的算子。比如说罗伯特算子,索贝尔算子,拉普拉斯算子啊等等,这些算子呢,其实都是定义了这样的不同的pattern,不同的模板,然后呢,我们将这个模板呢和图像中的某一块区域来进行乘加的操作,那其实这个乘加就是在做差,我们可以看到啊。对于这个50的这个点。我们取它的一个八领域。然后呢用这个八领域和这个pattern做乘法,乘完之后的值呢,我们再进行相加,拿到当前这个值的一个边缘点的一个值。

那在进行乘加这个操作的时候,我们分别来看一下,比如说这两个值,这两个1和-1,我们看到这个-1和1其实就是50乘上-1,100乘上1,再进行相加。那其实就是用这个100减掉50,这里也是100减掉50。只是这里是-2,也就是-2乘上50,再加上这个100乘上2。那就是100减去50的,再乘上2。然后这里也是100减去50,其实就是在用相邻元素来做差。这个时候我们就能够拿到在垂直方向上一个边缘信息。我们如果将这个,这个函数呢,进行一个转置,这个时候我们就能够达到水平方向上的一个梯度值。那这个算子呢,其实就是索贝尔算子。另外就是拉普拉斯算子,这些算子和索贝尔算子,它的一个基本思想基本上是大致相同的。

而这个pattern,我们将它称之为一个模板,而在我们接下来给大家介绍这个深度学习中呢,这个模板呢,我们就将它称之为是一个K。也就是一个所谓的核****。那根据不同的模板呢,我们就能够算出不同的边缘信息,我们可以看到在PPT中呢,给大家列出了这样的三种不同的边缘信息,这就是所谓的这个纹理图像**。

那在介绍完边缘提取算子之后呢,我们再来看图像中的直方图均衡化,在图像中呢,我们拿到一幅图像数据的时候呢,有的时候我们的图像数据它会在整个这个空间分布上呢,它只是分布在了很小的这样的一个局部的这样的一个空间中。

在PPT中呢,我们给大家列出了这样的一幅图,我们可以看到我们对图像中的数据进行直方图统计。统计完直方图之后,我们会发现啊,对于正常的图像,我们会看到它的数据的分布,实际上是比较呈现这样的一个高斯分布。在图像数值中间的部位呢,数据的分布量呢会比较多一点,而在两端呢,它的分布呢会少一点。如果我们的图像数据在分布上,它更偏向于左,也就是偏向于小值的部分,那这个时候呢,我们的图像呢会偏暗,如果是偏向于右边。这个时候呢我们拿到这个图像数据呢,它会偏亮

而如果我们的这个分布,它没有那么均匀,我们可以看到有很多的数据会集中的分布在这个中间的部位,那这个时候呢,我们就会发现这个图像它的亮度过于集中。那这个时候呢,我们就需要对BCD这三种情况呢,对这个图像数据呢进行一些拉伸,将它的数值呢分布的更加均匀,这就是所谓的这个直方图均衡化。我们通过将原始图像呢,经过某种变换拿到它的灰度直方图分布较为均匀的这样的一幅新的图像,那这个方法就是所谓的这个直方图均衡化,我们通过对直方图进行均衡化处理之后呢,我们就可以去将这个图像中像素的个数,它的灰度集进行展宽。在展宽之后呢,图像也会变得更清晰。

对比度往往呢也会拉大,这个也是很容易理解的。如果我们的图像数据,本来它是分布在A和B这两个值之间的,那我们将它拉伸到A撇和B撇。之后这个它的对比度就明显会变大。因为从A和B它们之间的差是这一块,而A撇和B撇明显差变大了,那对比度也会被拉大。那我们在PPT中呢,给大家列出了这样的一幅图,我们可以看到经过直方图均衡化之后,我们整个图像也变得更加清晰了。

那在介绍完图像均衡化的基本概念之后呢,我们再来看图像滤波,那所谓的图像滤波呢,其实就是我们去改变图像质量的一种方式。我们可以通过不同的滤波器来实现图像的平滑,图像的锐化等等,那对于图像滤波呢,我们经过滤波之后呢,可以去强调一些特征,比如说我们所谓的图像锐化,就是强调我们高频的部位。或者是去掉图像中一些不需要的地方,比如说我们经过图像平滑,就是去掉噪声,这些不需要的元素。

另外呢,我们通过图像滤波呢,也可以去完成边缘的提取,这个时候呢,我们就需要一些领域操作的算子,来对图像它的像素值进行重新的计算,在计算的时候呢,我们利用它的邻域信息来进行计算,拿到这个当前这个像素点的最终的输出值。那常见的应用呢,就包含了图像降噪,图像增强,边缘检测,以及一些角点检测,模板匹配等等一些相关的应用,我们常用的这个滤波器啊,也包含了均值滤波器,中值滤波器,高斯滤波器,双边滤波器等等很多滤波器。

而在深度学习中,我们所用到的这些卷积算子,我们也可以将每一个卷积核称为一个滤波器,所以我们在定义卷积参数的时候呢,经常会用到一个filter的概念,那其实这个就是滤波器。这个滤波器的概念呢,就是从这里来的。我们将这个领域的这个操作,将它抽象成数学函数的话,其实就是在PPT中给大家列出的这样的一个函数,我们对于图像中的 I 和 J 这样的一个像素点,我们利用一个核以及它的领域信息进行一个成加的操作。最终呢,拿到重新计算过之后的输出,这个输出呢,可能是去掉过之后的输出,可能是增强过之后的输出,也可能是检测边缘之后的一个输出等等。

再有呢,就是形态学运算。形态学运算也是我们在进行图像处理的时候,经常会用到一种前处理方法或者是后处理方法。比如说我们在检测一些区域,斑点等等这些操作的时候呢,我们会利用形态学运算呢,去将这个斑点区域呢,进行一些腐蚀和膨胀,去掉一些小的斑点等等,然后所谓的形态学运算呢。其实就是对图像呢进行腐蚀和膨胀的一个操作,所谓的腐蚀呢,就是将图片呢变瘦。它的一个基本的原理呢,就是在原图的区域中呢,我们取一个局部最小值,那在PPT中呢,我们给大家列出了这样的一个基本的例子啊,这是一个原始图像,在经过腐蚀过之后呢,我们会发现这个图片变瘦了。而膨胀呢则是和腐蚀相反,我们取局部的最大值,然后把图片呢变胖。我们可以看到啊,在经过膨胀之后呢,我们这个图片呢,它变胖了,在经过腐蚀之后,我们的图片变瘦了。

而开运算呢,则是对图片呢,先进行腐蚀后进行膨胀。因为我们经过腐蚀之后,那物体和物体之间呢,会变得更分离。而闭运算呢,则是我们先进行膨胀,后进行腐蚀。经过膨胀之后呢,我们会将图片的区域呢进行扩充,这个时候我们就去掉一些因为我们算法处理不当,导致一些连续的物体被分开了这种现象

我们结合腐蚀和膨胀这样的两种运算呢,我们可以去进行形态学梯度的计算,就是我们利用膨胀图和腐蚀图来进行一个差。做完差之后呢,我们就能够拿到轮廓。另外还有两个概念呢,叫顶帽和黑帽,这两个概念其实我们用的不是很多啊,就是用原图来去掉开运算之后的图,或者是说我们用闭运算后的图呢,再减去这个原图,我们会拿到一些边缘图或者是纹理图,这样的一个操作呢,我们就将它称之为顶帽和黑帽,这里呢,用的比较多的呢,就是开运算和闭运算。

这里呢,我们简单的给大家介绍了一些在图像处理中的一些基本的一些运算,那对于这些基本的运算呢,实际上在opencv中呢,有非常多的函数来完成对这些运算的知识。那opencv呢,也是我们最常用到的图像处理的库。在opencv中呢,和这些图像处理相关的一些函数呢,分别包含了,比如说imread就是我们去读取一幅图片,imshow去显示一些图片,convert color就是我们将图片的颜色空间进行转换,比如说我们从RGB空间转到灰度空间,从RGB空间转到hsv空间等等啊。然后还有就是一些blur ,高斯等等啊,这些滤波器,这些平滑算子。还有就是腐蚀膨胀,包括边缘提取算子,还有图像直方图均衡化。等等这些基本的图像处理的操作呢,在open中呢,基本上都是有函数来支持的。

所以大家再去实现某个功能的时候呢,首先要查一查,就是opencv是否能够通过函数调用的来解决这个问题,然后关于图像处理的一些基本的方法和概念。

05卷积神经初探之(5.1计算机视觉基本概念 5.2图像处理常见概念)相关推荐

  1. 04.卷积神经初探(5-3 特征工程)

    04.卷积神经初探(5-3 特征工程) 一,5-3 特征工程 来自慕课网 一,5-3 特征工程

  2. 怎么用卷积神经网络模型去雾

    通过卷积神经网络去除图像中的雾,通常是通过训练一个模型,使其学会从原始图像中识别和分离雾的特征,并将这些特征去除. 训练过程通常需要大量的有标记的图像数据,每个图像都有一个清晰的版本和一个有雾的版本. ...

  3. 深度学习--TensorFlow(8)CNN卷积神经网络理论(计算机视觉)

    目录 计算机视觉介绍 1.计算机视觉应用 2.计算机视觉技术 图像分类 目标检测 目标跟踪 语义分割 实例分割 BP神经网络的缺点 一.卷积神经网络简介 1.卷积 2.全连接与局部感受野 3.权值共享 ...

  4. 第05章 深度卷积神经网络模型

    序言 1. 内容介绍   本章介绍深度学习算法-卷积神经网络用于 图片分类 的应用,主要介绍主流深度卷积神经网络 (CNN) 模型,包括 ResNet DenseNet SeNet 的算法模型.数学推 ...

  5. 【卷积神经网络结构专题】经典网络结构之VGG(附代码实现)

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]本文是卷积神经网络结构系列专题第三篇文章,前面我们先后介绍了LeNet和A ...

  6. 卷积神经网络模型可解释性

    卷积神经网络模型可解释性 缺乏可解释性仍然是在许多应用中采用深层模型的一个关键障碍.在这项工作中,明确地调整了深层模型,这样人类用户可以在很短的时间内完成他们预测背后的过程.具体地说,训练了深度时间序 ...

  7. 【卷积神经网络结构专题】一文详解AlexNet(附代码实现)

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]本文是卷积神经网络结构系列专题第二篇文章,前面我们已经介绍了第一个真正意义 ...

  8. 【卷积神经网络结构专题】一文详解LeNet(附代码实现)

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 近期,公众号将推出卷积神经网络结构系列专题文章,将深入浅出的为大家介绍从1998年 ...

  9. 卷积神经网络模型解读汇总——LeNet5,AlexNet、ZFNet、VGG16、GoogLeNet和ResNet

      在我的个人博客上一篇博文中分析了卷积神经网络的结构与相关算法,知道了这些基本原理之后.这篇博文主要介绍在卷积神经网络的发展历程中一些经典的网络模型. LeNet5   LeCun等将BP算法应用到 ...

最新文章

  1. python实现D‘Agostino‘s K-squared test正态分布检验
  2. LeetCode Reverse Nodes in k-Group(单链表连续分段反转)
  3. Seamless cloning泊松克隆
  4. 你是如何坚持读完《算法导论》这本书的?(帖子收集)
  5. 习题6-2 使用函数求特殊a串数列和 (20 分)
  6. SCCM2007系列教程之八资产管理
  7. 木马群起攻击Word文档 360补丁保护办公安全
  8. Java多线程系列--【JUC集合08】- LinkedBlockingQueue
  9. DirectAdmin+阿里云免费SSL证书 面板里安装SSL
  10. html5分镜头脚本范例,(最新整理)分镜头脚本范本
  11. Android锁机病毒分析
  12. 腾讯手机充值小程序/话费充值/指定充值号码
  13. 使用OneDNS完美解决办公网络优化问题
  14. Adobe Reader Acrobat Pro XI在连网下打开几秒后,卡顿并自动退出问题解决措施
  15. Markdown KeTex 德尔塔等于符
  16. Matlab/simulink通信系统仿真入门操作
  17. 牛客Top101 JS合并两个排序的列表
  18. Paper.js入门:项目和项目
  19. 计算机房空调冷却水协议印花税,某数据中心三联供项目的专业技术经济分析.doc...
  20. 工程伦理--1.1 第四次工业革命

热门文章

  1. 机器学习特征工程——类别相关统计特征
  2. 电容参数:X5R,X7R,Y5V,COG 详解
  3. [tcache double free + orw]MynoteMax
  4. java抖音直播间转发机制_抖音直播间引流全攻略分享
  5. 美国最高法院确定保密或不公开技术细节之销售仍将触发on-sale bar导致丧失可专利性
  6. unity3D萌新知识
  7. CX8830 车充IC兼容APPLE,BC1.2,AFC,FCP,VOOC协议
  8. css 鼠标滚轮滚动样式
  9. DirBuster使用教程
  10. 【图像识别】基于 Haar分类器实现五官定位matlab源码含 GUI