你曾想过如何将图像存储在数据集中吗?

全文共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,加入读者圈,一起讨论最新鲜的人工智能科技哦~)