为什么要进行图像预处理?大概是为了
(1)使得原始图像符合某种既定规则,便于后续处理。
(2)去除图像中的影响后续处理精度、准确度的因素,如噪声等。
(3)在正式处理前进行处理,减少后续的运算量,加速收敛(为什么会提高收敛速度,可以参见这篇博文图像数据预处理对收敛速度的影响),提高后续步骤的可靠性。
大概分为去均值、归一化、PCA、白化几种。
假定数据表示成矩阵为X,其中我们假定X是[N*D]维矩阵,N是样本数据量,D为单张图片的数据向量长度。假设要处理的图像是5*5的彩色图像,那么D即5*5*3=75(因为彩色图像有三个通道),假设N=1000,那么X就是10000*75的矩阵,即1000行图像的信息,每一行代表一个图像的信息。
去均值:
对待训练的每一张图片的特征,都减去全部训练集图片的特征均值,这么做的直观意义就是,我们把输入数据各个维度的数据都中心化到0了(比如数据集3 、5 、7,其均值为5,各减去5后的数据集变为-2、0、2,此时平均值为0)。这么做的目的是减小计算量,把数据从原先的标准坐标系下的一个个向量组成的矩阵,变成以这些向量的均值为原点建立的坐标系,使用python的numpy工具包,这一步可以用X -= np.mean(X, axis = 0)轻松实现。
归一化:
归一化是保证所有的维度上数据都在一个变化幅度上。
比如预测房价的例子中,假设房价由面积s和卧室数b决定,面积s在0~200之间,卧室数b在0~5之间,进行归一化的一个实例就是s=s/2000,b=b/5.
通常我们有两种方法来实现归一化。一个是在数据都去均值之后,每个维度上的数据都除以这个维度上数据的标准差(X /= np.std(X, axis = 0))。 另外一种方式是我们除以数据绝对值最大值,如上面的实例,以保证所有的数据归一化后都在-1到1之间。多说一句,其实在任何你觉得各维度幅度变化非常大的数据集上,你都 可以考虑归一化处理。不过对于图像而言,其实这一步反倒可做可不做,像素的值变化区间都在[0,255]之间,所以其实图像输入数据天生幅度就是一致的。
PCA和白化:
来源:CSDN
作者:Andy-Miao
链接:https://blog.csdn.net/mmww1994/article/details/81709260