Skip to content

PurpleRabb/Qt-Image-Process

Repository files navigation

Qt 图像处理项目

一个基于 Qt 6 的图像处理应用程序,实现了多种经典的图像处理算法。

📋 项目概述

本项目是一个完整的图像处理系统,提供了从基础的图像变换到高级的图像分析功能。项目采用 Qt 框架开发,使用 C++ 实现核心算法,展示了数字图像处理的基本原理和实际应用。

🎯 核心知识点

1. 图像基础操作

1.1 灰度化 (Gray Scale)

  • 算法原理:将彩色图像转换为灰度图像
  • 实现方法:平均值法 Gray = (R + G + B) / 3
  • 应用场景:图像预处理、降低计算复杂度
  • 知识点
    • RGB 颜色空间
    • 像素级操作
    • 图像格式转换(ARGB32)

1.2 二值化 (Binary)

  • 算法原理:将灰度图像转换为只有黑白两色的二值图像
  • 实现方法:阈值分割
    if (gray > threshold) → 255 (白色)
    else0 (黑色)
  • 关键参数:阈值 (0-255),默认值 128
  • 应用场景:图像分割、OCR 预处理、形态学操作基础
  • 知识点
    • 阈值选择策略
    • 二值化对后续处理的影响

2. 直方图处理

2.1 直方图统计 (Histogram)

  • 算法原理:统计图像中每个灰度级出现的频率
  • 实现步骤
    1. 遍历图像所有像素
    2. 统计每个灰度值 (0-255) 的出现次数
    3. 归一化处理
  • 可视化:使用 QtCharts 绘制柱状图
  • 应用场景:图像质量分析、对比度评估
  • 知识点
    • 直方图的概念和意义
    • 归一化方法
    • 数据可视化

2.2 直方图均衡化 (Histogram Equalization)

  • 算法原理:通过重新分布像素灰度值来增强图像对比度
  • 实现步骤
    1. 计算原始图像的灰度直方图
    2. 计算累积分布函数 (CDF)
    3. 建立灰度映射表:newGray = 255 × CDF(oldGray)
    4. 应用映射表到每个像素
  • 数学公式
    P(i) = n_i / N  (概率)
    CDF(i) = Σ P(j) for j=0 to i  (累积分布)
    T(i) = 255 × CDF(i)  (映射函数)
    
  • 应用场景:图像增强、对比度提升
  • 知识点
    • 概率分布
    • 累积分布函数 (CDF)
    • 灰度映射

3. 图像滤波

3.1 高斯模糊 (Gaussian Blur)

  • 算法原理:使用高斯核进行卷积操作,实现平滑滤波
  • 核大小:7×7 高斯模板
  • 数学原理
    G(x,y) = (1/(2πσ²)) × e^(-(x²+y²)/(2σ²))
    
  • 实现方法
    • 模板卷积
    • 边界处理
    • 浮点数精度处理
  • 应用场景:降噪、图像平滑、预处理
  • 知识点
    • 卷积操作
    • 高斯函数
    • 模板匹配

3.2 中值滤波 (Median Filter)

  • 算法原理:用邻域像素的中值替代当前像素值
  • 实现方法
    1. 取目标像素的 3×3 邻域
    2. 对邻域像素值排序
    3. 取中值作为输出
  • 特点:对椒盐噪声有很好的去除效果,能保持边缘
  • 应用场景:去除脉冲噪声、保持边缘信息
  • 知识点
    • 排序算法
    • 非线性滤波
    • 噪声模型

4. 图像锐化

4.1 一阶微分锐化

水平锐化 (Horizontal Sharpen)
  • 算法原理:检测水平方向的边缘
  • 模板[-1, 1]
  • 公式g(x,y) = |f(x,y) - f(x-1,y)|
  • 应用:检测垂直边缘
垂直锐化 (Vertical Sharpen)
  • 算法原理:检测垂直方向的边缘
  • 模板
    [-1]
    [ 1]
    
  • 公式g(x,y) = |f(x,y) - f(x,y-1)|
  • 应用:检测水平边缘
双向锐化 (Dual Sharpen)
  • 算法原理:同时检测水平和垂直方向的边缘
  • 梯度计算
    Δx = f(x,y) - f(x-1,y)
    Δy = f(x,y) - f(x,y-1)
    G(x,y) = √(Δx² + Δy²)
    
  • 知识点
    • 梯度计算
    • 边缘检测基础
    • 方向性滤波

4.2 Sobel 边缘检测

  • 算法原理:使用 Sobel 算子进行边缘检测
  • Sobel X 算子
    [-1, -2, -1]
    [ 0,  0,  0]
    [ 1,  2,  1]
    
  • Sobel Y 算子
    [-1,  0,  1]
    [-2,  0,  2]
    [-1,  0,  1]
    
  • 梯度计算
    Gx = 卷积(Sobel_X)
    Gy = 卷积(Sobel_Y)
    G = √(Gx² + Gy²)
    
  • 增强模式:可选择在原图基础上增强边缘
  • 应用场景:边缘检测、特征提取
  • 知识点
    • 一阶导数算子
    • 方向梯度
    • 边缘增强

5. 形态学操作

5.1 腐蚀 (Erosion)

  • 算法原理:缩小图像中的白色区域
  • 结构元素:3×3 矩形结构元素
  • 操作规则
    • 如果结构元素覆盖的所有像素都是白色 → 输出白色
    • 否则 → 输出黑色
  • 效果:去除小噪点、分离连接的对象
  • 应用场景:去噪、对象分离、细化

5.2 膨胀 (Dilation)

  • 算法原理:扩大图像中的白色区域
  • 结构元素:3×3 矩形结构元素
  • 操作规则
    • 如果结构元素覆盖的像素中有白色 → 输出白色
    • 否则 → 输出黑色
  • 效果:填补小孔洞、连接断开的对象
  • 应用场景:填补空洞、对象连接、粗化

形态学知识点

  • 结构元素 (Structuring Element)
  • 集合运算
  • 二值图像处理
  • 形态学基本操作

6. 其他图像处理

6.1 马赛克化 (Square Mask)

  • 算法原理:将图像分成若干块,每块用该块的平均颜色填充
  • 实现方法
    1. 将图像分成 9×9 的块
    2. 计算每块的平均 RGB 值
    3. 用平均值填充整个块
  • 应用场景:隐私保护、艺术效果
  • 知识点
    • 区域处理
    • 颜色平均
    • 图像分块

6.2 傅里叶变换 (Fourier Transform)

  • 算法原理:将图像从空间域转换到频率域
  • 实现:离散傅里叶变换 (DFT)
  • 应用场景
    • 频域滤波
    • 图像分析
    • 频域特征提取
  • 知识点
    • 频域分析
    • 傅里叶变换原理
    • 空间域与频率域的关系

🏗️ 技术架构

设计模式

  • 单例模式ImagePro 类使用单例模式,确保全局只有一个图像处理实例
  • 信号槽机制:使用 Qt 的信号槽实现组件间通信
  • 策略模式:通过枚举类型 Task 实现不同处理算法的统一接口

性能优化

  • scanLine() 优化:使用 scanLine() 直接访问像素数据,避免 pixel() 函数的开销
  • 格式统一:将图像统一转换为 ARGB32 格式,提高处理效率
  • 内存管理:正确管理图像内存,避免内存泄漏

代码结构

ImagePro (核心处理类)
├── 图像加载与格式转换
├── 基础变换 (灰度化、二值化)
├── 直方图处理
├── 滤波操作 (高斯、中值)
├── 锐化操作 (一阶微分、Sobel)
├── 形态学操作 (腐蚀、膨胀)
└── 其他操作 (马赛克、傅里叶)

📚 学习要点

图像处理基础

  1. 像素操作:理解像素是图像的基本单位
  2. 颜色空间:RGB、灰度、二值图像的区别
  3. 邻域操作:模板卷积、邻域统计
  4. 图像变换:空间域与频率域

算法理解

  1. 线性滤波:高斯模糊(平滑)
  2. 非线性滤波:中值滤波(去噪)
  3. 边缘检测:梯度计算、Sobel 算子
  4. 形态学:腐蚀、膨胀的基本原理

编程实践

  1. Qt 框架:信号槽、QImage、QtCharts
  2. C++ 特性:智能指针、RAII、constexpr
  3. 性能优化:直接内存访问、算法优化
  4. 代码规范:命名规范、注释、错误处理

🎓 适用场景

  • 数字图像处理课程:理解经典算法原理
  • Qt 开发学习:GUI 开发、信号槽机制
  • C++ 实践:面向对象编程、内存管理
  • 算法实现:从理论到实践的转换

🔧 技术栈

  • 开发框架:Qt 6.9.2
  • 编程语言:C++11
  • 编译器:MSVC 2022
  • 图表库:QtCharts
  • 开发工具:Qt Creator

📖 参考资料

图像处理理论

  • 《数字图像处理》- Gonzalez & Woods
  • 直方图均衡化算法原理
  • 形态学操作数学基础
  • 卷积与滤波理论

Qt 开发

  • Qt 官方文档
  • QImage 类使用
  • 信号槽机制
  • QtCharts 图表绘制

💡 扩展建议

  1. 添加更多算法

    • 开运算、闭运算
    • Canny 边缘检测
    • 霍夫变换
    • 图像分割算法
  2. 性能优化

    • 多线程处理
    • GPU 加速
    • 算法并行化
  3. 功能增强

    • 批量处理
    • 参数调节界面
    • 处理历史记录
    • 图像对比功能

项目目的:通过实际编程实现,深入理解数字图像处理的基本原理和算法实现。

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors