64、图片预处理:Normalize

上一篇介绍了图像预处理中 resize 和 crop 的概念,在仓库的 python 预处理函数中,在 resize 和 crop之后,还有几个预处理的过程:一个是归一化,另外就是transpose 和reshape。

这一节就介绍一下,为什么在推理之前还需要对图像进行归一化。

归一化(Normalization)

在深度学习中,推理或训练之前对图像进行预处理,特别是归一化,是一种非常常见的做法。

那为什么要做归一化呢?

使用归一化的目的是将输入数据进行标准化,使输入的数据具有相似的分布。

什么意思呢?我们以图像举例子,不同的图片之间数据分布差异是很大的,有些图片的像素值普遍偏大,而有些图片的像素值偏小。

数据分布的不同,会导致神经网络在训练或者推理时出现较大的偏差,有时会导致训练收敛困难,推理误差较大。

这一点我们在介绍bn算法的时候曾经说到过,Bn 算法就是为了纠正在隐藏层与层之间,由于数据分布不一致而导致的模型难以收敛的问题,可以翻回到 bn 介绍的那一节再复习一下。

所以在将不同的图片送给神经网络进行推理之前,我们也需要对不同的图片中数据分布进行归一化,以纠正不同图片样本之间的数据偏差,从而使得模型更好地完成推理。

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个加入了图片数据集的图片预处理相关内容的代码示例,包括图像去噪、图像增强、图像平滑和图像缩放: ```python import cv2 import numpy as np import os # 读取图像数据库并进行预处理 database = {} for filename in os.listdir('database'): img = cv2.imread(os.path.join('database', filename)) # 图像去噪 img = cv2.fastNlMeansDenoisingColored(img, None, 10, 10, 7, 21) # 图像增强 clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img = clahe.apply(img) # 图像平滑 img = cv2.GaussianBlur(img, (3,3), 0) # 图像缩放 img = cv2.resize(img, (256, 256)) # 提取颜色特征 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) hist = cv2.calcHist([hsv], [0,1], None, [180, 256], [0, 180, 0, 256]) hist = cv2.normalize(hist, hist).flatten() database[filename] = hist # 读取查询图像并进行预处理 query = cv2.imread('query.jpg') # 图像去噪 query = cv2.fastNlMeansDenoisingColored(query, None, 10, 10, 7, 21) # 图像增强 clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) query = cv2.cvtColor(query, cv2.COLOR_BGR2GRAY) query = clahe.apply(query) # 图像平滑 query = cv2.GaussianBlur(query, (3,3), 0) # 图像缩放 query = cv2.resize(query, (256, 256)) # 提取颜色特征 hsv = cv2.cvtColor(query, cv2.COLOR_BGR2HSV) hist = cv2.calcHist([hsv], [0,1], None, [180, 256], [0, 180, 0, 256]) hist = cv2.normalize(hist, hist).flatten() # 计算查询图像与数据库中所有图像的相似度 results = {} for filename, hist_db in database.items(): score = cv2.compareHist(hist, hist_db, cv2.HISTCMP_CORREL) results[filename] = score # 按相似度从高到低排序输出结果 sorted_results = sorted(results.items(), key=lambda x: x[1], reverse=True) for filename, score in sorted_results: print(filename, score) ``` 在这个示例中,我们对每个图像进行了以下预处理: 1. 图像去噪:使用快速非局部均值去噪算法 `cv2.fastNlMeansDenoisingColored()`; 2. 图像增强:使用对比度受限自适应直方图均衡化 (CLAHE) `cv2.createCLAHE()`; 3. 图像平滑:使用高斯滤波器 `cv2.GaussianBlur()`; 4. 图像缩放:使用 `cv2.resize()` 将图像缩放为固定大小。 然后,我们提取了每个图像的颜色特征,并计算查询图像与数据库中所有图像的相似度。最后,我们按相似度从高到低排序并输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董董灿是个攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值