全文共2852字,预计学习时长8分钟
图源:unsplash
本文将研究如何将深度学习技术应用于研究非结构化数据(例如图像或文本),聚焦什么是图像以及如何使用图像数据。让我们开始吧!
图像数据集简介
先让我们看看如何将图像存储在计算机中:
图源:AnalyticsVidhya
这是一张数字8的图像。现在,如果继续对其进行放大图像便会失真,并且图像上将会出现一些小方块,这些小方块被称为像素。同样,我们使用X×Y表示图像维度,X和Y分别表示高度和宽度上的像素数。
我们是以这种格式看到图像,计算机则是以数字形式存储图像,其中每个像素均表示为数值,而该数值表示像素的强度。
图源:AnalyticsVidhya
对于灰度图像,强度范围为0-255。接近0的值表示较深的颜色,而接近255的值表示较浅的颜色。因此,计算机中的每个图像都以数字矩阵的形式存储,该矩阵也被称为通道(channel)。
现在来看看彩色图像是如何存储在计算机中的:
图源:AnalyticsVidhya
图像由多种颜色组成,几乎所有颜色都可以由三原色生成——红色,绿色,蓝色。可以说每个彩色图像由3种颜色或3个通道组成,即彩色图像通道数更多。
在该示例中,有3个矩阵或通道——R,G和B,矩阵中的每个值将介于0到255之间。当图像加载到计算机中时,所有这些通道都将叠加在一起,图片的形状变为 N x M x 3,其中N代表高度上的像素数,M表示宽度上的像素数,3表示通道数。
图源:AnalyticsVidhya
以上讨论的是两种最常见的格式,即灰度和RGB格式。
不同的图像格式
工作中将遇到不同类型的图像数据集,其中一些如下:
· 灰度图像:
图源:AnalyticsVidhya
· RGB图像:
图源:AnalyticsVidhya
· RGBA图像:
图源:AnalyticsVidhya
看看上图之间的区别。左起第一张图像非常清晰,第二张图像颜色稍淡,而第三张图像中几乎看不到颜色。
与RGB格式相似,RGBA图像存储为3D矩阵,其中矩阵的形状为N×M×通道数。RGBA图像有4个通道,第四个通道称为alpha通道,其中alpha控制颜色的不透明度或透明度。alpha值的范围在0–255之间,取0时图像是透明的,取255时则是原始图像。如果该值介于0到255之间,则图像会部分透明,具体取决于像素强度。
对于alpha=10,图像被完全遮挡;对于alpha=150(介于0-255之间),可以看到颜色部分可见,因此可以说它部分不透明;对于alpha=200,该值非常接近255,因此在这种情况下颜色是可见的,因此按原样显示图像。
· MRI图像:它们存储为4D矩阵,其中矩阵的形状如下——N × M ×切片×通道。例如大脑是3D对象,因此从下图中只能看到大脑的外部结构。为了捕获大脑的内部区域,我们创建了大脑的多个切片并捕获了每个切片,然后将它们堆叠起来以创建4D矩阵。这类图像在CT扫描和MRI(磁共振成像)中使用较多。
图源:AnalyticsVidhya
1.图像阅读与堆叠
这部分介绍了图像的各种格式。如何读取图像,如何使用流行的python包skimage查看图像,以及通过减少代码量来使用glob显示相同格式的多个图像。另外,处理MRI图像时要使用一个笔者用过的热门库,即nibabel。
· 可以在我的GitHub链接上查找此部分的代码和图像文件:https://github.com/grajpal123/Reading_Stacking_Images_DL
2.将图像转换为不同格式
本部分介绍了不同类型的图像,以及如何将一种格式转换为另一种格式。还必须了解,将图像从较低质量转换为较高质量非常困难,比如将灰度图像转换为RGB图像。
· 可以在我的GitHub链接上查找此部分的代码和图像文件:https://github.com/grajpal123/Converting_Images_DL
3.提取图像边缘
本部分将讨论如何提取图像边缘。另外,将看到两种类型的滤波器,即Sobel和Prewitt。在进入示例之前,先要了解为什么边缘很重要。因为到要做的事情是从一堆图像中对物体是人、汽车还是动物进行分类,我们可以很容易地根据尺寸和形状对它们进行分类。
图源:AnalyticsVidhya
现在,稍微调整一下示例。调整后仍可以对它们进行一些分类。
图源:AnalyticsVidhya
调整前后之间的主要区别在于——调整后删除了颜色、背景和其他小细节。仅凭边缘仍然能够识别图像中的对象。因此,对于任何给定的图像,即使只能提取边缘、消除噪点,仍能够对图中对象进行分类。
图源:AnalyticsVidhya
可以清楚地观察到,在以上示例中,边缘周围的像素值显示了从左到右或从上到下的突然变化。基于此事实,我们可以识别出哪个像素代表边缘或哪个像素位于边缘。将像素值与其周围的像素值进行比较,以确定它是否代表边缘。例如:
图源:AnalyticsVidhya
可以使用矩阵执行对应元素相乘,以确定特定像素是否为边缘。
图源:AnalyticsVidhya
在上面的示例中,像素值略小于矩阵对应元素相乘的结果,因此可以说它位于边缘上,但不能表示边缘。
图源:AnalyticsVidhya
在上面的示例中,由于在应用矩阵后像素值变得非常大,可以明确地说这个高亮的像素值代表边缘。
现在以上示例中看到的此矩阵称为滤波器(filter)或核(kernel)。该核或滤波器会遍历处理整个图像以生成新的矩阵。该新矩阵称为特征图,该特征图能够表示像素是否位于边缘上。
核类型
图源:AnalyticsVidhya
Sobel和Prewitt滤波器之间的主要区别在于,Sobel滤波器给予目标像素旁边的像素值更高的权重,而Prewitt则不然。
· 可以在我的GitHub链接上查找此部分的代码和图像文件:https://github.com/grajpal123/Extracting_Edges_DL
本文介绍了图像的各种格式,例如RGB、RGBA、MRI和灰度图像,对它们的尺寸进行了简短的讨论,描述了如何进行图像的格式转换,并介绍了一个新的库nibabel,以处理MRI和CT扫描类型的图像。最后研究了各种类型的核,即Prewitt&Sobel,帮助提取对象的边缘特征并减少背景噪声,从而降低计算复杂度。
一起分享AI学习与发展的干货
欢迎关注全平台AI垂类自媒体 “读芯术”
(添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)