深度学习基础——图像预处理中每个图片减去均值的原因(附python代码)

为什么每张图片都要减去mean值呢?

在计算机视觉领域中,一定免不了的就是图像预处理中的 逐个样本减去mean值的过程,那么为什么一定要做这一步呢?

其主要的原因就是,对于我们的自然图像其实是一种平稳的数据分布【即图像的每一维都服从相同的分布】。所以通过减去数据对应维度的统计平均值,来消除公共的部分,以凸显个体之间的特征和差异。下面就用一个图来直观的表示一下:
可以看到减去均值后的图b,天空的纹理被消除了,凸显出了图片中的车和高楼等主要特征

需要注意的是:用来计算均值的,一定要用训练集,否则违背了深度学习的原则(即模型训练仅能从训练数据中获取信息)。对于得到的mean值,训练集、验证集和测试集都要分别减去均值。

附上代码

# 首先,你需要安装numpy和opencv模块。
# opencv 可以通过下面的命令来直接安装。
pip install opencv-python
该代码,只需修改文件路径即可。
import os
import numpy as np
import cv2

# 这个是你图片的根目录,注意不要带中文路径,楼主就因为这个调试了很久。
image_path = '/train/image'  

file_names = os.listdir(image_path)

count = 0
mean = np.zeros(3, np.int64)


for i in file_names[1:]:
<think>好的,用户想了解或实现基于深度学习图像预处理技术和方法。我需要先整理一下相关的知识点。首先,图像预处理深度学习中确实很关键,能提升模型的性能和稳定性。根据用户提供的引用,有提到白化技术和医学图像预处理中的窗口设置。不过可能还需要补充更多常见的方法。 常见的图像预处理技术包括归一化、标准化、数据增强、尺寸调整、去噪等。用户提到的白化技术也是其中之一,不过现在可能用得更多的是标准化。需要区分这些概念,比如归一化通常是把像素值缩放到0-1之间,而标准化则是减去均值再除以标准差,使数据符合零均值和单位方差。 另外,医学图像预处理中的窗口设置,可能指的是CT或MRI中的窗宽和窗位调整,用来突出特定组织的对比度。这部分需要详细解释,因为医学图像处理有其特殊性。 数据增强方面,用户可能知道一些基本方法,比如旋转、翻转、裁剪,但还有更高级的如mixup、CutOut等。这些方法可以增加数据的多样性,防止过拟合。 然后,白化技术,引用中提到了消除冗余信息,可能需要说明其数学原理,比如通过PCA白化或ZCA白化。不过现在在深度学习中,可能更常用的是简单的标准化,白化可能因为计算复杂而较少使用。 还要考虑不同任务下的预处理差异,比如分类、检测、分割可能需要不同的处理步骤。例如,在医学图像分割中,可能需要进行直方图均衡化来增强对比度。 代码示例方面,可能需要展示一些具体的操作,比如使用OpenCV或PIL库进行归一化,或者用Keras的ImageDataGenerator做数据增强。不过用户提供的引用中有源代码示例,可能需要参考那个结构。 另外,用户可能对如何实现这些预处理感兴趣,所以需要给出实际的代码片段,比如Python中的实现方法。例如,展示如何对图像进行标准化,或者如何进行数据增强。 还要注意引用用户提供的参考文献,比如引用[1]和[2],在适当的地方加入引用标识。例如,在提到白化时引用[1],在医学预处理时引用[2]。 可能还需要补充一些其他技术,比如直方图均衡化、灰度化、色彩空间转换(如RGB转HSV),以及针对特定任务的预处理,比如人脸检测中的对齐。 最后,生成的相关问题需要与主题相关,比如不同任务预处理的差异、标准化与归一化的区别、医学图像的特殊处理等。这能帮助用户进一步探索。</think>### 深度学习中的图像预处理技术和方法 在深度学习中,图像预处理是提升模型泛化能力和收敛速度的关键步骤。以下是常见的预处理技术及其实现方法: --- #### 1. **基础预处理** **(1) 归一化 (Normalization)** 将像素值从$[0,255]$缩放到$[0,1]$或$[-1,1]$,避免数值差异过大影响梯度更新。 ```python import numpy as np image = image.astype(np.float32) / 255.0 # 缩放到[0,1] ``` **(2) 标准化 (Standardization)** 对图像进行零均值化和单位方差化,公式为: $$x_{\text{new}} = \frac{x - \mu}{\sigma}$$ 其中$\mu$为均值,$\sigma$为标准差。常用于消除光照差异[^1]。 ```python mean = np.mean(image, axis=(0,1)) std = np.std(image, axis=(0,1)) image = (image - mean) / (std + 1e-8) ``` --- #### 2. **数据增强 (Data Augmentation)** 通过几何变换或颜色扰动增加数据多样性,防止过拟合: - **几何变换**:旋转、翻转、裁剪、缩放 - **颜色扰动**:调整亮度、对比度、饱和度 - **高级方法**:Mixup、CutOut、CutMix ```python # 使用Keras的ImageDataGenerator from tensorflow.keras.preprocessing.image import ImageDataGenerator datagen = ImageDataGenerator( rotation_range=20, width_shift_range=0.2, horizontal_flip=True ) ``` --- #### 3. **医学图像预处理** 医学影像需结合领域知识优化: - **窗宽/窗位调整**:突出特定组织的对比度(如CT图像中设定窗宽400HU、窗位40HU显示肝脏)[^2]。 - **直方图均衡化**:增强图像对比度。 - **ROI裁剪**:聚焦目标区域,少计算量。 ```python # CT窗宽调整示例 def apply_window(image, window_center, window_width): min_val = window_center - window_width / 2 max_val = window_center + window_width / 2 image = np.clip(image, min_val, max_val) return (image - min_val) / (max_val - min_val) ``` --- #### 4. **白化 (Whitening)** 通过线性变换消除像素间的相关性,常见方法包括PCA白化和ZCA白化。公式为: $$x_{\text{white}} = W \cdot (x - \mu)$$ 其中$W$为白化矩阵,可通过PCA分解计算[^1]。 --- #### 5. **其他高级技术** - **去噪**:使用高斯滤波或深度学习模型(如DnCNN)去除噪声。 - **灰度化**:将RGB转为灰度图以降低维度。 - **色彩空间转换**:如RGB转HSV,分离亮度与颜色信息。 --- ### 实现流程建议 1. **任务适配**:分类任务侧重标准化和增强,分割任务需保留空间信息。 2. **分阶段处理**: - **离线预处理**:如尺寸调整、直方图均衡化。 - **在线增强**:训练时实时生成增强数据。 3. **工具选择**:使用OpenCV、PIL或深度学习框架(如TensorFlow/Keras)内置模块。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值