使用深度学习在进行图像分类或者对象检测时候,首先需要对图像做数据预处理,最常见的对图像预处理方法有两种,正常白化处理又叫图像标准化处理,另外一种方法叫做归一化处理,下面就详细的说一下这两种处理方法。
标准化处理的公式如下:
tensorflow中对图像标准化预处理的API函数如下:
tf.image.per_image_standardization(image) - image 参数表示一个三维的张量(tensor) 分别对应图像高、宽、通道数目(height, width, channels)
函数返回处理以后的图像,大小与通道数目与原图像保持一致。 使用opencv+tensorflow对图像进行标准化处理的代码演示如下:
import tensorflow as tf import cv2 as cv image = cv.imread("D:/javaopencv/dahlia_4.jpg") cv.imshow("input", image) std_image = tf.image.per_image_standardization(image) with tf.Session() as sess: result = sess.run(std_image) print(result) cv.imshow("result", result) cv.waitKey(0) cv.destroyAllWindows()
运行效果
解释
图像标准化是将数据通过去均值实现中心化的处理,根据凸优化理论与数据概率分布相关知识,数据中心化符合数据分布规律,更容易取得训练之后的泛化效果, 数据标准化是数据预处理的常见方法之一
图像归一化最常见的就是最大最小值归一化方法,公式如下:
OpenCV中实现图像最大与最小值归一化的函数如下: normalize( src, // 表示输入图像, numpy类型 dst, // 表示归一化之后图像, numpy类型 alpha=None, // 归一化中低值 min beta=None, // 归一化中的高值max norm_type=None, // 归一化方法,选择最大最小值归一化 NORM_MINMAX, dtype=None, // 归一化之后numpy数据类型,一般选择cv.CV_32F mask=None //遮罩层,默认设置为None )
基于OpenCV实现图像最大最小值归一化的代码演示如下:
image = cv.imread("D:/javaopencv/dahlia_4.jpg") cv.imshow("input", image)