当前位置: 首页 > article >正文

图像处理篇---图像预处理


文章目录

  • 前言
  • 一、通用目的
    • 1.1 数据标准化
      • 目的
      • 实现
    • 1.2 噪声抑制
      • 目的
      • 实现
        • 高斯滤波
        • 中值滤波
        • 双边滤波
    • 1.3 尺寸统一化
      • 目的
      • 实现
    • 1.4 数据增强
      • 目的
      • 实现
    • 1.5 特征增强
      • 目的
      • 实现:
        • 边缘检测
        • 直方图均衡化
        • 锐化
  • 二、分领域预处理
    • 2.1 传统机器学习(如SVM、随机森林)
      • 2.1.1 特点
      • 2.1.2 预处理重点
        • 灰度化
        • 二值化
        • 形态学操作
        • 特征工程
    • 2.2 深度学习(如CNN、Transformer)
      • 2.2.1 特点
      • 2.2.2 预处理重点
        • 通道顺序调整
        • 批量归一化
        • 高级增强
        • 预训练模型适配
    • 2.3 其他领域
      • 2.3.1医学影像(如MRI、CT)
        • 去伪影
        • 标准化
      • 2.3.2 卫星遥感
        • 多光谱融合
        • 辐射校正
      • 2.3.3 工业检测
        • 背景分割
        • 高动态范围
  • 三、工具与库
    • 3.1 OpenCV
    • 3.2 PIL/Pillow
    • 3.3 scikit-image
    • 3.4 TensorFlow
    • 3.5 PyTorch
  • 四、总结
    • 4.1 目标检测
    • 4.2 语义分割
    • 4.3 低光照场景


前言

图像预处理是机器学习和计算机视觉任务中至关重要的一环,其核心目的是通过对原始图像进行优化和调整提升模型性能、降低噪声干扰、增强关键特征,并适应模型的输入要求。以下是分领域的详细说明:


一、通用目的

1.1 数据标准化

目的

目的:统一输入数据的分布,避免因像素值范围差异(如0-255或0-1)导致模型训练不稳定。

实现

#归一化到 [0, 1]
image_normalized = image / 255.0
#标准化(均值中心化 + 方差归一化)
image_standardized = (image - mean) / std

1.2 噪声抑制

目的

目的:消除图像中的随机噪声(如高斯噪声、椒盐噪声),提升特征提取的鲁棒性

实现

高斯滤波

高斯滤波:cv2.GaussianBlur()

中值滤波

中值滤波:cv2.medianBlur()

双边滤波

双边滤波:保留边缘的同时去噪,cv2.bilateralFilter()

1.3 尺寸统一化

目的

目的:确保所有输入图像尺寸一致,适配模型输入层(如CNN要求固定尺寸)。

实现

resized_image = cv2.resize(image, (width, height))

1.4 数据增强

目的

目的:通过**几何变换(旋转、翻转、裁剪)颜色扰动(亮度、对比度调整)**扩充数据集,防止过拟合。

实现

#使用OpenCV或深度学习框架(如TensorFlow的ImageDataGenerator)
flipped = cv2.flip(image, 1)  # 水平翻转
rotated = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)

1.5 特征增强

目的

目的:突出目标区域的关键特征(如边缘、纹理)

实现:

边缘检测

边缘检测:Sobel算子、Canny算子

直方图均衡化

直方图均衡化:cv2.equalizeHist()(增强对比度)

锐化

锐化:拉普拉斯算子或自定义卷积核

二、分领域预处理

2.1 传统机器学习(如SVM、随机森林)

2.1.1 特点

特点:依赖手工提取特征(如HOG、LBP、颜色直方图)。

2.1.2 预处理重点

灰度化

灰度化:减少计算量,cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

二值化

二值化:cv2.threshold()(如文档OCR任务

形态学操作

形态学操作:腐蚀、膨胀(去除小斑点或连接断裂区域

特征工程

特征工程:提取统计特征(均值、方差)或结构特征。

2.2 深度学习(如CNN、Transformer)

2.2.1 特点

特点:端到端学习特征,但依赖大量数据和标准化输入。

2.2.2 预处理重点

通道顺序调整

通道顺序调整:适配框架要求(如TensorFlow的HWC格式或PyTorch的CHW格式)。

批量归一化

批量归一化:在数据加载阶段统一处理(如torchvision.transforms.Normalize)。

高级增强

高级增强:MixUp、CutMix等基于混合样本的策略。

预训练模型适配

预训练模型适配:输入需与预训练数据分布一致(如ImageNet的均值方差)。

2.3 其他领域

2.3.1医学影像(如MRI、CT)

去伪影

去伪影:消除扫描过程中的运动伪影或设备噪声

标准化

标准化:使用Z-score或直方图匹配**(不同设备间的数据一致性**)。

2.3.2 卫星遥感

多光谱融合

多光谱融合:合并不同波段的图像(如红外与可见光)。

辐射校正

辐射校正:消除大气干扰。

2.3.3 工业检测

背景分割

背景分割:提取ROI(如产品表面缺陷检测)。

高动态范围

高动态范围(HDR):处理过曝或欠曝区域

三、工具与库

3.1 OpenCV

OpenCV:基础操作(滤波、几何变换、颜色空间转换)。

3.2 PIL/Pillow

PIL/Pillow:简单的图像增强(缩放、裁剪)。

3.3 scikit-image

scikit-image:高级滤波和特征提取(如局部二值模式)。

3.4 TensorFlow

TensorFlow:tf.image模块

3.5 PyTorch

PyTorch:torchvision.transforms

四、总结

图像预处理的选择需结合具体任务:

4.1 目标检测

目标检测:可能更关注多尺度输入颜色增强

4.2 语义分割

语义分割:需保留空间信息,避免过度下采样

4.3 低光照场景

低光照场景:需Retinex算法或深度学习去噪(如AutoEncoder)。

通过合理设计预处理流程,可显著提升模型泛化能力收敛速度


相关文章:

图像处理篇---图像预处理

文章目录 前言一、通用目的1.1 数据标准化目的实现 1.2 噪声抑制目的实现高斯滤波中值滤波双边滤波 1.3 尺寸统一化目的实现 1.4 数据增强目的实现 1.5 特征增强目的实现:边缘检测直方图均衡化锐化 二、分领域预处理2.1 传统机器学习(如SVM、随机森林&am…...

Vue 3 事件总线详解:构建组件间高效通信的桥梁

Vue 3 事件总线详解:构建组件间高效通信的桥梁 为什么需要事件总线?使用 mitt 实现事件总线1. 安装 mitt2. 创建事件总线3. 在组件中使用事件总线发送端组件(例如 ComponentA.vue)接收端组件(例如 ComponentB.vue&…...

Golang编译器DIY,手搓 if err != nil { return err } 语法糖

前序 在go的社区里,下面这三行代码是被吐槽的最多的 if err ! nil {return err }从代码之整洁美观的角度看,这样的写法也是让人不舒服的。尤其是 当有很多错误需要处理的时候,就会发现通篇都是这三行。 所以想着看看修改一下编译器&#xf…...

图解多头注意力机制:维度变化一镜到底

目录 一、多头注意力机制概述二、代码实现1. pyTorch 实现2. tensorFlow实现 三、维度变化全流程详解1. 参数设定2. 维度变化流程图3. 关键步骤维度变化 四、关键实现细节解析1. 多头拆分与合并2. 注意力分数计算3. 掩码处理技巧 五、完整运行示例六、总结与常见问题1. 核心优势…...

.NET_Prism基本项目创建

Prism简述 模块(Module):独立的功能单元,可动态加载。依赖注入(Dependency Injection,DI):通过 IoC 容器(如 Unity、Autofac)管理模块之间的依赖关系。&#…...

BigEvent项目后端学习笔记(一)用户管理模块 | 注册登录与用户信息全流程解析(含优化)

📖 模块概述 用户管理模块是系统的核心基础模块,包含 注册、登录、用户信息维护 等功能。本模块涉及 JWT Token认证、密码加密存储、文件上传 等关键技术点,是理解前后端分离架构中安全与数据交互的典型实践。本篇对于原项目进行了代码优化&…...

[ISP] 人眼中的颜色

相机是如何记录颜色的,又是如何被显示器还原的? 相机通过记录RGB数值然后显示器显示RGB数值来实现颜色的记录和呈现。道理是这么个道理,但实际上各厂家生产的相机对光的响应各不相同,并且不同厂家显示器对三原色的显示也天差地别&…...

解锁MySQL 8.0.41源码调试:Mac 11.6+CLion 2024.3.4实战指南

文章目录 解锁MySQL 8.0.41源码调试:Mac 11.6CLion 2024.3.4实战指南前期准备环境搭建详细步骤安装 CLion安装 CMake 3.30.5准备 MySQL 8.0.41 源码配置 CMake 选项构建 MySQL 项目 调试环境配置与验证配置 LLDB 调试器启动调试验证调试环境 总结与拓展 解锁MySQL 8…...

celery入门

按照Celery 官方文档,用 Django Celery Redis 写的一个简单项目 如需转载,标记出处 环境准备 1. 安装依赖 pip install django celery redis 创建 Django 项目 1. 创建 Django 项目和 APP django-admin startproject myproject cd myproject python …...

关于xcode Project navigator/项目导航栏的一些说明

本文基于 xcode12.4 版本做说明 首先要明确一点,导航栏这里展示的并不是当前工程在电脑硬盘中的文件结构,它展示的是xxxxxx.xcodeproj/project.pbxproj文件(后文简.pbxproj文件)中的内容。我们在导航栏中的操作就是修改该文件,有些操作会修…...

深度解析扣减系统设计:从架构到实践

背景 在当今数字化业务蓬勃发展的时代,扣减系统在众多业务场景中扮演着关键角色。无论是电商平台的库存扣减,还是金融领域的资金扣减、积分系统的积分扣减,一个高效、可靠且数据一致的扣减系统都是业务稳健运行的基石。本文将深入探讨扣减系…...

视觉定位项目中可以任意修改拍照点位吗?

修改拍照点位不是那么简单 1. 背景2. 修改拍照点位意味着什么?3. 如何解决这个问题? 1. 背景 在视觉定位的项目中,会遇到这么一种情况:完成三步(9点标定,旋转中心标定,示教基准)之…...

深度学习常用操作笔记

深度学习常用操作笔记 指令报错cannot import name Config from mmcvImportError: cannot import name print_log from mmcvImportError: cannot import name init_dist from mmengine.runnerWARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNon…...

C++学习内存管理

1.概念的介绍 总括: 1. 栈(Stack) 存储内容: 局部变量(包括函数参数、非静态局部变量)。 函数调用的上下文信息(如返回地址、寄存器状态等)。 特点: 内存由编译器自动…...

git使用。创建仓库,拉取分支,新建分支开发

文章目录 安装 git自己新建仓库,进行代码管理合作开发的流程拉去主分支代码查看本地分支的状态查看远程分支查看远程的仓库信息本地分支切换切换并创建分支提交代码 made by NJITZX git 是一个版本控制工具,真正开发项目中是多个人开发一个项目的&#…...

itsdangerous加解密源码分析|BUG汇总

这是我这两天的思考 早知道密码学的课就不旷那么多了 纯个人见解 如需转载,标记出处 目录 一、官网介绍 二、事例代码 源码分析: 加密函数dump源码使用的函数如下: 解密 ​编辑 ​编辑 关于签名: 为什么这个数字签名没有…...

常见限流算法及实现

1. 固定窗口计数器(Fixed Window Counter) 原理:在固定时间窗口(如1分钟)内统计请求数,超过阈值则拒绝后续请求。优点:实现简单,内存占用低。缺点:存在窗口切换时的流量…...

计算机操作系统进程(4)

系列文章目录 第二章:进程的描述与控制 文章目录 系列文章目录前言一、临界区的概念和描述:二、硬件同步机制: 1.关中断2.利用Test-and-Set指令实现互斥3.利用Swap指令实现进程的互斥 总结 前言 上一篇我们仅仅讲了一点关于线程同步的概念&a…...

编程题《牛牛的链表删除》的python可以用非链表的方式

描述 牛牛从键盘输入了一个长度为 n 的数组,把这个数组转换成链表然后把链表中所有值是 x 的节点都删除。 输入描述: 第一行输入两个正整数 n 和 x 表示数组的长度和要删除的链表节点值 x 。 第二行输入 n 个正整数表示数组中每个元素的值。 输出描述&am…...

Certbot实现SSL免费证书自动续签(CentOS 7版 + Docker部署的nginx)

前置安装,可参考Certbot实现SSL免费证书自动续签(CentOS 7 nginx/apache) 如果是通过 Docker 运行 Nginx, certbot 无法直接检测到本地的 Nginx 配置。解决方案是 使用 standalone 模式 或 挂载 Webroot 方式获取 SSL 证书&…...

C++|构造函数和析构函数

一、构造函数 构造函数是一种特殊的成员函数,主要用于创建对象时对对象进行初始化操作,即专门用于构造新对象,并赋值对象的成员数据。 在 C 里,构造函数的名称和类名相同,并且没有返回类型。当创建类的对象时&#x…...

AI日报 - 2025年3月17日

🌟 今日概览(60秒速览) ▎🤖 AGI突破 | GPT-o1在卡内基梅隆大学数学考试中获满分,展示AI数学能力新高度 成本仅5美分/题,推理速度不到1分钟 ▎💼 商业动向 | Figure推出BotQ机器人制造设施&…...

不像人做的题————十四届蓝桥杯省赛真题解析(上)A,B,C,D题解析

题目A:日期统计 思路分析: 本题的题目比较繁琐,我们采用暴力加DFS剪枝的方式去做,我们在DFS中按照8位日期的每一个位的要求进行初步剪枝找出所有的八位子串,但是还是会存在19月的情况,为此还需要在CHECK函数…...

JavaScript 中 call 和 apply 的用法与区别

文章目录 前言一、 call 方法1.1 基本用法1.2 传递多个参数 二、apply 方法2.1 基本用法2.2 传递数组参数 三、call 和 apply 的区别四、实际应用场景4.1 借用方法4.2 继承与构造函数 五、总结 前言 在 JavaScript 中,call 和 apply 是两个非常重要的函数方法&…...

go程序调用k8s pod副本的名称IP手动赋值给configmap的参数

1、创建configmap --- apiVersion: v1 data:config.yaml: >-# config.yamlEtcd:Endpoints:- "etcd-server:2379"Username: ""Password: ""Exchanges:#- Name: "Binance"# Symbol: "BTCUSDT"# WSUrl: "wss://fstr…...

面试系列|蚂蚁金服技术面【1】

哈喽,大家好!今天分享一下蚂蚁金服的 Java 后端开发岗位真实社招面经,复盘面试过程中踩过的坑,整理面试过程中提到的知识点,希望能给正在准备面试的你一些参考和启发,希望对你有帮助,愿你能够获…...

使用傅里叶变换测量声卡的频率失真

文章目录 一、说明二、关于声卡的技术详述三、实验代码获取四、结论 一、说明 假如我希望使用我的声卡来模拟软件无线电,利用声音而不是射频信号。我的声卡能胜任这项任务吗?本文将研究一种技术来找出答案。另外,需要了解音频技术的读者也可…...

Selenium 自动化测试学习总结

大概了解一下即可,现在主要用的自动化工具是 playWright,它可以录制操作。 selenium是老款自动化测试工具,仍有很多可取之处。 安装: pip install selenium即可。然后下载浏览器的驱动包,注意不是浏览器!…...

【HTML5】01-HTML摆放内容

本文介绍HTML5摆放标签的知识点。 目录 1. HTML概念 2. HTML骨架 3. 标签的关系 4. 标题标签 5. 段落标签 6. 换行和水平线 7. 文本格式化标签 8. 图像标签 图像 - 属性 9. 路径 相对路径 绝对路径 10. 超链接标签 11. 音频标签 12. 视频标签 1. HTML概念 HTM…...

内存管理:

我们今天来学习一下内存管理: 1. 内存分布: 我们先来看一下我们下面的图片: 这个就是我们的内存,我们的内存分为栈区,堆区,静态区,常量区; 我们的函数栈帧开辟消耗的内存就是我们…...