二:图像归一化处理 |
您所在的位置:网站首页 › matlab做归一化处理 › 二:图像归一化处理 |
二:图像归一化处理 图像归一化最常见的就是最大最小值归一化方法,公式如下: OpenCV中实现图像最大与最小值归一化的函数如下:normalize(src, // 表示输入图像, numpy类型dst, // 表示归一化之后图像, numpy类型alpha=None, // 归一化中低值 minbeta=None, // 归一化中的高值maxnorm_type=None, // 归一化方法,选择最大最小值归一化 NORM_MINMAX,dtype=None, // 归一化之后numpy数据类型,一般选择cv.CV_32Fmask=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数据集,全部采用了归一化之后的结果作为输入图像数据来演示神经网络与卷积神经网络。 实验 image = cv2.imread(r"D:\test_picture\9.jpg")#uint8 (372,419,3) [[[252 246 233][252 246 233].........]] cv2.imshow("input", image) #print(image) result = np.zeros(image.shape, dtype=np.float32) #cv2.normalize(image, result, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F) result = image/255.0 #与cv2.normalize效果一样 #result = image/127.5 - 1 #也是对图像进行归一化,范围为[-1, 1] print(result)#float64 (372,419,3) [[[0.98823529 0.96470588 0.91372549] [0.98823529 0.96470588 0.91372549].....]] img = np.uint8(result*255.0)# print((image == img).all())#true cv2.imshow("norm",result)#result 和 img的显示效果一样,灰度图除以255就是进行以归一化处理,你可视化的时候会映射到图像空间的。 cv2.waitKey(0) cv2.destroyAllWindows() #im = Image.fromarray(result)#TypeError: Cannot handle this data type #im.show() 252 / 255 = 0.98823529#result 和 img的显示效果一样,灰度图除以255就是进行以归一化处理,你可视化的时候会映射到图像空间的。 在代码中看到图像的2种处理方式: img/255.0 img/127.5 - 1 第一种是对图像进行归一化,范围为[0, 1],第二种也是对图像进行归一化,范围为[-1, 1],这两种只是归一化范围不同,为了直观的看出2种区别,分别对图像进行两种处理: 从图中可以看出, 第二种方式图像显示的更黑,其直方图如下: 同样,其直方图的分布规律相同,第二种分布相对稀疏。
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |