上文链接:Deep learning for Computer Vision with Python 计算机视觉和深度学习阅读笔记(1)
第三章 图像基础
3.1 像素
3.1.1 像素和颜色
像素是图像的组成元素,每张图片都由一系列像素组成。图像中的像素数量=长像素数*宽像素数。
大多数像素可分为两类:
- 灰度/单通道
- 彩色通道
灰色通道的像素是标量,其值在0~255之间,其中0为黑色,255为白色。
彩色通道的像素是一个红色、绿色和蓝色的三元组,它们的范围在0~255之间。我们通常使用8位int表示0~255之间的数字。
然而,通常,我们不会直接将图像的像素数据放入神经网络进行训练,而是进行数据转换过程,即使用一些加载方法(例如)OpenCV)将像素int数据转成float类型数据。
由于RGB颜色范围包括255的三次方,即1677216种颜色,因此可以使用绝大多数数数据集中图片的颜色RGB表示颜色。
3.1.2 构成图片数据
我们知道,RBG颜色是红、绿、蓝三个通道。因此,图片可以由三个部分组成,每个部分表示一个颜色通道。每个部分都是矩阵,可以使用W*H来表示。因此,一张彩色图片是由W*H*D来组成的,W是宽度,H是高度,D是通道数RGB颜色区域,D=3.
3.1.3 像素坐标系
像素的坐标表示不同于一般的数学坐标系,从0开始,左上角为(0,0),如图所示。
3.1.4 使用Numpy数组表示图片
OpenCV或者scikit-image表示图片的方式是一系列Numpy数组,每个numpy数组的shape为:(height, width, depth)注意,height在width原因是像素在图片中以坐标的形式表示 (y, x).
import cv2 image = cv2.imread("img.png") print(image.shape) cv2.imshow("Image",image) cv2.waitKey(0)
值得注意的是,OpenCV对于RGB排序方法是。
3.2 缩放图片(scaling)
缩放图片时,我们通常会固定图片的纵横比,以确保图片不会被过度压缩或拉伸。然而,固定纵横比的操作不适用于深度学习,因为神经网络的输入通常需要所有图片的固定尺寸。通常,深度学习所需的尺寸是:
32、64、64、224、224 227??227, 256??256, 299??299.
因此,我们仍然需要水平或垂直压缩图片。需要分析具体的压缩方法。对于一些数据集,不需要考虑压缩的影响;对于其他数据集,需要在改变尺寸之前进行一些处理。具体方法将在下一章中详细介绍。
第四章 图像分类基础
对于人类来说,图片很容易识别,你一眼就能看到图片的内容。但对于计算机来说,图片是由矩阵组成的。如果你想让计算机知道图片在表示什么,你需要应用图像分类任务。图像分类是计算机视觉的子主题。
举个例子。我们假设我们的图片数据集中包含三个类别:
然后,当我们将图片放入识别系统时,我们会得到这样的结果:
在计算机眼中,有两张不同的图片,即两个不同的矩阵。
一开始,计算机无法区分每张图片的内容。但是,我们可以从三个角度分解这张图:
计算机如何描述这些信息?方法是提取特征,将数据提取成特征向量。有一些传统的人工设计特征,如HOG、LBP;另一种方法是在深度学习中自动提取特征。
4.1 图像识别的挑战
图像识别会遇到各种挑战。一个目标在不同的因素下会有不同的变化,主要分类如下:
- 角度变化:在不同的角度下,物体的外观是不同的;
- 尺寸变化:一个物体会有多种尺寸,比如大杯、中杯、小杯;
- 变形:物品变形;
- 遮挡:目标物品被其他物品遮挡;
- 照明, 例如,强光弱光的影响;
- 背景杂波的影响;
- 类别内部的变化,如沙发、高脚椅、短凳等;
我们的图像识别系统应该足以识别上述变化,甚至组合变化。这是非常困难的。也许识别对象的范围可以缩小,使用特定的任务;例如,识别冰箱,而不是识别所有的厨房项目。()