老黄实验:基于图像差异的异物入侵检测系统 - 关键技术理论
老黄实验:基于图像差异的异物入侵检测系统 - 关键技术理论
微信公众号 老黄编程
CSDN 老黄编程
email: wilsonwong@126.com
Copyright © 2026 黄锦威. All rights reserved.
E. 关键技术理论(详细展开)
E.1. 混合高斯模型(MOG2)数学符号详解与公式推导
一、符号含义详解
1.1 主要符号对照表
| 符号 | 名称 | 含义 | 数据类型 | 典型值/范围 |
|---|---|---|---|---|
| ItI_tIt | 像素值 | t时刻的像素值(灰度或彩色) | 标量/向量 | 0-255(灰度) |
| KKK | 高斯分布数量 | 每个像素建模用的高斯分布个数 | 整数 | 3-5 |
| ωi,t\omega_{i,t}ωi,t | 权重 | 第i个高斯分布在t时刻的权重 | 标量 | 0<ω<1, ∑ω=1 |
| μi,t\mu_{i,t}μi,t | 均值 | 第i个高斯分布在t时刻的均值 | 标量/向量 | 与I_t同范围 |
| σi,t\sigma_{i,t}σi,t | 标准差 | 第i个高斯分布在t时刻的标准差 | 标量 | >0 |
| Σi,t\Sigma_{i,t}Σi,t | 协方差矩阵 | 彩色图像各通道相关性 | 矩阵 | 对角占优 |
| DDD | 匹配阈值系数 | 控制匹配检测的宽松程度 | 标量 | 2.5 |
| α\alphaα | 学习率 | 控制模型更新速度 | 标量 | 0.001-0.01 |
| ρ\rhoρ | 学习速率因子 | 动态学习率 | 标量 | 依赖于匹配概率 |
| Mi,tM_{i,t}Mi,t | 匹配指示函数 | 当前像素是否匹配该分布 | 布尔 | 0或1 |
| η\etaη | 高斯概率密度函数 | 计算像素属于某分布的概率 | 函数 | - |
| P(It)P(I_t)P(It) | 概率密度 | 像素值I_t发生的总概率 | 标量 | 0~1之间 |
1.2 下标含义
| 下标 | 含义 | 示例 |
|---|---|---|
| ttt | 时间(帧)索引 | μi,t\mu_{i,t}μi,t 表示第i个分布在t时刻的均值 |
| iii | 高斯分布索引(1~K) | ωi,t\omega_{i,t}ωi,t 表示第i个分布在t时刻的权重 |
二、高斯分布基础
2.1 一维高斯分布(用于灰度图)
概率密度函数:
η(I;μ,σ2)=12πσ2exp(−(I−μ)22σ2)\eta(I; \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(I - \mu)^2}{2\sigma^2}\right)η(I;μ,σ2)=2πσ21exp(−2σ2(I−μ)2)
2.2 多维高斯分布(用于彩色图)
η(I;μ,Σ)=1(2π)d/2∣Σ∣1/2exp(−12(I−μ)TΣ−1(I−μ))\eta(\mathbf{I}; \boldsymbol{\mu}, \boldsymbol{\Sigma}) = \frac{1}{(2\pi)^{d/2}|\boldsymbol{\Sigma}|^{1/2}} \exp\left(-\frac{1}{2}(\mathbf{I} - \boldsymbol{\mu})^T \boldsymbol{\Sigma}^{-1} (\mathbf{I} - \boldsymbol{\mu})\right)η(I;μ,Σ)=(2π)d/2∣Σ∣1/21exp(−21(I−μ)TΣ−1(I−μ))
其中:
- ddd 是维度(RGB图像d=3)
- ∣Σ∣|\boldsymbol{\Sigma}|∣Σ∣ 是协方差矩阵的行列式
2.3 计算范例
例1:一维高斯分布计算
假设一个像素在t时刻的灰度值 It=120I_t = 120It=120,某个高斯分布的参数为:
- μ=115\mu = 115μ=115(均值)
- σ=10\sigma = 10σ=10(标准差)
第一步:计算标准化差值
z=It−μσ=120−11510=0.5z = \frac{I_t - \mu}{\sigma} = \frac{120 - 115}{10} = 0.5z=σIt−μ=10120−115=0.5
第二步:计算指数项
(It−μ)22σ2=(5)22×100=25200=0.125\frac{(I_t - \mu)^2}{2\sigma^2} = \frac{(5)^2}{2 \times 100} = \frac{25}{200} = 0.1252σ2(It−μ)2=2×100(5)2=20025=0.125
第三步:计算高斯概率密度
η=12π×100×e−0.125=117.7245×0.8825=0.0498\eta = \frac{1}{\sqrt{2\pi \times 100}} \times e^{-0.125} = \frac{1}{17.7245} \times 0.8825 = 0.0498η=2π×1001×e−0.125=17.72451×0.8825=0.0498
三、混合高斯模型公式推导
3.1 基本模型
问题描述:每个像素的历史值可以看作是由K个高斯分布混合生成的。
基本假设:像素值在时间上的变化服从K个高斯分布的加权和。
P(It)=∑i=1Kωi,t⋅η(It;μi,t,Σi,t)P(I_t) = \sum_{i=1}^{K} \omega_{i,t} \cdot \eta(I_t; \mu_{i,t}, \Sigma_{i,t})P(It)=i=1∑Kωi,t⋅η(It;μi,t,Σi,t)
约束条件:
∑i=1Kωi,t=1,ωi,t>0\sum_{i=1}^{K} \omega_{i,t} = 1, \quad \omega_{i,t} > 0i=1∑Kωi,t=1,ωi,t>0
3.2 计算范例
例2:混合高斯概率计算
假设K=3,参数如下:
| i | ωi\omega_iωi | μi\mu_iμi | σi\sigma_iσi |
|---|---|---|---|
| 1 | 0.6 | 100 | 15 |
| 2 | 0.3 | 150 | 12 |
| 3 | 0.1 | 80 | 20 |
当前像素值 It=120I_t = 120It=120
步骤1:计算每个高斯分布的概率密度
对于分布1:
z=120−10015=1.33z = \frac{120 - 100}{15} = 1.33z=15120−100=1.33
η1=12π×225×e−(1.33)2/2=0.0164\eta_1 = \frac{1}{\sqrt{2\pi \times 225}} \times e^{-(1.33)^2/2} = 0.0164η1=2π×2251×e−(1.33)2/2=0.0164
对于分布2:
z=120−15012=−2.5z = \frac{120 - 150}{12} = -2.5z=12120−150=−2.5
η2=12π×144×e−(2.5)2/2=0.0055\eta_2 = \frac{1}{\sqrt{2\pi \times 144}} \times e^{-(2.5)^2/2} = 0.0055η2=2π×1441×e−(2.5)2/2=0.0055
对于分布3:
z=120−8020=2.0z = \frac{120 - 80}{20} = 2.0z=20120−80=2.0
η3=12π×400×e−(2.0)2/2=0.0088\eta_3 = \frac{1}{\sqrt{2\pi \times 400}} \times e^{-(2.0)^2/2} = 0.0088η3=2π×4001×e−(2.0)2/2=0.0088
步骤2:加权求和
P(It)=0.6×0.0164+0.3×0.0055+0.1×0.0088P(I_t) = 0.6 \times 0.0164 + 0.3 \times 0.0055 + 0.1 \times 0.0088P(It)=0.6×0.0164+0.3×0.0055+0.1×0.0088
=0.00984+0.00165+0.00088=0.01237= 0.00984 + 0.00165 + 0.00088 = 0.01237=0.00984+0.00165+0.00088=0.01237
结论:该像素值属于背景的概率约为1.24%
四、参数更新公式推导
4.1 匹配检测
公式:
∣It−μi,t−1∣≤D⋅σi,t−1|I_t - \mu_{i,t-1}| \leq D \cdot \sigma_{i,t-1}∣It−μi,t−1∣≤D⋅σi,t−1
推导思路:判断当前像素是否在均值的D倍标准差范围内。
计算范例:
假设 μ=115,σ=10,D=2.5\mu = 115, \sigma = 10, D = 2.5μ=115,σ=10,D=2.5
匹配范围=[115−2.5×10,115+2.5×10]=[115−25,115+25]=[90,140]\text{匹配范围} = [115 - 2.5 \times 10, 115 + 2.5 \times 10] = [115 - 25, 115 + 25] = [90, 140]匹配范围=[115−2.5×10,115+2.5×10]=[115−25,115+25]=[90,140]
当前像素 It=120∈[90,140]I_t = 120 \in [90, 140]It=120∈[90,140] → 匹配 ✅
当前像素 It=85∉[90,140]I_t = 85 \notin [90, 140]It=85∈/[90,140] → 不匹配 ❌
4.2 权重更新
公式:
ωi,t=(1−α)ωi,t−1+αMi,t\omega_{i,t} = (1-\alpha)\omega_{i,t-1} + \alpha M_{i,t}ωi,t=(1−α)ωi,t−1+αMi,t
| 情况 | Mi,tM_{i,t}Mi,t | 更新公式 |
|---|---|---|
| 匹配 | 1 | ωi,t=(1−α)ωi,t−1+α\omega_{i,t} = (1-\alpha)\omega_{i,t-1} + \alphaωi,t=(1−α)ωi,t−1+α |
| 不匹配 | 0 | ωi,t=(1−α)ωi,t−1\omega_{i,t} = (1-\alpha)\omega_{i,t-1}ωi,t=(1−α)ωi,t−1 |
计算范例:
假设 α=0.01\alpha = 0.01α=0.01,匹配的分布权重 ωmatch=0.6\omega_{match} = 0.6ωmatch=0.6
ωnew=(1−0.01)×0.6+0.01×1=0.99×0.6+0.01=0.594+0.01=0.604\omega_{new} = (1 - 0.01) \times 0.6 + 0.01 \times 1 = 0.99 \times 0.6 + 0.01 = 0.594 + 0.01 = 0.604ωnew=(1−0.01)×0.6+0.01×1=0.99×0.6+0.01=0.594+0.01=0.604
权重增加:0.6 → 0.604
对于不匹配的分布权重 ωunmatch=0.3\omega_{unmatch} = 0.3ωunmatch=0.3:
ωnew=(1−0.01)×0.3+0.01×0=0.99×0.3=0.297\omega_{new} = (1 - 0.01) \times 0.3 + 0.01 \times 0 = 0.99 \times 0.3 = 0.297ωnew=(1−0.01)×0.3+0.01×0=0.99×0.3=0.297
权重减少:0.3 → 0.297
4.3 学习速率因子 ρ
公式:
ρ=α⋅η(It;μi,t−1,Σi,t−1)\rho = \alpha \cdot \eta(I_t; \mu_{i,t-1}, \Sigma_{i,t-1})ρ=α⋅η(It;μi,t−1,Σi,t−1)
含义:ρ 同时受全局学习率 α 和当前匹配概率的影响。
计算范例:
接续例1结果,η=0.0498,α=0.01\eta = 0.0498, \alpha = 0.01η=0.0498,α=0.01
ρ=0.01×0.0498=0.000498\rho = 0.01 \times 0.0498 = 0.000498ρ=0.01×0.0498=0.000498
理解:ρ 非常小,意味着当前帧对模型的影响很小 → 背景模型稳定更新
4.4 均值更新
公式:
μi,t=(1−ρ)μi,t−1+ρIt\mu_{i,t} = (1-\rho)\mu_{i,t-1} + \rho I_tμi,t=(1−ρ)μi,t−1+ρIt
推导:指数加权移动平均 (EWMA)
μnew=μold+ρ(It−μold)\mu_{new} = \mu_{old} + \rho (I_t - \mu_{old})μnew=μold+ρ(It−μold)
计算范例:
μold=115,It=120,ρ=0.0005\mu_{old} = 115, I_t = 120, \rho = 0.0005μold=115,It=120,ρ=0.0005
μnew=115+0.0005×(120−115)=115+0.0005×5=115+0.0025=115.0025\mu_{new} = 115 + 0.0005 \times (120 - 115) = 115 + 0.0005 \times 5 = 115 + 0.0025 = 115.0025μnew=115+0.0005×(120−115)=115+0.0005×5=115+0.0025=115.0025
解释:均值几乎不变,因为 ρ 很小,单帧对模型影响微小。
4.5 方差更新
公式:
σi,t2=(1−ρ)σi,t−12+ρ(It−μi,t)2\sigma_{i,t}^2 = (1-\rho)\sigma_{i,t-1}^2 + \rho (I_t - \mu_{i,t})^2σi,t2=(1−ρ)σi,t−12+ρ(It−μi,t)2
推导:方差的 EWMA 更新
计算范例:
σold2=100,It=120,μnew=115.0025,ρ=0.0005\sigma^2_{old} = 100, I_t = 120, \mu_{new} = 115.0025, \rho = 0.0005σold2=100,It=120,μnew=115.0025,ρ=0.0005
第一步:计算偏差平方
(It−μnew)2=(120−115.0025)2=(4.9975)2=24.975(I_t - \mu_{new})^2 = (120 - 115.0025)^2 = (4.9975)^2 = 24.975(It−μnew)2=(120−115.0025)2=(4.9975)2=24.975
第二步:更新方差
σnew2=(1−0.0005)×100+0.0005×24.975\sigma^2_{new} = (1 - 0.0005) \times 100 + 0.0005 \times 24.975σnew2=(1−0.0005)×100+0.0005×24.975
=0.9995×100+0.0124875=99.95+0.0125=99.9625= 0.9995 \times 100 + 0.0124875 = 99.95 + 0.0125 = 99.9625=0.9995×100+0.0124875=99.95+0.0125=99.9625
更新幅度:100 → 99.96(变化很小)
五、完整模型更新流程范例
假设条件
- K = 3(3个高斯分布)
- α = 0.01
- D = 2.5
- 当前像素值 I_t = 120
初始模型参数
| i | ω | μ | σ² | σ |
|---|---|---|---|---|
| 1 | 0.6 | 100 | 225 | 15 |
| 2 | 0.3 | 150 | 144 | 12 |
| 3 | 0.1 | 80 | 400 | 20 |
第一步:匹配检测
分布1:
- 匹配范围:[100−2.5×15,100+2.5×15]=[62.5,137.5][100 - 2.5\times15, 100 + 2.5\times15] = [62.5, 137.5][100−2.5×15,100+2.5×15]=[62.5,137.5]
- I_t = 120 ∈ [62.5, 137.5] → ✅ 匹配
分布2:
- 匹配范围:[150−2.5×12,150+2.5×12]=[120,180][150 - 2.5\times12, 150 + 2.5\times12] = [120, 180][150−2.5×12,150+2.5×12]=[120,180]
- I_t = 120 ∈ [120, 180](边界包含) → ✅ 匹配
分布3:
- 匹配范围:[80−2.5×20,80+2.5×20]=[30,130][80 - 2.5\times20, 80 + 2.5\times20] = [30, 130][80−2.5×20,80+2.5×20]=[30,130]
- I_t = 120 ∈ [30, 130] → ✅ 匹配
特殊情况:多个分布同时匹配时,选择最匹配的(通常按 ω/σ 排序后的第一个)
第二步:选择最佳匹配
通常按 ωσ\frac{\omega}{\sigma}σω(权重/标准差的比值)排序
- 分布1: 0.6/15 = 0.04
- 分布2: 0.3/12 = 0.025
- 分布3: 0.1/20 = 0.005
选择分布1为最佳匹配
第三步:更新权重
所有分布权重更新(使用α=0.01)
| i | M | 新权重 |
|---|---|---|
| 1 | 1 | 0.6×(1-0.01) + 0.01 = 0.604 |
| 2 | 0 | 0.3×(1-0.01) + 0 = 0.297 |
| 3 | 0 | 0.1×(1-0.01) + 0 = 0.099 |
| 总和 | - | 1.000 ✅ |
第四步:计算 η 和 ρ
对于分布1(最佳匹配):
η=12π×225×e−(120−100)22×225\eta = \frac{1}{\sqrt{2\pi \times 225}} \times e^{-\frac{(120-100)^2}{2\times225}}η=2π×2251×e−2×225(120−100)2
=137.6×e−400450=0.0266×0.411=0.0109= \frac{1}{37.6} \times e^{-\frac{400}{450}} = 0.0266 \times 0.411 = 0.0109=37.61×e−450400=0.0266×0.411=0.0109
ρ=α×η=0.01×0.0109=0.000109\rho = \alpha \times \eta = 0.01 \times 0.0109 = 0.000109ρ=α×η=0.01×0.0109=0.000109
第五步:更新均值(仅分布1)
μ1(new)=(1−0.000109)×100+0.000109×120\mu_1^{(new)} = (1-0.000109) \times 100 + 0.000109 \times 120μ1(new)=(1−0.000109)×100+0.000109×120
=99.9891+0.0131=100.002= 99.9891 + 0.0131 = 100.002=99.9891+0.0131=100.002
第六步:更新方差(仅分布1)
(It−μnew)2=(120−100.002)2=(19.998)2=399.92(I_t - \mu_{new})^2 = (120 - 100.002)^2 = (19.998)^2 = 399.92(It−μnew)2=(120−100.002)2=(19.998)2=399.92
σ12(new)=(1−0.000109)×225+0.000109×399.92\sigma_1^{2(new)} = (1-0.000109) \times 225 + 0.000109 \times 399.92σ12(new)=(1−0.000109)×225+0.000109×399.92
=224.9755+0.0436=225.019= 224.9755 + 0.0436 = 225.019=224.9755+0.0436=225.019
第七步:背景/前景判断
按 ωσ\frac{\omega}{\sigma}σω 排序,取前B个分布作为背景模型
通常取 B = 满足 ∑i=1Bωi>T\sum_{i=1}^{B} \omega_i > T∑i=1Bωi>T 的最小B,T通常取0.7
当前权重:ω1=0.604, ω2=0.297, ω3=0.099
累加:0.604 < 0.7,再加0.297 = 0.901 > 0.7
因此前2个分布被选为背景模型
如果当前像素匹配的分布在前B个内 → 背景 ✅
否则 → 前景 ❌
此时匹配分布1属于背景 → 该像素判定为背景
六、阴影检测
原理
阴影通常表现为:亮度降低,色度基本不变
RGB空间处理
在RGB空间检测阴影较困难,通常转换到HSV/HSV空间
HSV空间的阴影条件
- 色调(H)差异小:∣Ht−Hbg∣<TH|H_t - H_{bg}| < T_H∣Ht−Hbg∣<TH
- 饱和度(S)差异小:∣St−Sbg∣<TS|S_t - S_{bg}| < T_S∣St−Sbg∣<TS
- 亮度(V)明显降低:α<VtVbg<β\alpha < \frac{V_t}{V_{bg}} < \betaα<VbgVt<β
其中 α≈0.2,β≈0.8\alpha \approx 0.2, \beta \approx 0.8α≈0.2,β≈0.8
效果
满足上述条件的像素被标记为阴影(通常用灰色表示),不作为前景处理
七、符号总结表
| 符号 | 完整名称 | 类型 | 单位/范围 | 一句话解释 |
|---|---|---|---|---|
| ItI_tIt | 像素强度 | 标量/向量 | 0-255 | 当前像素值 |
| KKK | 混合分量数 | 整数 | 3-5 | 用多少个高斯分布 |
| ωi\omega_iωi | 混合权重 | 标量 | 0-1 | 该分布的重要性 |
| μi\mu_iμi | 均值 | 标量/向量 | 与I_t相同 | 分布的中心位置 |
| σi\sigma_iσi | 标准差 | 标量 | >0 | 数据的分散程度 |
| Σi\Sigma_iΣi | 协方差 | 矩阵 | 半正定 | 多维度相关性 |
| DDD | 匹配阈值 | 标量 | 2.0-3.5 | 匹配宽容度 |
| α\alphaα | 学习率 | 标量 | 0.001-0.01 | 更新速度 |
| ρ\rhoρ | 学习因子 | 标量 | <α | 实际更新步长 |
| MiM_iMi | 匹配标志 | 布尔 | {0,1} | 是否匹配 |
| η\etaη | 高斯密度 | 标量 | 0~1 | 概率密度值 |
E.2. 混合高斯模型(MOG2)中 D、σ 和 Σ 的详细解释
问题:D是什么?σ和Σ有什么不同?
这是一个非常好的问题,涉及到混合高斯模型中的关键符号理解。让我详细解释:
一、符号含义对照表
| 符号 | 名称 | 含义 | 维度 |
|---|---|---|---|
| D | 匹配阈值系数 | 控制匹配检测的宽松程度,通常取2.5~3.5 | 标量 |
| σ (sigma) | 标准差 | 衡量像素值偏离均值的程度 | 标量 |
| σ² | 方差 | 标准差的平方,衡量数据离散程度 | 标量 |
| Σ (Sigma) | 协方差矩阵 | 衡量多维数据各维度之间的相关性 | 矩阵 |
二、D 是什么?
D 是匹配阈值系数(Match Threshold Coefficient),用于判断当前像素值是否与某个高斯分布"匹配"。
数学表达式:
∣It−μi,t−1∣≤D⋅σi,t−1|I_t - \mu_{i,t-1}| \leq D \cdot \sigma_{i,t-1}∣It−μi,t−1∣≤D⋅σi,t−1
物理意义:
| D值 | 含义 | 效果 |
|---|---|---|
| 小(D=2.0) | 严格匹配 | 更敏感,更多像素被判为前景 |
| 大(D=3.5) | 宽松匹配 | 更宽容,更多像素被判为背景 |
典型取值:
- OpenCV MOG2 中 D = 2.5(默认值)
- 取值范围:2.0 ~ 3.5
直观理解:
假设 μ = 128, σ = 10
D = 2.5 时:匹配范围 = [128 - 2.5×10, 128 + 2.5×10] = [103, 153]
D = 3.0 时:匹配范围 = [128 - 3.0×10, 128 + 3.0×10] = [98, 158]
D值越大 → 匹配范围越宽 → 更多像素被判为背景
三、σ 和 Σ 的区别
这是一个关键概念:σ 是标量,Σ 是矩阵。
3.1 σ - 标准差(标量)
含义:一维数据中,衡量像素值偏离均值的程度。
对于灰度图像:
- 像素值是单维的 (灰度值 0-255)
- 每个高斯分布有一个标准差 σ
σ² = 像素值围绕均值 μ 的离散程度
μ = 120, σ = 15 → 大部分像素值在 [105, 135] 范围内
对于灰度图像:
P(It)=12πσ2e−(It−μ)22σ2P(I_t) = \frac{1}{\sqrt{2\pi\sigma^2}} e^{-\frac{(I_t - \mu)^2}{2\sigma^2}}P(It)=2πσ21e−2σ2(It−μ)2
3.2 Σ - 协方差矩阵(矩阵)
含义:在多维数据中,描述各维度之间的相关性。
对于彩色图像(RGB三通道):
- 像素值是3维向量 (R, G, B)
- 需要协方差矩阵 Σ 来描述三通道之间的关系
Σ=[σr2σrgσrbσgrσg2σgbσbrσbgσb2]\Sigma = \begin{bmatrix} \sigma_r^2 & \sigma_{rg} & \sigma_{rb} \\ \sigma_{gr} & \sigma_g^2 & \sigma_{gb} \\ \sigma_{br} & \sigma_{bg} & \sigma_b^2 \end{bmatrix}Σ= σr2σgrσbrσrgσg2σbgσrbσgbσb2
协方差矩阵的含义:
| 矩阵元素 | 含义 | 示例 |
|---|---|---|
| σr2\sigma_r^2σr2 | 红色通道的方差 | 红色值的离散程度 |
| σg2\sigma_g^2σg2 | 绿色通道的方差 | 绿色值的离散程度 |
| σb2\sigma_b^2σb2 | 蓝色通道的方差 | 蓝色值的离散程度 |
| σrg\sigma_{rg}σrg | R与G的协方差 | 红色与绿色的相关程度 |
| σrb\sigma_{rb}σrb | R与B的协方差 | 红色与蓝色的相关程度 |
| σgb\sigma_{gb}σgb | G与B的协方差 | 绿色与蓝色的相关程度 |
3.3 为什么MOG2的计算公式使用σ而不是Σ?
MOG2算法在OpenCV实现中,为简化计算,做了以下假设:
假设:颜色通道之间相互独立
这意味着:
- 协方差矩阵 Σ 是对角矩阵(非对角线元素为0)
- 只需要计算每个通道的方差 σ²
Σ≈[σr2000σg2000σb2]\Sigma \approx \begin{bmatrix} \sigma_r^2 & 0 & 0 \\ 0 & \sigma_g^2 & 0 \\ 0 & 0 & \sigma_b^2 \end{bmatrix}Σ≈ σr2000σg2000σb2
因此,论文中的通用公式:
η(It;μi,t,Σi,t)\eta(I_t; \mu_{i,t}, \Sigma_{i,t})η(It;μi,t,Σi,t)
在实际实现中简化为:
η(It;μi,t,σi,t)\eta(I_t; \mu_{i,t}, \sigma_{i,t})η(It;μi,t,σi,t)
这就是为什么你在参数更新公式中看到的是 σ 而不是 Σ。
关键区别总结:
┌─────────────────────────────────────────────────────────────────────────┐
│ 关键区别 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ σ (标准差) : 一维 → 标量 → 灰度图像使用 │
│ │
│ Σ (协方差矩阵) : 多维 → 矩阵 → 彩色图像理论使用 │
│ │
│ MOG2实现中采用独立通道假设,因此使用σ替代Σ │
│ │
│ D (匹配阈值) : 控制匹配范围 → 参数 ≈ 2.5 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
实际意义:
| 符号 | 一句话解释 |
|---|---|
| D | “有多大差异才算不同?”——匹配的宽容度 |
| σ | “数据有多分散?”——一维的离散程度 |
| Σ | “RGB三通道之间有多相关?”——多维的相关性 |
E.3. 混合高斯模型(MOG2)中每个像素的独立模型
问题:640x480灰度图需要维护多少个参数?
答案:是的!每个像素都有自己独立的混合高斯模型。
一、参数数量计算
1.1 基础参数
对于一张 640 × 480 = 307,200 像素的灰度图:
| 参数 | 每像素数量 | 总数量 |
|---|---|---|
| 像素值 ItI_tIt | 1个 | 307,200 |
| 高斯分布数 K | 1个(通常K=3~5) | 307,200 |
| 均值 μ\muμ | K个 | 307,200 × K |
| 方差 σ2\sigma^2σ2 | K个 | 307,200 × K |
| 权重 ω\omegaω | K个 | 307,200 × K |
1.2 总参数数量
假设 K = 5(实际OpenCV MOG2默认K=5):
总参数=307,200×(1+5+5+5)=307,200×16=4,915,200\text{总参数} = 307,200 \times (1 + 5 + 5 + 5) = 307,200 \times 16 = 4,915,200总参数=307,200×(1+5+5+5)=307,200×16=4,915,200
约 490万个参数!
| 参数类型 | 每像素数量 | 总数量 |
|---|---|---|
| μ\muμ | 5个 | 1,536,000 |
| σ2\sigma^2σ2 | 5个 | 1,536,000 |
| ω\omegaω | 5个 | 1,536,000 |
| 其他标志 | 1个 | 307,200 |
| 合计 | 16个 | ≈ 490万 |
二、数据结构示意图
┌─────────────────────────────────────────────────────────────────────────────┐
│ 640 × 480 图像网格 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │像素0 │ │像素1 │ │像素2 │ │像素3 │ │像素4 │ │ ... │ │
│ │位置 │ │位置 │ │位置 │ │位置 │ │位置 │ │ │ │
│ │(0,0) │ │(0,1) │ │(0,2) │ │(0,3) │ │(0,4) │ │ │ │
│ └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ └──┬───┘ │
│ │ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ ▼ ▼ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ 每个像素的混合高斯模型(K=5) │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ 分布1: ω₁, μ₁, σ₁² │ │ │
│ │ │ 分布2: ω₂, μ₂, σ₂² │ │ │
│ │ │ 分布3: ω₃, μ₃, σ₃² │ │ │
│ │ │ 分布4: ω₄, μ₄, σ₄² │ │ │
│ │ │ 分布5: ω₅, μ₅, σ₅² │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ 每个像素独立维护自己的5个高斯分布模型 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
三、为什么每个像素需要独立模型?
3.1 不同位置的统计特性不同
| 像素位置 | 典型场景 | μ(均值) | σ²(方差) |
|---|---|---|---|
| 天空区域 | 稳定 | 高(~200) | 小(~10) |
| 草地区域 | 中等变化 | 中等(~100) | 中等(~50) |
| 水面区域 | 剧烈变化 | 不定 | 大(~200) |
| 阴影边缘 | 快速切换 | 两峰值 | 大(~300) |
3.2 实际数据示例
# 以640x480图像为例,不同像素位置的高斯模型参数完全不同
像素(100, 50) - 天空区域:
μ = [210, 205, 200, 195, 190] # 偏亮
σ² = [5, 6, 7, 8, 9] # 方差小,稳定
像素(320, 240) - 草地/道路交界:
μ = [120, 115, 110, 50, 45] # 混合亮暗
σ² = [50, 55, 60, 80, 85] # 方差较大
像素(500, 400) - 水面/反光:
μ = [180, 170, 160, 90, 80] # 变化大
σ² = [120, 130, 140, 50, 60] # 方差很大
四、内存占用计算
4.1 单精度浮点数(float32)
每个参数占4字节:
| 参数类型 | 每像素数量 | 总数量 | 内存占用 |
|---|---|---|---|
| μ\muμ | 5个 | 1,536,000 | 6.14 MB |
| σ2\sigma^2σ2 | 5个 | 1,536,000 | 6.14 MB |
| ω\omegaω | 5个 | 1,536,000 | 6.14 MB |
| 其他标志 | 1个 | 307,200 | 1.23 MB |
| 合计 | 16个 | 4,915,200 | ≈ 18.7 MB |
4.2 双精度浮点数(float64)
每参数8字节 → 约 37.4 MB
4.3 实际OpenCV MOG2内存
OpenCV MOG2实际使用优化数据结构,额外存储:
- 背景排序索引
- 匹配标志
- 学习计数器
- 阴影检测标志
实际内存约 25-30 MB(K=5, 640x480)
五、计算复杂度
5.1 每帧每像素的计算量
对于一个像素在所有K个高斯分布上的操作:
| 操作 | 复杂度 |
|---|---|
| 匹配检测 | O(K) |
| 排序查找最匹配 | O(K) |
| 权重更新 | O(K) |
| 最匹配分布的μ更新 | O(1) |
| 最匹配分布的σ²更新 | O(1) |
| 背景模型选择 | O(KlogK) |
| 总计 | 约 20-30次浮点运算/像素 |
5.2 全图总计算量
总运算=307,200×25≈7.68百万次/帧\text{总运算} = 307,200 \times 25 \approx 7.68 \text{百万次/帧}总运算=307,200×25≈7.68百万次/帧
以30fps计算:
7.68×30≈230百万次/秒7.68 \times 30 \approx 230 \text{百万次/秒}7.68×30≈230百万次/秒
这就是为什么MOG2需要实时优化和GPU加速的原因!
六、优化策略
6.1 OpenCV MOG2的优化
| 优化策略 | 效果 | 原理 |
|---|---|---|
| 降低K值 | K=3替代K=5 | 减少25%计算量 |
| 下采样 | 先缩小图像 | 减少像素数量 |
| ROI处理 | 只处理感兴趣区域 | 减少无效像素 |
| SIMD指令 | SSE/AVX加速 | 并行处理多个像素 |
6.2 示例:ROI优化
# 不处理全图,只处理指定区域
roi = (100, 100, 400, 300) # 只处理12万像素(原图的40%)
# 计算量从7.68M降到3.07M/帧
七、与其他方法对比
| 方法 | 每像素参数 | 内存占用 | 计算复杂度 | 适用场景 |
|---|---|---|---|---|
| MOG2 | 16个 | 25MB | 高 | 复杂背景、光照变化 |
| 帧差法 | 1个(前一帧) | 0.3MB | 极低 | 简单场景、实时需求 |
| 均值背景 | 2个(μ,σ²) | 2.3MB | 低 | 稳定背景 |
| 单高斯模型 | 2个(μ,σ²) | 2.3MB | 低 | 单模态背景 |
| ViBe | 20个样本 | 7.4MB | 中 | 运动检测 |
八、总结
核心结论
┌─────────────────────────────────────────────────────────────────────────────┐
│ 总结 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ 1. 是的!640x480灰度图像中,每个像素都有独立的: │
│ - K个高斯分布(μ, σ², ω) │
│ - 每个像素的参数完全不同 │
│ │
│ 2. 总参数数量:约 490万个(K=5) │
│ │
│ 3. 内存占用:约 25-30 MB(实际OpenCV实现) │
│ │
│ 4. 计算量:≈ 7.68百万次浮点运算/帧(全图) │
│ │
│ 5. 每个像素的模型相互独立,因为不同位置的: │
│ - 光照条件不同 │
│ - 物体运动模式不同 │
│ - 背景纹理不同 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
记忆口诀
每个像素一个家,K个高斯来当家。
均值方差和权重,五千个像素百万参数。
内存二十多兆,计算百万次每帧。
各像素独立建,位置不同模型变。
E.4. 场景特征提取算法深度详解
一、符号含义对照表
| 符号 | 名称 | 含义 | 数据类型 | 取值范围 |
|---|---|---|---|---|
| MMM | 图像高度 | 图像垂直方向的像素数量 | 整数 | ≥1 |
| NNN | 图像宽度 | 图像水平方向的像素数量 | 整数 | ≥1 |
| I(x,y)I(x,y)I(x,y) | 像素强度 | 位置(x,y)(x,y)(x,y)处的灰度值 | 标量 | 0~255 |
| LmeanL_{mean}Lmean | 平均亮度 | 全图像素的平均灰度值 | 标量 | 0~255 |
| LstdL_{std}Lstd | 亮度标准差 | 像素值偏离平均值的程度 | 标量 | ≥0 |
| ∇2I\nabla^2 I∇2I | 拉普拉斯算子 | 图像的二阶导数,用于边缘检测 | 标量 | -∞~∞ |
| ElapE_{lap}Elap | 拉普拉斯能量 | 图像边缘强度的度量 | 标量 | ≥0 |
| EdgeEdgeEdge | 边缘像素集合 | Canny算法检测出的边缘像素 | 集合 | - |
| DedgeD_{edge}Dedge | 边缘密度 | 边缘像素占总像素的比例 | 标量 | 0~1 |
| Jc(y)J^c(y)Jc(y) | 颜色通道值 | 位置yyy处ccc通道的像素值 | 标量 | 0~255 |
| Ω(x)\Omega(x)Ω(x) | 局部窗口 | 以xxx为中心的局部区域 | 区域 | - |
| Jdark(x)J^{dark}(x)Jdark(x) | 暗通道 | 局部窗口内RGB通道的最小值 | 标量 | 0~255 |
| AAA | 大气光值 | 图像中最亮的像素值 | 向量 | 0~255 |
| t(x)t(x)t(x) | 透射率 | 光线穿过雾霾的透射比例 | 标量 | 0~1 |
| ω\omegaω | 去雾系数 | 控制去雾强度 | 标量 | 0~1 |
二、亮度特征
2.1 算法原理
亮度特征是最基础的图像统计特征,用于描述图像的整体明暗程度和对比度。
2.1.1 平均亮度 LmeanL_{mean}Lmean
数学定义:
Lmean=1MN∑x=1M∑y=1NI(x,y)L_{mean} = \frac{1}{MN}\sum_{x=1}^{M}\sum_{y=1}^{N} I(x,y)Lmean=MN1x=1∑My=1∑NI(x,y)
数学含义:
- 这是一个一阶统计量(均值)
- 反映图像的整体亮度水平
- 对光照变化敏感
几何解释:可以理解为图像所有像素值的"重心",相当于将图像所有像素值累加后平均。
取值范围:
- Lmean∈[0,255]L_{mean} \in [0, 255]Lmean∈[0,255]
- 000:全黑图像
- 255255255:全白图像
- 白天场景:Lmean≈150∼200L_{mean} \approx 150 \sim 200Lmean≈150∼200
- 夜晚场景:Lmean≈30∼70L_{mean} \approx 30 \sim 70Lmean≈30∼70
2.1.2 亮度标准差 LstdL_{std}Lstd
数学定义:
Lstd=1MN∑x=1M∑y=1N(I(x,y)−Lmean)2L_{std} = \sqrt{\frac{1}{MN}\sum_{x=1}^{M}\sum_{y=1}^{N} (I(x,y)-L_{mean})^2}Lstd=MN1x=1∑My=1∑N(I(x,y)−Lmean)2
数学含义:
- 这是一个二阶统计量(标准差)
- 反映像素值围绕均值的离散程度
- 衡量图像的对比度
几何解释:标准差越大,数据分布越分散;标准差越小,数据分布越集中。
取值范围:
- Lstd≥0L_{std} \geq 0Lstd≥0
- LstdL_{std}Lstd 越大 → 图像对比度越高
- LstdL_{std}Lstd 越小 → 图像越平坦
2.2 公式推导
2.2.1 平均亮度推导
离散形式的均值:
Iˉ=1n∑i=1nIi\bar{I} = \frac{1}{n}\sum_{i=1}^{n} I_iIˉ=n1i=1∑nIi
其中 n=M×Nn = M \times Nn=M×N 为总像素数。
矩阵形式的均值:
Iˉ=1MN1TI\bar{I} = \frac{1}{MN}\mathbf{1}^T \mathbf{I}Iˉ=MN11TI
其中 1\mathbf{1}1 是全1向量,I\mathbf{I}I 是图像向量化后的向量。
2.2.2 标准差推导
方差定义:
σ2=1n∑i=1n(Ii−Iˉ)2=1n∑i=1nIi2−Iˉ2\sigma^2 = \frac{1}{n}\sum_{i=1}^{n} (I_i - \bar{I})^2 = \frac{1}{n}\sum_{i=1}^{n} I_i^2 - \bar{I}^2σ2=n1i=1∑n(Ii−Iˉ)2=n1i=1∑nIi2−Iˉ2
标准差定义:
σ=σ2\sigma = \sqrt{\sigma^2}σ=σ2
等价形式:
σ=1n∑i=1nIi2−(1n∑i=1nIi)2\sigma = \sqrt{\frac{1}{n}\sum_{i=1}^{n} I_i^2 - \left(\frac{1}{n}\sum_{i=1}^{n} I_i\right)^2}σ=n1i=1∑nIi2−(n1i=1∑nIi)2
推导过程:
从定义出发:
σ2=1n∑i=1n(Ii−Iˉ)2\sigma^2 = \frac{1}{n}\sum_{i=1}^{n} (I_i - \bar{I})^2σ2=n1i=1∑n(Ii−Iˉ)2
展开平方项:
σ2=1n∑i=1n(Ii2−2IiIˉ+Iˉ2)\sigma^2 = \frac{1}{n}\sum_{i=1}^{n} (I_i^2 - 2I_i\bar{I} + \bar{I}^2)σ2=n1i=1∑n(Ii2−2IiIˉ+Iˉ2)
拆分成三项:
σ2=1n∑i=1nIi2−2Iˉn∑i=1nIi+1n∑i=1nIˉ2\sigma^2 = \frac{1}{n}\sum_{i=1}^{n} I_i^2 - \frac{2\bar{I}}{n}\sum_{i=1}^{n} I_i + \frac{1}{n}\sum_{i=1}^{n} \bar{I}^2σ2=n1i=1∑nIi2−n2Iˉi=1∑nIi+n1i=1∑nIˉ2
利用 ∑i=1nIi=nIˉ\sum_{i=1}^{n} I_i = n\bar{I}∑i=1nIi=nIˉ:
σ2=1n∑i=1nIi2−2Iˉ2+Iˉ2\sigma^2 = \frac{1}{n}\sum_{i=1}^{n} I_i^2 - 2\bar{I}^2 + \bar{I}^2σ2=n1i=1∑nIi2−2Iˉ2+Iˉ2
化简得:
σ2=1n∑i=1nIi2−Iˉ2\sigma^2 = \frac{1}{n}\sum_{i=1}^{n} I_i^2 - \bar{I}^2σ2=n1i=1∑nIi2−Iˉ2
2.3 计算范例
假设图像尺寸 M=4, N=4(16像素)
原始灰度图像矩阵:
I=[100110120130105115125135110120130140115125135145] I = \begin{bmatrix} 100 & 110 & 120 & 130 \\ 105 & 115 & 125 & 135 \\ 110 & 120 & 130 & 140 \\ 115 & 125 & 135 & 145 \end{bmatrix} I= 100105110115110115120125120125130135130135140145
第一步:计算平均亮度 LmeanL_{mean}Lmean
(1) 计算所有像素的和
逐行求和:
- 第1行:100+110+120+130=460100 + 110 + 120 + 130 = 460100+110+120+130=460
- 第2行:105+115+125+135=480105 + 115 + 125 + 135 = 480105+115+125+135=480
- 第3行:110+120+130+140=500110 + 120 + 130 + 140 = 500110+120+130+140=500
- 第4行:115+125+135+145=520115 + 125 + 135 + 145 = 520115+125+135+145=520
总和:
S=460+480+500+520=1960S = 460 + 480 + 500 + 520 = 1960S=460+480+500+520=1960
(2) 计算平均亮度
Lmean=SM×N=19604×4=196016=122.5L_{mean} = \frac{S}{M \times N} = \frac{1960}{4 \times 4} = \frac{1960}{16} = 122.5Lmean=M×NS=4×41960=161960=122.5
第二步:计算亮度标准差 LstdL_{std}Lstd
(1) 计算每个像素与均值的偏差 (I(x,y)−Lmean)(I(x,y) - L_{mean})(I(x,y)−Lmean)
| 位置 | III | I−122.5I - 122.5I−122.5 | (I−122.5)2(I - 122.5)^2(I−122.5)2 |
|---|---|---|---|
| (1,1) | 100 | -22.5 | 506.25 |
| (1,2) | 110 | -12.5 | 156.25 |
| (1,3) | 120 | -2.5 | 6.25 |
| (1,4) | 130 | 7.5 | 56.25 |
| (2,1) | 105 | -17.5 | 306.25 |
| (2,2) | 115 | -7.5 | 56.25 |
| (2,3) | 125 | 2.5 | 6.25 |
| (2,4) | 135 | 12.5 | 156.25 |
| (3,1) | 110 | -12.5 | 156.25 |
| (3,2) | 120 | -2.5 | 6.25 |
| (3,3) | 130 | 7.5 | 56.25 |
| (3,4) | 140 | 17.5 | 306.25 |
| (4,1) | 115 | -7.5 | 56.25 |
| (4,2) | 125 | 2.5 | 6.25 |
| (4,3) | 135 | 12.5 | 156.25 |
| (4,4) | 145 | 22.5 | 506.25 |
(2) 计算偏差平方和
逐行求和:
- 第1行:506.25+156.25+6.25+56.25=725506.25 + 156.25 + 6.25 + 56.25 = 725506.25+156.25+6.25+56.25=725
- 第2行:306.25+56.25+6.25+156.25=525306.25 + 56.25 + 6.25 + 156.25 = 525306.25+56.25+6.25+156.25=525
- 第3行:156.25+6.25+56.25+306.25=525156.25 + 6.25 + 56.25 + 306.25 = 525156.25+6.25+56.25+306.25=525
- 第4行:56.25+6.25+156.25+506.25=72556.25 + 6.25 + 156.25 + 506.25 = 72556.25+6.25+156.25+506.25=725
总和:
SS=725+525+525+725=2500SS = 725 + 525 + 525 + 725 = 2500SS=725+525+525+725=2500
(3) 计算方差
σ2=SSM×N=250016=156.25\sigma^2 = \frac{SS}{M \times N} = \frac{2500}{16} = 156.25σ2=M×NSS=162500=156.25
(4) 计算标准差
Lstd=σ2=156.25=12.5L_{std} = \sqrt{\sigma^2} = \sqrt{156.25} = 12.5Lstd=σ2=156.25=12.5
结果:
- Lmean=122.5L_{mean} = 122.5Lmean=122.5
- Lstd=12.5L_{std} = 12.5Lstd=12.5
物理意义:图像平均亮度为122.5(中等亮度),标准差12.5表示像素值在均值附近波动,对比度适中。
标准差的百分比表示:
相对标准差=LstdLmean×100%=12.5122.5×100%≈10.2%\text{相对标准差} = \frac{L_{std}}{L_{mean}} \times 100\% = \frac{12.5}{122.5} \times 100\% \approx 10.2\%相对标准差=LmeanLstd×100%=122.512.5×100%≈10.2%
三、纹理特征
3.1 拉普拉斯能量 ElapE_{lap}Elap
3.1.1 算法原理
拉普拉斯算子是一种二阶微分算子,用于检测图像中的边缘和纹理。
连续形式的拉普拉斯算子:
∇2I=∂2I∂x2+∂2I∂y2\nabla^2 I = \frac{\partial^2 I}{\partial x^2} + \frac{\partial^2 I}{\partial y^2}∇2I=∂x2∂2I+∂y2∂2I
物理意义:
- 一阶导数:检测边缘的位置
- 二阶导数:检测边缘的强度(变化率的变化率)
拉普拉斯算子的特性:
- 各向同性(旋转不变)
- 对灰度突变敏感
- 对噪声敏感
3.1.2 离散化推导
一阶导数的离散近似(前向差分):
∂I∂x≈I(x+1,y)−I(x,y)\frac{\partial I}{\partial x} \approx I(x+1,y) - I(x,y)∂x∂I≈I(x+1,y)−I(x,y)
∂I∂y≈I(x,y+1)−I(x,y)\frac{\partial I}{\partial y} \approx I(x,y+1) - I(x,y)∂y∂I≈I(x,y+1)−I(x,y)
二阶导数的离散近似:
∂2I∂x2≈∂∂x(∂I∂x)≈[I(x+1,y)−I(x,y)]−[I(x,y)−I(x−1,y)]\frac{\partial^2 I}{\partial x^2} \approx \frac{\partial}{\partial x}\left(\frac{\partial I}{\partial x}\right) \approx [I(x+1,y) - I(x,y)] - [I(x,y) - I(x-1,y)]∂x2∂2I≈∂x∂(∂x∂I)≈[I(x+1,y)−I(x,y)]−[I(x,y)−I(x−1,y)]
化简得:
∂2I∂x2≈I(x+1,y)+I(x−1,y)−2I(x,y)\frac{\partial^2 I}{\partial x^2} \approx I(x+1,y) + I(x-1,y) - 2I(x,y)∂x2∂2I≈I(x+1,y)+I(x−1,y)−2I(x,y)
同理:
∂2I∂y2≈I(x,y+1)+I(x,y−1)−2I(x,y)\frac{\partial^2 I}{\partial y^2} \approx I(x,y+1) + I(x,y-1) - 2I(x,y)∂y2∂2I≈I(x,y+1)+I(x,y−1)−2I(x,y)
离散拉普拉斯算子:
∇2I≈I(x+1,y)+I(x−1,y)+I(x,y+1)+I(x,y−1)−4I(x,y)\nabla^2 I \approx I(x+1,y) + I(x-1,y) + I(x,y+1) + I(x,y-1) - 4I(x,y)∇2I≈I(x+1,y)+I(x−1,y)+I(x,y+1)+I(x,y−1)−4I(x,y)
写成卷积核形式(四邻域):
L4=[0101−41010] L_4 = \begin{bmatrix} 0 & 1 & 0 \\ 1 & -4 & 1 \\ 0 & 1 & 0 \end{bmatrix} L4= 0101−41010
八邻域拉普拉斯核(包含对角线):
L8=[1111−81111] L_8 = \begin{bmatrix} 1 & 1 & 1 \\ 1 & -8 & 1 \\ 1 & 1 & 1 \end{bmatrix} L8= 1111−81111
3.1.3 拉普拉斯能量定义
Elap=1MN∑x=1M∑y=1N∣∇2I(x,y)∣E_{lap} = \frac{1}{MN}\sum_{x=1}^{M}\sum_{y=1}^{N} |\nabla^2 I(x,y)|Elap=MN1x=1∑My=1∑N∣∇2I(x,y)∣
为什么取绝对值:
- 拉普拉斯响应可正可负
- 绝对值保留边缘强度信息
- 正负号表示边缘的极性(由暗到亮或由亮到暗)
3.2 边缘密度 DedgeD_{edge}Dedge
3.2.1 Canny边缘检测流程
Canny边缘检测是John F. Canny在1986年提出的多阶段边缘检测算法,被认为是边缘检测的黄金标准。
┌─────────────────────────────────────────────────────────────────┐
│ Canny边缘检测流程 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 输入 │ │ 高斯 │ │ 梯度 │ │ 非极大 │ │
│ │ 图像 │───→│ 滤波 │───→│ 计算 │───→│ 值抑制 │ │
│ └─────────┘ └─────────┘ └─────────┘ └────┬────┘ │
│ │ │
│ ▼ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 输出 │←───│ 边缘 │←───│ 双阈值 │←───│ 滞后 │ │
│ │ 边缘图 │ │ 连接 │ │ 检测 │ │ 阈值 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
3.2.2 步骤1:高斯滤波
高斯核函数:
G(x,y)=12πσ2e−x2+y22σ2G(x,y) = \frac{1}{2\pi\sigma^2} e^{-\frac{x^2+y^2}{2\sigma^2}}G(x,y)=2πσ21e−2σ2x2+y2
截断后形成卷积核,例如3×3高斯核(σ=1\sigma=1σ=1):
G3=116[121242121] G_3 = \frac{1}{16}\begin{bmatrix} 1 & 2 & 1 \\ 2 & 4 & 2 \\ 1 & 2 & 1 \end{bmatrix} G3=161
121242121
目的:去除图像中的噪声,避免噪声被误检为边缘。
3.2.3 步骤2:梯度计算(Sobel算子)
Sobel-X算子(检测水平边缘):
Gx=[−101−202−101] G_x = \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix} Gx=
−1−2−1000121
Sobel-Y算子(检测垂直边缘):
Gy=[−1−2−1000121] G_y = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix} Gy=
−101−202−101
梯度幅值:
G=Gx2+Gy2G = \sqrt{G_x^2 + G_y^2}G=Gx2+Gy2
梯度方向:
θ=arctan(GyGx)\theta = \arctan\left(\frac{G_y}{G_x}\right)θ=arctan(GxGy)
3.2.4 步骤3:非极大值抑制
沿梯度方向比较相邻像素:
- 如果当前像素的梯度幅值不是局部最大值 → 抑制为0
- 如果当前像素的梯度幅值是局部最大值 → 保留
数学表达:
GNMS(x,y)={G(x,y)if G(x,y) is local max along θ0otherwiseG_{NMS}(x,y) = \begin{cases} G(x,y) & \text{if } G(x,y) \text{ is local max along } \theta \\ 0 & \text{otherwise} \end{cases}GNMS(x,y)={G(x,y)0if G(x,y) is local max along θotherwise
目的:细化边缘,使边缘线变细(单像素宽度)。
3.2.5 步骤4:双阈值检测
- 高阈值 ThighT_{high}Thigh:确定强边缘
- 低阈值 TlowT_{low}Tlow:确定弱边缘
强边缘:G > T_high
弱边缘:T_low < G ≤ T_high
非边缘:G ≤ T_low
典型值:Thigh≈2×TlowT_{high} \approx 2 \times T_{low}Thigh≈2×Tlow,例如 Thigh=150,Tlow=50T_{high}=150, T_{low}=50Thigh=150,Tlow=50
3.2.6 步骤5:边缘连接(滞后阈值)
只有与强边缘相连的弱边缘才被保留为最终边缘。
算法:
- 从强边缘像素开始
- 八邻域搜索弱边缘像素
- 将相连的弱边缘提升为强边缘
- 重复直到没有新像素加入
3.2.7 边缘密度定义
Dedge=∣Edge∣M×ND_{edge} = \frac{|\text{Edge}|}{M \times N}Dedge=M×N∣Edge∣
其中 ∣Edge∣|\text{Edge}|∣Edge∣ 是最终边缘像素的数量。
3.3 计算范例
3.3.1 拉普拉斯能量计算
使用拉普拉斯算子 L4L_4L4,图像尺寸 M=4, N=4
图像矩阵 III:
I=[100110120130105115125135110120130140115125135145] I = \begin{bmatrix} 100 & 110 & 120 & 130 \\ 105 & 115 & 125 & 135 \\ 110 & 120 & 130 & 140 \\ 115 & 125 & 135 & 145 \end{bmatrix} I= 100105110115110115120125120125130135130135140145
第一步:理解拉普拉斯卷积计算
对于位置(x,y)(x,y)(x,y),拉普拉斯响应为:
∇2I(x,y)=I(x,y−1)+I(x,y+1)+I(x−1,y)+I(x+1,y)−4I(x,y)\nabla^2 I(x,y) = I(x,y-1) + I(x,y+1) + I(x-1,y) + I(x+1,y) - 4I(x,y)∇2I(x,y)=I(x,y−1)+I(x,y+1)+I(x−1,y)+I(x+1,y)−4I(x,y)
由于拉普拉斯核需要3×3窗口,边界像素无法计算。我们只能计算内部2×2区域。
计算位置(2,2):(x=2,y=2)(x=2, y=2)(x=2,y=2),像素值 I(2,2)=115I(2,2)=115I(2,2)=115
相关像素(坐标按OpenCV的(row,col)约定):
- I(2,1)=I(x,y−1)=105I(2,1) = I(x,y-1) = 105I(2,1)=I(x,y−1)=105(左)
- I(2,3)=I(x,y+1)=125I(2,3) = I(x,y+1) = 125I(2,3)=I(x,y+1)=125(右)
- I(1,2)=I(x−1,y)=110I(1,2) = I(x-1,y) = 110I(1,2)=I(x−1,y)=110(上)
- I(3,2)=I(x+1,y)=120I(3,2) = I(x+1,y) = 120I(3,2)=I(x+1,y)=120(下)
代入公式:
∇2I(2,2)=105+125+110+120−4×115\nabla^2 I(2,2) = 105 + 125 + 110 + 120 - 4 \times 115∇2I(2,2)=105+125+110+120−4×115
=105+125+110+120−460=460−460=0= 105 + 125 + 110 + 120 - 460 = 460 - 460 = 0=105+125+110+120−460=460−460=0
计算位置(2,3):(x=2,y=3)(x=2, y=3)(x=2,y=3),像素值 I(2,3)=125I(2,3)=125I(2,3)=125
相关像素:
- I(2,2)=I(x,y−1)=115I(2,2) = I(x,y-1) = 115I(2,2)=I(x,y−1)=115(左)
- I(2,4)=I(x,y+1)=135I(2,4) = I(x,y+1) = 135I(2,4)=I(x,y+1)=135(右)
- I(1,3)=I(x−1,y)=120I(1,3) = I(x-1,y) = 120I(1,3)=I(x−1,y)=120(上)
- I(3,3)=I(x+1,y)=130I(3,3) = I(x+1,y) = 130I(3,3)=I(x+1,y)=130(下)
∇2I(2,3)=115+135+120+130−4×125\nabla^2 I(2,3) = 115 + 135 + 120 + 130 - 4 \times 125∇2I(2,3)=115+135+120+130−4×125
=115+135+120+130−500=500−500=0= 115 + 135 + 120 + 130 - 500 = 500 - 500 = 0=115+135+120+130−500=500−500=0
计算位置(3,2):(x=3,y=2)(x=3, y=2)(x=3,y=2),像素值 I(3,2)=120I(3,2)=120I(3,2)=120
相关像素:
- I(3,1)=I(x,y−1)=110I(3,1) = I(x,y-1) = 110I(3,1)=I(x,y−1)=110(左)
- I(3,3)=I(x,y+1)=130I(3,3) = I(x,y+1) = 130I(3,3)=I(x,y+1)=130(右)
- I(2,2)=I(x−1,y)=115I(2,2) = I(x-1,y) = 115I(2,2)=I(x−1,y)=115(上)
- I(4,2)=I(x+1,y)=125I(4,2) = I(x+1,y) = 125I(4,2)=I(x+1,y)=125(下)
∇2I(3,2)=110+130+115+125−4×120\nabla^2 I(3,2) = 110 + 130 + 115 + 125 - 4 \times 120∇2I(3,2)=110+130+115+125−4×120
=110+130+115+125−480=480−480=0= 110 + 130 + 115 + 125 - 480 = 480 - 480 = 0=110+130+115+125−480=480−480=0
计算位置(3,3):(x=3,y=3)(x=3, y=3)(x=3,y=3),像素值 I(3,3)=130I(3,3)=130I(3,3)=130
相关像素:
- I(3,2)=I(x,y−1)=120I(3,2) = I(x,y-1) = 120I(3,2)=I(x,y−1)=120(左)
- I(3,4)=I(x,y+1)=140I(3,4) = I(x,y+1) = 140I(3,4)=I(x,y+1)=140(右)
- I(2,3)=I(x−1,y)=125I(2,3) = I(x-1,y) = 125I(2,3)=I(x−1,y)=125(上)
- I(4,3)=I(x+1,y)=135I(4,3) = I(x+1,y) = 135I(4,3)=I(x+1,y)=135(下)
∇2I(3,3)=120+140+125+135−4×130\nabla^2 I(3,3) = 120 + 140 + 125 + 135 - 4 \times 130∇2I(3,3)=120+140+125+135−4×130
=120+140+125+135−520=520−520=0= 120 + 140 + 125 + 135 - 520 = 520 - 520 = 0=120+140+125+135−520=520−520=0
第二步:计算拉普拉斯能量
由于该图像是严格的线性渐变,所有内部点的拉普拉斯响应都为0!
∑x=14∑y=14∣∇2I(x,y)∣=0+0+0+0+0+0+0+0=0\sum_{x=1}^{4}\sum_{y=1}^{4} |\nabla^2 I(x,y)| = 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 = 0x=1∑4y=1∑4∣∇2I(x,y)∣=0+0+0+0+0+0+0+0=0
Elap=016=0E_{lap} = \frac{0}{16} = 0Elap=160=0
验证线性渐变的性质:
对于线性函数 I(x,y)=ax+by+cI(x,y) = ax + by + cI(x,y)=ax+by+c:
- 一阶导数为常数:∂I∂x=a,∂I∂y=b\frac{\partial I}{\partial x} = a, \frac{\partial I}{\partial y} = b∂x∂I=a,∂y∂I=b
- 二阶导数为0:∂2I∂x2=0,∂2I∂y2=0\frac{\partial^2 I}{\partial x^2} = 0, \frac{\partial^2 I}{\partial y^2} = 0∂x2∂2I=0,∂y2∂2I=0
- 拉普拉斯算子:∇2I=0\nabla^2 I = 0∇2I=0
结论:线性渐变图像没有纹理,拉普拉斯能量为0。
3.3.2 具有纹理的图像范例
为了展示非零的拉普拉斯能量,考虑一个有纹理的图像:
I=[1001001001001005015010010015050100100100100100] I = \begin{bmatrix} 100 & 100 & 100 & 100 \\ 100 & 50 & 150 & 100 \\ 100 & 150 & 50 & 100 \\ 100 & 100 & 100 & 100 \end{bmatrix} I= 1001001001001005015010010015050100100100100100
计算中心区域(2,2):I(2,2)=50I(2,2) = 50I(2,2)=50
相关像素:
- I(2,1)=100I(2,1) = 100I(2,1)=100
- I(2,3)=150I(2,3) = 150I(2,3)=150
- I(1,2)=100I(1,2) = 100I(1,2)=100
- I(3,2)=150I(3,2) = 150I(3,2)=150
∇2I(2,2)=100+150+100+150−4×50\nabla^2 I(2,2) = 100 + 150 + 100 + 150 - 4 \times 50∇2I(2,2)=100+150+100+150−4×50
=100+150+100+150−200=500−200=300= 100 + 150 + 100 + 150 - 200 = 500 - 200 = 300=100+150+100+150−200=500−200=300
计算位置(2,3):I(2,3)=150I(2,3) = 150I(2,3)=150
相关像素:
- I(2,2)=50I(2,2) = 50I(2,2)=50
- I(2,4)=100I(2,4) = 100I(2,4)=100
- I(1,3)=100I(1,3) = 100I(1,3)=100
- I(3,3)=50I(3,3) = 50I(3,3)=50
∇2I(2,3)=50+100+100+50−4×150\nabla^2 I(2,3) = 50 + 100 + 100 + 50 - 4 \times 150∇2I(2,3)=50+100+100+50−4×150
=50+100+100+50−600=300−600=−300= 50 + 100 + 100 + 50 - 600 = 300 - 600 = -300=50+100+100+50−600=300−600=−300
计算拉普拉斯能量:
Elap=∣300∣+∣−300∣16=60016=37.5E_{lap} = \frac{|300| + |-300|}{16} = \frac{600}{16} = 37.5Elap=16∣300∣+∣−300∣=16600=37.5
四、暗通道先验(雾霾检测)
4.1 算法原理
暗通道先验是何恺明等人于2009年提出的去雾算法核心理论,该工作获得了CVPR最佳论文奖。
4.1.1 暗通道先验理论
核心观察:在无雾的自然图像中,至少有一个颜色通道在某些局部区域的值非常低(趋近于0)。
Jdark(x)=miny∈Ω(x)(minc∈{r,g,b}Jc(y))→0J^{dark}(x) = \min_{y \in \Omega(x)} \left( \min_{c \in \{r,g,b\}} J^c(y) \right) \rightarrow 0Jdark(x)=y∈Ω(x)min(c∈{r,g,b}minJc(y))→0
数学解释:
- minc∈{r,g,b}Jc(y)\min_{c \in \{r,g,b\}} J^c(y)minc∈{r,g,b}Jc(y):取位置yyy处RGB三通道的最小值
- miny∈Ω(x)\min_{y \in \Omega(x)}miny∈Ω(x):取局部窗口Ω(x)\Omega(x)Ω(x)内的最小值
- 对于无雾图像,这个值接近0
为什么暗通道先验成立:
- 阴影:物体表面的阴影导致某些通道值很低
- 彩色物体:物体本身颜色饱和度高的区域,某些通道值低
- 暗色物体:深色物体或暗表面自然值低
4.1.2 雾图成像模型
物理模型(大气散射模型):
I(x)=J(x)⋅t(x)+A⋅(1−t(x))I(x) = J(x) \cdot t(x) + A \cdot (1 - t(x))I(x)=J(x)⋅t(x)+A⋅(1−t(x))
各部分的物理意义:
- I(x)I(x)I(x):相机观测到的有雾图像
- J(x)J(x)J(x):无雾的真实场景图像(目标恢复图像)
- t(x)t(x)t(x):透射率,表示光线穿过雾霾到达相机的比例
- AAA:大气光值,表示环境光的颜色和强度
透射率的物理模型(比尔-朗伯定律):
t(x)=e−βd(x)t(x) = e^{-\beta d(x)}t(x)=e−βd(x)
其中:
- β\betaβ:大气散射系数(雾的浓度)
- d(x)d(x)d(x):场景深度(物体到相机的距离)
模型的分量形式:
Ic(x)=Jc(x)⋅t(x)+Ac⋅(1−t(x)),c∈{r,g,b}I^c(x) = J^c(x) \cdot t(x) + A^c \cdot (1 - t(x)), \quad c \in \{r,g,b\}Ic(x)=Jc(x)⋅t(x)+Ac⋅(1−t(x)),c∈{r,g,b}
4.2 公式推导
4.2.1 大气光值 AAA 估计
定义:
A=maxx(∑cIc(x))A = \max_{x} \left( \sum_{c} I^c(x) \right)A=xmax(c∑Ic(x))
推导思路:
- 雾图中,大气光导致最亮的像素通常是天空或白色物体
- 取RGB三通道和最大的像素作为大气光估计
- 实际中常在暗通道前0.1%最亮的像素中取最大值
为什么这样估计:
- 雾图中,远处的物体亮度趋近于大气光
- 最亮的像素最能代表大气光的颜色
4.2.2 暗通道的有雾图像性质
对雾图成像模型两边取最小值:
miny∈Ω(x)(mincIc(y))=miny∈Ω(x)(minc[Jc(y)t(y)+Ac(1−t(y))])\min_{y \in \Omega(x)} \left( \min_{c} I^c(y) \right) = \min_{y \in \Omega(x)} \left( \min_{c} [J^c(y)t(y) + A^c(1 - t(y))] \right)y∈Ω(x)min(cminIc(y))=y∈Ω(x)min(cmin[Jc(y)t(y)+Ac(1−t(y))])
关键假设:透射率在局部窗口Ω(x)\Omega(x)Ω(x)内是常数,记为t~(x)\tilde{t}(x)t~(x)。
miny∈Ω(x)(mincIc(y))=t~(x)⋅miny∈Ω(x)(mincJc(y))+(1−t~(x))⋅miny∈Ω(x)(mincAc)\min_{y \in \Omega(x)} \left( \min_{c} I^c(y) \right) = \tilde{t}(x) \cdot \min_{y \in \Omega(x)} \left( \min_{c} J^c(y) \right) + (1 - \tilde{t}(x)) \cdot \min_{y \in \Omega(x)} \left( \min_{c} A^c \right)y∈Ω(x)min(cminIc(y))=t~(x)⋅y∈Ω(x)min(cminJc(y))+(1−t~(x))⋅y∈Ω(x)min(cminAc)
由于AcA^cAc是常数:
mincAc=min(Ar,Ag,Ab)\min_{c} A^c = \min(A^r, A^g, A^b)cminAc=min(Ar,Ag,Ab)
利用暗通道先验:
miny∈Ω(x)(mincJc(y))≈0\min_{y \in \Omega(x)} \left( \min_{c} J^c(y) \right) \approx 0y∈Ω(x)min(cminJc(y))≈0
代入得:
miny∈Ω(x)(mincIc(y))≈0+(1−t~(x))⋅mincAc\min_{y \in \Omega(x)} \left( \min_{c} I^c(y) \right) \approx 0 + (1 - \tilde{t}(x)) \cdot \min_{c} A^cy∈Ω(x)min(cminIc(y))≈0+(1−t~(x))⋅cminAc
移项得:
t~(x)≈1−miny∈Ω(x)(mincIc(y))mincAc\tilde{t}(x) \approx 1 - \frac{\min_{y \in \Omega(x)} \left( \min_{c} I^c(y) \right)}{\min_{c} A^c}t~(x)≈1−mincAcminy∈Ω(x)(mincIc(y))
4.2.3 归一化处理(稳定版本)
将图像每个通道除以大气光AcA^cAc:
Ic(y)Ac=Jc(y)Ac⋅t(y)+(1−t(y))\frac{I^c(y)}{A^c} = \frac{J^c(y)}{A^c} \cdot t(y) + (1 - t(y))AcIc(y)=AcJc(y)⋅t(y)+(1−t(y))
取局部最小值:
miny∈Ω(x)(mincIc(y)Ac)=t(x)⋅miny∈Ω(x)(mincJc(y)Ac)+(1−t(x))\min_{y \in \Omega(x)} \left( \min_{c} \frac{I^c(y)}{A^c} \right) = t(x) \cdot \min_{y \in \Omega(x)} \left( \min_{c} \frac{J^c(y)}{A^c} \right) + (1 - t(x))y∈Ω(x)min(cminAcIc(y))=t(x)⋅y∈Ω(x)min(cminAcJc(y))+(1−t(x))
由于mincJc(y)Ac≈0\min_{c} \frac{J^c(y)}{A^c} \approx 0mincAcJc(y)≈0(暗通道先验),可得:
miny∈Ω(x)(mincIc(y)Ac)=1−t(x)\min_{y \in \Omega(x)} \left( \min_{c} \frac{I^c(y)}{A^c} \right) = 1 - t(x)y∈Ω(x)min(cminAcIc(y))=1−t(x)
最终透射率公式:
t(x)=1−minc(miny∈Ω(x)Ic(y)Ac)t(x) = 1 - \min_{c} \left( \min_{y \in \Omega(x)} \frac{I^c(y)}{A^c} \right)t(x)=1−cmin(y∈Ω(x)minAcIc(y))
加入ω\omegaω参数(保留少量雾,使图像更自然):
t(x)=1−ω⋅minc(miny∈Ω(x)Ic(y)Ac)t(x) = 1 - \omega \cdot \min_{c} \left( \min_{y \in \Omega(x)} \frac{I^c(y)}{A^c} \right)t(x)=1−ω⋅cmin(y∈Ω(x)minAcIc(y))
其中ω=0.95\omega = 0.95ω=0.95通常取0.95。
4.3 计算范例
假设有一张3×3彩色图像(RGB三通道)
原始有雾图像 III
R通道:
IR=[180170160175165155170160150] I_R = \begin{bmatrix} 180 & 170 & 160 \\ 175 & 165 & 155 \\ 170 & 160 & 150 \end{bmatrix} IR=
180175170170165160160155150
G通道:
IG=[160150140155145135150140130] I_G = \begin{bmatrix} 160 & 150 & 140 \\ 155 & 145 & 135 \\ 150 & 140 & 130 \end{bmatrix} IG=
160155150150145140140135130
B通道:
IB=[140130120135125115130120110] I_B = \begin{bmatrix} 140 & 130 & 120 \\ 135 & 125 & 115 \\ 130 & 120 & 110 \end{bmatrix} IB=
140135130130125120120115110
第一步:估计大气光值 AAA
取全图最亮的像素值:
最亮像素位于(1,1):I(1,1)=[180,160,140]I(1,1) = [180, 160, 140]I(1,1)=[180,160,140]
因此:
A=[180,160,140]A = [180, 160, 140]A=[180,160,140]
第二步:计算归一化图像 Ic(y)Ac\frac{I^c(y)}{A^c}AcIc(y)
对于位置(1,1):
- R:180/180=1.000180/180 = 1.000180/180=1.000
- G:160/160=1.000160/160 = 1.000160/160=1.000
- B:140/140=1.000140/140 = 1.000140/140=1.000
对于位置(1,2):
- R:170/180=0.944170/180 = 0.944170/180=0.944
- G:150/160=0.938150/160 = 0.938150/160=0.938
- B:130/140=0.929130/140 = 0.929130/140=0.929
对于位置(3,3):
- R:150/180=0.833150/180 = 0.833150/180=0.833
- G:130/160=0.813130/160 = 0.813130/160=0.813
- B:110/140=0.786110/140 = 0.786110/140=0.786
第三步:计算每个像素的通道最小值
M(x)=mincIc(x)AcM(x) = \min_{c} \frac{I^c(x)}{A^c}M(x)=cminAcIc(x)
| 位置 | R/180 | G/160 | B/140 | min |
|---|---|---|---|---|
| (1,1) | 1.000 | 1.000 | 1.000 | 1.000 |
| (1,2) | 0.944 | 0.938 | 0.929 | 0.929 |
| (1,3) | 0.889 | 0.875 | 0.857 | 0.857 |
| (2,1) | 0.972 | 0.969 | 0.964 | 0.964 |
| (2,2) | 0.917 | 0.906 | 0.893 | 0.893 |
| (2,3) | 0.861 | 0.844 | 0.821 | 0.821 |
| (3,1) | 0.944 | 0.938 | 0.929 | 0.929 |
| (3,2) | 0.889 | 0.875 | 0.857 | 0.857 |
| (3,3) | 0.833 | 0.813 | 0.786 | 0.786 |
第四步:应用最小值滤波(窗口大小3×3)
对每个3×3窗口取最小值。对于中心位置(2,2),窗口包含所有9个像素:
miny∈Ω(2,2)M(y)=min(1.000,0.929,0.857,0.964,0.893,0.821,0.929,0.857,0.786)\min_{y \in \Omega(2,2)} M(y) = \min(1.000, 0.929, 0.857, 0.964, 0.893, 0.821, 0.929, 0.857, 0.786)y∈Ω(2,2)minM(y)=min(1.000,0.929,0.857,0.964,0.893,0.821,0.929,0.857,0.786)
= 0.786
第五步:计算透射率 t(x)t(x)t(x)
取 ω=0.95\omega = 0.95ω=0.95:
t(2,2)=1−0.95×0.786=1−0.7467=0.2533t(2,2) = 1 - 0.95 \times 0.786 = 1 - 0.7467 = 0.2533t(2,2)=1−0.95×0.786=1−0.7467=0.2533
结果:透射率约为0.25,表示该区域雾霾较重,只有25%的光线透过。
五、特征计算复杂度分析
| 特征 | 时间复杂度 | 空间复杂度 | 说明 |
|---|---|---|---|
| LmeanL_{mean}Lmean | O(MN)O(MN)O(MN) | O(1)O(1)O(1) | 单次遍历 |
| LstdL_{std}Lstd | O(MN)O(MN)O(MN) | O(1)O(1)O(1) | 两次遍历 |
| ElapE_{lap}Elap | O(MN)O(MN)O(MN) | O(MN)O(MN)O(MN) | 需要卷积 |
| DedgeD_{edge}Dedge | O(MNlog(MN))O(MN \log(MN))O(MNlog(MN)) | O(MN)O(MN)O(MN) | 需要Canny |
| 暗通道 | O(MN⋅k2)O(MN \cdot k^2)O(MN⋅k2) | O(MN)O(MN)O(MN) | 窗口滤波 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)