原标题:深度学习训练-详解图像数据标准化与归一化
使用深度学习在进行图像分类或者对象检测时候,首先需要对图像做数据预处理,最常见的对图像预处理方法有两种,正常白化处理又叫图像标准化处理,另外一种方法叫做归一化处理,下面就详细的说一下这两种处理方法。
一:图像标准化处理
标准化处理的公式如下:
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)
result = np.zeros(image.shape, dtype=np.float32)
cv.normalize(image, result, alpha=0, beta=1, norm_type=cv.NORM_MINMAX, dtype=cv.CV_32F)
print(result)
cv.imshow("norm", np.uint8(result*255.0))
cv.waitKey(0)
cv.destroyAllWindows()
原图像素值输出
归一化之后像素值:
原图与归一化之后的运行结果完全一致,说明归一化不会改变图像本身的信息存储,但是通过打印出来的像素值可以发现,取值范围从0~255已经转化为0~1之间了,这个对于后续的神经网络或者卷积神经网络处理有很大的好处,tensorflow官方给出mnist数据集,全部采用了归一化之后的结果作为输入图像数据来演示神经网络与卷积神经网络。
为山者基于一篑之土,以成千丈之峭凿井者起于三寸之坎,以就万仞之深
【关于学堂】 - 获取微信联系
技术交流合作!
返回搜狐,查看更多
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。