数字图像处理完整入门教程;分模块
一、基础概念:什么是数字图像
1. 图像数字化原理
现实照片是连续模拟信号,电脑识别必须转成离散数字矩阵,分两步:
- 采样:把画面切成无数小方块(像素),分辨率 = 宽 × 高;采样越密图片越清晰、文件越大。
- 量化:给每个像素亮度分配数字:
- 二值图:只有 0 (黑)/1 (白)
- 灰度图:0 纯黑~255 纯白,共 256 级
- RGB 彩色:红、绿、蓝三通道灰度叠加
2. 图像 vs 图形
- 图像(位图):相机实拍、照片,最小单位像素,放大模糊(jpg/png)
- 图形(矢量图):软件绘制(图标、CAD),靠数学公式存储,无限放大清晰(svg/dwg)
3. 色彩模型
- RGB(显示器 / 手机):相加混色,红光 + 绿光 + 蓝光组合所有颜色
- CMYK(打印机):相减混色,青、品、黄、墨,用于纸质印刷
- LAB(人眼视觉):亮度 L、红绿轴 A、黄蓝轴,调色专用
二、图像基础算术 / 逻辑运算(点对点,单像素计算)
所有运算都是同位置像素数值计算,不改变图片轮廓结构
1. 算术运算
- ** 加法
C = A + B- 降噪:多张相同场景图片取平均,消除随机噪点
- 特效:双重曝光、图片叠加
- ** 减法
C = A - B- 去除固定背景、视频运动检测(前后帧相减,动的区域会发亮)
- ** 乘法
C = A × B- 蒙版遮罩:用黑白掩码,黑色区域直接抹掉图像内容
- 颜色混合:正片叠底(打印油墨效果)
- ** 除法
C = A ÷ B- 修正拍摄亮度不均、多光谱图像比值分析
2. 逻辑运算(仅黑白二值图使用)
AND 与:两张图重叠区域保留,提取相交物体OR 或:合并两张图所有内容XOR 异或:两张图不一样的区域显示,相同变黑;图片和自身异或会清空
三、几何变换(平移、旋转、缩放、镜像,改变像素位置)
核心知识点:正向 / 反向映射
- 正向:原图像素映射到新图,容易出现空洞
- 反向映射(推荐):遍历新图每个坐标,反推原图对应像素,无空洞,搭配插值填充空白像素
1. 平移
公式:\(x'=x+t_x,\ y'=y+t_y\) 矩阵齐次坐标: \(\begin{bmatrix}x' \\ y' \\ 1\end{bmatrix}=\begin{bmatrix}1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1\end{bmatrix}\begin{bmatrix}x \\ y \\ 1\end{bmatrix}\) \(t_x\)左右偏移,\(t_y\)上下偏移
2. 镜像
水平镜像(左右翻转):\(x'=W-x\) 垂直镜像(上下翻转):\(y'=H\)
3. 缩放
\(x'=f_x·x,\ y'=f_y·y\) \(f_x/f_y>1\)放大;小于 1 缩小,缩放后空白像素需要插值填充
4. 旋转(绕图像中心)
- 先把图像原点移到中心
- 旋转矩阵: \(\begin{bmatrix}x' \\ y' \\ 1\end{bmatrix}=\begin{bmatrix}\cos\theta & \sin\theta \\ -\sin\theta & \cos\theta\end{bmatrix}\begin{bmatrix}x \\ y\end{bmatrix}\)
- 计算旋转后整张图边界,自动扩充画布避免裁切
插值算法(空白像素补值)
- 最近邻插值:取最近像素,速度快但锯齿严重
- 双线性插值:周边 4 像素加权,画面平滑,日常处理首选
四、灰度变换(点运算:只改像素亮度,不挪位置)
1. 线性灰度变换 \(D_B = a·D_A + b\)
- \(a>1\):提升对比度;\(0<a<1\)降低对比度
- \(b>0\)画面整体变亮;\(b<0\)变暗
- \(a=-1,b=255\):图像反色(黑变白,白变黑)
2. 非线性灰度变换
自定义曲线拉伸中间灰度,提升画面层次感,常用公式: \(f(x)=x+\frac{0.8·x·(255-x)}{255}\)
3. 直方图(核心工具)
直方图:统计图片里每个灰度值有多少像素特点:
- 只记录亮度,不记录物体位置(物体移动直方图不变)
- 一张图对应唯一直方图,直方图相同图片不一定一样 用途:判断图片明暗、对比度、分割阈值
直方图均衡(自动增强)
把拥挤的灰度均匀铺开,暗图变通透、对比度大幅提升,适合逆光、昏暗照片。
直方图规定化
自定义目标直方图,统一多张图片光影色调(滤镜、批量调色)
五、傅里叶变换(空域 ↔ 频域)
1. 核心概念
- 空域:我们看到的像素画面
- 频域:描述画面灰度变化快慢
- 低频:大片平滑区域(天空、墙面),频谱中心亮点
- 高频:边缘、纹理、噪点,频谱外围亮点 变换作用:复杂图像运算(滤波、降噪)转到频域会大幅简化
2. 傅里叶变换关键性质
- 可分离:二维图可以先行、后列分别做一维变换
- 平移不变幅度:图片移动,轮廓频谱形状不变,只改变相位
- 旋转同步:图片转多少度,频谱同步转多少
- 卷积定理(最重要)空域卷积 = 频域相乘 图像滤波不用滑动卷积核,直接频域相乘,速度提升几十倍
3. FFT 快速傅里叶变换
原始 DFT 复杂度 \(O(N^2)\),FFT 拆分奇偶序列,优化到 \(O(Nlog_2N)\),电脑处理图片全靠 FFT。 蝶形运算:FFT 基础计算单元,分层合并高低频分量。
六、滤波(图像平滑 / 锐化,卷积实现)
卷积原理
拿小矩阵(卷积核 / 模板)在图片逐窗口滑动,窗口内像素 × 核权重求和,生成新像素。 示例 3×3 均值核(模糊降噪): \(\begin{bmatrix}1/9 & 1/9 & 1/9 \\ 1/9 & 1/9 \\ 1/9 & 1/9 & 1/9\end{bmatrix}\)
1. 空域滤波(直接处理像素)
平滑滤波(降噪、模糊)
- 均值滤波:邻域平均,消除细小噪点,缺点会糊掉边缘
- 中值滤波:取邻域中间亮度,完美去除黑白雪花噪点,保留边缘
锐化滤波(强化边缘、细节)
用拉普拉斯 / 梯度算子,放大像素亮度差,画面更清晰;过度锐化会出现白边过冲。
2. 频域滤波(傅里叶变换后处理)
- 低通滤波:保留低频、过滤高频(降噪、模糊) 类型:理想(振铃波纹)、巴特沃斯、高斯(无波纹,首选)
- 高通滤波:保留高频、去掉低频(提取边缘) 缺陷:丢失画面基础亮度,图像发黑,搭配偏移增益改善
- 带通 / 带阻:只保留 / 删除特定频率纹理
七、完整图像处理通用流程
- 读取图片,转灰度 / RGB
- 预处理:几何变换(摆正、裁剪)
- 灰度校正:直方图均衡 / 线性提亮
- 降噪平滑(空域均值 / 频域高斯低通)
- 特征提取:高通滤波提取边缘
- 分割 / 识别:基于灰度阈值、边缘划分目标区域
配套实操(Python+OpenCV 极简示例,直接跑)
1. 图像加减降噪
python
运行
import cv2 import numpy as np # 读取两张同场景图片 img1 = cv2.imread("1.jpg") img2 = cv2.imread("2.jpg") avg = (img1 + img2) // 2 # 均值降噪 cv2.imshow("降噪图", avg)2. 图片旋转
python
运行
img = cv2.imread("test.jpg") h, w = img.shape[:2] # 以中心旋转45° M = cv2.getRotationMatrix2D((w/2, h/2), 45, 1) res = cv2.warpAffine(img, M, (w, h)) cv2.imshow("旋转", res)3. 直方图均衡提亮暗图
python
运行
import cv2 img = cv2.imread("dark.jpg", 0) # 0=灰度图 equ = cv2.equalizeHist(img) cv2.imshow("原图", img) cv2.imshow("均衡提亮", equ)4. 高斯模糊降噪(频域等价低通)
python
运行
img = cv2.imread("test.jpg") blur = cv2.GaussianBlur(img, (5,5), 1.5) cv2.imshow("平滑降噪", blur)5. 边缘提取(高通效果)
python
运行
img = cv2.imread("test.jpg", 0) edge = cv2.Laplacian(img, cv2.CV_8U) cv2.imshow("边缘", edge)学习顺序建议
- 先吃透像素、分辨率、RGB、算术运算(最基础,看懂图片数据)
- 几何变换 + 插值(日常修图必备)
- 灰度直方图、点运算(调色核心)
- 空域卷积滤波(降噪、边缘提取,高频实操)
- 傅里叶变换与频域(理论难点,理解卷积加速逻辑即可)
- 综合写代码实现整套图像处理流水线