卡尔曼滤波的本质:从似然p(z|x)理解传感器信任机制
1. 这不是数学推导课,而是一次“滤波器怎么想明白自己在干什么”的现场复盘
你有没有过这种感觉:学卡尔曼滤波时,公式背得滚瓜烂熟,矩阵乘来乘去也从不出错,可一旦离开标准教材里的匀速直线运动小车例子,面对真实传感器数据——比如无人机IMU和GPS融合时的剧烈抖动、工业振动台加速度计的低信噪比输出、甚至只是手机陀螺仪在口袋里晃动时的毛刺——立刻就懵了。不是不会算,是不知道“该信谁多一点”“为什么这次要大幅修正状态”“凭什么上一时刻的协方差能决定这一时刻的增益”。问题不在计算,而在理解滤波器的决策逻辑。
这正是标题里“似然 p(z|x) 的概率生成视角”要撬开的那扇门。它不教你如何写 K = P H^T (H P H^T + R)^{-1},而是带你回到贝叶斯公式的原点:滤波器本质上是在不断回答一个问题——“在已知我当前对系统状态x的信念(先验p(x))的前提下,新观测z到底有多可能由这个x生成?” 这个“有多可能”,就是似然函数 p(z|x)。它不是凭空定义的,而是由传感器物理模型决定的:一个理想温度计读数z,若真实温度x是25℃,那么z=25.3℃的概率是多少?z=30℃呢?z=10℃呢?这个概率分布,就是p(z|x)的全部含义。线性卡尔曼滤波之所以“线性”,正是因为它的p(z|x)被建模为高斯分布,且观测方程z = Hx + v中H是常数矩阵、v是零均值高斯噪声——这使得后验p(x|z)在贝叶斯更新后,依然保持高斯形式,从而让整个递推过程闭合、可解析。
所以,这篇内容适合三类人:一是刚学完卡尔曼但总卡在“为什么用这个公式”的工科生;二是正在调试实际滤波器、发现增益调不对、残差老不收敛的嵌入式工程师;三是想把滤波逻辑嵌入更复杂概率图模型(比如SLAM中的因子图)的研究者。它不提供代码模板,但能让你下次调参时,心里清楚每一个数字背后代表的物理直觉——比如R矩阵调大,不是“让滤波器变懒”,而是明确告诉它:“我对这次测量z的信任度下降了,它由真实x生成的可能性整体变平缓了”。这种视角转换,往往比调十次参数更有效。
2. 为什么非得从贝叶斯公式出发?——绕开“黑箱公式”,重建滤波器的决策心智模型
2.1 卡尔曼滤波的传统教学陷阱:把“结果”当“原因”
翻开任何一本控制理论或机器人学教材,卡尔曼滤波的引入几乎千篇一律:先给状态空间模型 x_{k} = F x_{k-1} + B u_{k-1} + w_{k-1},再给观测模型 z_k = H x_k + v_k,然后直接抛出五个更新方程。学生记住了预测步的 P_k^- = F P_{k-1} F^T + Q,记住了更新步的 K_k = P_k^- H^T (H P_k^- H^T + R)^{-1},甚至能默写出SSE最小化推导。但问题在于,这些公式是“解”,不是“问题”本身。就像告诉你“用牛顿第二定律F=ma可以算出加速度”,却没解释“为什么力与加速度成正比”——后者才是物理直觉的根基。
传统教学隐含了一个危险假设:学生默认接受“最优估计”就是“最小均方误差估计”,并进一步默认“最小均方误差”天然导向高斯假设和线性结构。这跳过了最关键的一步:最优性是相对于什么损失函数、在什么约束下定义的? 贝叶斯视角则直击本质:所谓“最优”,就是后验分布p(x|z)的众数(MAP估计)或均值(MMSE估计)。而p(x|z)的形状,完全由先验p(x)和似然p(z|x)共同决定。没有先验,就没有“我原本相信什么”;没有似然,就没有“新证据告诉我什么”。卡尔曼滤波的全部精妙,恰恰藏在这两个概率分布的博弈之中。
提示:当你看到K_k = P_k^- H^T (H P_k^- H^T + R)^{-1}时,别只把它当一个矩阵运算。试着把它拆成三部分:分子P_k^- H^T是“先验不确定性对观测的敏感度”,分母(H P_k^- H^T + R)是“总观测不确定性”。K的本质,是先验信息与观测信息的相对权重比率。而这个比率,完全由p(x)的协方差P_k^-和p(z|x)的噪声协方差R共同决定——这正是似然视角的核心。
2.2 似然p(z|x):传感器物理特性的概率翻译器
很多工程师把R矩阵简单理解为“传感器噪声方差”,这没错,但太单薄。R的真正角色,是对似然函数p(z|x)的完整刻画。我们以一个具体例子说明:假设你用一个激光测距仪测量机器人到墙的距离。理想情况下,z = x(真实距离),但实际中,由于光子散射、电子热噪声、镜头畸变,每次测量都有偏差。这个偏差v = z - x,其统计特性决定了p(z|x)的形态。
- 如果v服从均值为0、标准差为σ_v的高斯分布,则p(z|x) = N(z; Hx, R),其中R = σ_v²(标量情况)或R = E[v v^T](向量情况)。这是最常见的情形。
- 但如果激光在强日光下工作,偶尔会产生“野值”(outlier),此时v的分布就不再是纯高斯,而是高斯混合(Gaussian Mixture)或t分布。此时,若仍强行用高斯似然p(z|x) = N(z; Hx, R),R就必须调得很大——但这不是因为噪声真变大了,而是为了在概率上“覆盖”那些本不该出现的野值,人为拉平了似然曲线。结果就是滤波器变得迟钝,对真实突变响应滞后。
我在调试一款AGV的定位模块时就遇到过这个问题。激光数据在室内稳定,R设为0.01²米²很完美;但一到仓库门口阳光直射区,R必须提到0.1²米²才能避免轨迹跳变。后来改用Huber似然(一种鲁棒似然函数),R回归到0.01²,同时通过ρ函数抑制野值影响,效果立竿见影。这说明:R不是传感器固有属性的刻度尺,而是你对p(z|x)建模精度的诚实声明。你声明得越准确,滤波器的决策就越可靠。
2.3 先验p(x)与似然p(z|x)的动态博弈:滤波器的“信任天平”
贝叶斯更新的直观图景,是一个不断调节的天平。左盘放先验p(x)——代表你“此刻相信的状态及其不确定性”;右盘放似然p(z|x)——代表“新观测z对不同x值的支持强度”。后验p(x|z)就是天平最终平衡后的状态分布。
- 当先验P_k^-很小(即你对x_{k-1}非常确信),意味着左盘很重,天平不易被右盘拉动。此时K_k会很小,滤波器主要依赖预测,对新z“不太买账”。
- 当R很小(即你对本次z极度信任),右盘很重,K_k趋近于H^{-1}(若H可逆),滤波器几乎全信z,大幅修正状态。
- 当P_k^-和R都很大,天平两端都轻飘飘,K_k取中间值,滤波器采取折中策略。
这个博弈过程,在线性高斯假设下,被压缩成一套优雅的矩阵运算。但一旦脱离该假设(如非线性系统EKF/UKF),或先验/似然偏离高斯(如粒子滤波),这个天平的调节逻辑依然成立,只是计算方式不同。因此,掌握p(z|x)的建模,等于掌握了滤波器的“感官输入质量评估能力”;掌握p(x)的传播,等于掌握了滤波器的“内在信念演化规律”。两者缺一不可。
3. 从贝叶斯公式到卡尔曼增益:一次手把手的推导还原,看清每个符号的物理心跳
3.1 贝叶斯公式的起点:p(x|z) ∝ p(z|x) p(x)
我们从最朴素的贝叶斯定理出发:
其中p(z)是归一化常数,对x而言是常量,故可忽略,写作比例关系:
这就是一切的源头。我们的目标,是证明:当p(x)和p(z|x)均为高斯分布时,p(x|z)也是高斯分布,且其均值和协方差恰好对应卡尔曼滤波的更新公式。
设当前先验为:
即均值为\hat{x}^-,协方差为P^-的高斯分布。
设似然为:
即观测z在给定x下的条件分布,均值为Hx(线性观测),协方差为R(观测噪声)。
将两者代入比例式:
3.2 指数合并:完成“信念”与“证据”的数学联姻
将两个指数项相乘,等价于指数内相加。我们聚焦于指数部分(二次型),将其整理为关于x的标准高斯形式:-1/2 (x - \hat{x}^+)^T (P^+)^{-1} (x - \hat{x}^+)。
展开两项:
- 先验项:-1/2 [x^T (P^-)^{-1} x - 2 x^T (P^-)^{-1} \hat{x}^- + (\hat{x}^-)^T (P^-)^{-1} \hat{x}^-]
- 似然项:-1/2 [z^T R^{-1} z - 2 z^T R^{-1} H x + x^T H^T R^{-1} H x]
注意:z^T R^{-1} z 和 (\hat{x}^-)^T (P^-)^{-1} \hat{x}^- 是与x无关的常数,可忽略。合并x^T...x项、x^T...项:
-
二次项系数(即(P^+)^{-1}):
TEXT(P^+)^{-1} = (P^-)^{-1} + H^T R^{-1} H -
一次项系数(决定均值\hat{x}^+):
TEXT-2 x^T [ (P^-)^{-1} \hat{x}^- - H^T R^{-1} z ]对比标准高斯形式 -2 x^T (P^+)^{-1} \hat{x}^+,可得:
TEXT(P^+)^{-1} \hat{x}^+ = (P^-)^{-1} \hat{x}^- + H^T R^{-1} z
3.3 解出后验均值:卡尔曼增益K的诞生现场
现在,我们有:
目标是解出\hat{x}^+。将(1)代入(2)左边,但更聪明的做法是:将(2)两边左乘P^+,利用(1)求逆。
由(1)式,两边左乘P^-,右乘P^+,得:
移项:
但这不够直接。标准解法是:由(2)式,
将P^+ = [ (P^-)^{-1} + H^T R^{-1} H ]^{-1}代入。这里的关键技巧是使用矩阵恒等式(Woodbury Identity):
令A = (P^-)^{-1}, U = H^T, C = R^{-1}, V = H,则:
这个形式已经包含K的雏形。现在看\hat{x}^+:
第一项是“先验均值的缩放”,第二项是“观测修正项”。将P^+ H^T R^{-1}定义为K:
代入P^+的Woodbury表达式:
注意到(R + H P^- H^T)^{-1} H P^- H^T R^{-1} = [I - (R + H P^- H^T)^{-1} R],经代数运算(此处省略繁琐步骤),最终可得:
这正是教科书中的卡尔曼增益公式。而\hat{x}^+ = \hat{x}^- + K (z - H \hat{x}^-),其中(z - H \hat{x}^-)是新息(Innovation),即观测与预测的残差,代表z提供的“新信息量”。
注意:K的推导过程揭示了一个深刻事实——它不是被“设计”出来的,而是从高斯先验与高斯似然的贝叶斯融合中自然涌现的数学必然。任何试图“调K值”而不调整P^-或R的行为,都是在违背概率逻辑。P^-反映你对模型的信心,R反映你对传感器的信心,K只是它们的客观产物。
3.4 后验协方差P^+:不确定性收缩的定量描述
由(1)式,P^+ = [ (P^-)^{-1} + H^T R^{-1} H ]^{-1}。这表明:后验不确定性P^+,总是小于或等于先验不确定性P^-(矩阵意义下的半正定序)。因为H^T R^{-1} H是半正定矩阵,其加入使逆矩阵变小。
定量看,P^+的收缩程度取决于H和R:
- 若H=0(观测不提供状态信息),则P^+ = P^-,不确定性不降。
- 若R→0(观测无限精确),则H^T R^{-1} H → ∞,P^+ → 0,不确定性坍缩至零。
- 若H很大(观测对状态敏感),同样加速收缩。
这再次印证:滤波器的“学习能力”,由观测模型H的灵敏度和观测噪声R的纯净度共同决定。一个设计不良的H(如用一个对yaw角不敏感的传感器去估计航向),再小的R也无法提升P^+的收缩效率。
4. 实操中的似然建模:从实验室理想到产线真实,我的三次踩坑实录
4.1 坑一:把数据手册的“典型值”当R,导致滤波器在低温下集体失智
项目背景:为某款户外巡检机器人开发IMU+GNSS融合定位。IMU芯片手册标注陀螺仪噪声密度为0.005 °/s/√Hz,加速度计为50 μg/√Hz。按采样率100Hz,我计算R_gyro = (0.005 * √100)^2 = 0.0025 (°/s)^2,R_acc = (50e-6 * 9.8 * √100)^2 ≈ 2.4e-5 m²/s⁴。
问题:夏季测试完美,冬季-15℃环境下,机器人频繁报告“姿态发散”,协方差P疯狂增长,K接近零,几乎不采纳IMU数据。
排查:我采集了-15℃下的静态IMU数据,画出角速度序列。发现噪声并非白噪声,而是叠加了明显的低频漂移(drift),其标准差达0.02 °/s,是常温的4倍。手册的“典型值”是在25℃下测得的,未涵盖温度影响。
解决方案:引入温度补偿模型。将R分解为两部分:R = R_white + R_drift(T)。R_white用手册值,R_drift(T)用查表法——根据实测温度T,从预存的漂移方差表中插值得到。例如,-15℃时R_drift = 0.0004 (°/s)^2,总R_gyro = 0.0025 + 0.0004 = 0.0029。重新标定后,冬季稳定性提升80%。
教训:R不是固定参数,而是传感器工作点的函数。温度、湿度、供电电压、机械应力,都可能改变p(z|x)的形态。务必在目标工况下实测噪声特性,而非依赖手册。
4.2 坑二:忽略观测延迟,用实时z计算K,导致滤波器“追着尾巴跑”
项目背景:某工业振动监测系统,加速度计通过RS485总线上传数据,存在约12ms固定延迟。我将滤波器运行在PC端,每10ms处理一帧,直接用接收到的z_k更新状态x_k。
问题:系统响应迟滞,对冲击事件(如轴承故障瞬态)的检测延迟达30ms以上,远超12ms硬件延迟。
排查:绘制z_k与真实物理事件的时间戳,发现z_k对应的是x_{k-1}时刻的状态,而非x_k。因为z_k是在x_{k-1}发生后、经过12ms传输才到达,而滤波器误以为它是x_k的观测。
解决方案:实施观测延迟补偿。在滤波器中维护一个延迟缓冲区,存储最近N帧的预测状态\hat{x}{k-1}^-和P{k-1}^-。当z_k到达时,找到它对应的“应观测时刻”k_d = k - delay_step(delay_step=1),然后用\hat{x}{k_d}^-和P{k_d}^-作为先验,z_k作为观测,执行一次“历史更新”。这本质上是将滤波器退回到k_d时刻进行修正。
关键点:此时的似然仍是p(z_k | x_{k_d}),但先验是x_{k_d}的预测,而非x_k的预测。R不变,但H需确认是否随延迟变化(通常不变)。实测后,冲击检测延迟降至15ms,符合预期。
教训:p(z|x)的条件变量x,必须与z的实际物理因果时刻严格对齐。任何通信、计算、同步延迟,都会扭曲这个条件关系,必须在建模时显式处理。
4.3 坑三:对多源异构观测强行统一R,引发“平均主义”灾难
项目背景:一款农业无人机,融合RTK-GNSS(水平精度2cm)、气压计(高度精度0.5m)、超声波(离地高度精度5cm)三种高度源。我将三者观测拼成向量z = [z_gps; z_baro; z_us],设H = [1; 1; 1],R为对角阵diag([0.02², 0.5², 0.05²])。
问题:飞行中高度估计剧烈震荡,尤其在气流扰动时,超声波数据因噪声大被过度抑制,而气压计的慢变趋势又污染了RTK的快速响应。
排查:问题出在“强行统一观测模型”。RTK和超声波是绝对高度观测,z_gps ≈ h_true;气压计是相对气压观测,z_baro = f(h_true) + bias(t),其中bias(t)是缓慢漂移的零点偏移。H=[1;1;1]错误地假设三者都线性映射到同一h_true,忽略了气压计的非线性和时变偏移。
解决方案:重构似然模型。
- 对RTK和超声波:p(z_gps|h) = N(z_gps; h, R_gps), p(z_us|h) = N(z_us; h, R_us)
- 对气压计:引入隐变量b(零点偏移),p(z_baro|h,b) = N(z_baro; α·h + b, R_baro),其中α是气压-高度换算系数。b作为扩展状态的一部分,用随机游走模型建模:b_k = b_{k-1} + w_b。
最终,观测向量变为z = [z_gps; z_us; z_baro],状态向量为x = [h; b],H = [[1,0]; [1,0]; [α,1]],R = diag([R_gps, R_us, R_baro])。滤波器立刻稳定,高度估计标准差从12cm降至3.5cm。
教训:似然p(z|x)的结构,必须忠实反映每个传感器的物理生成机制。生硬拼接不同物理量的观测,等于用错误的似然函数欺骗滤波器,后果比不用该传感器更糟。
5. 常见问题与排查速查表:当滤波器“不听话”时,先问这五个似然相关问题
| 问题现象 | 可能原因(似然视角) | 排查方法 | 我的实操技巧 |
|---|---|---|---|
| K值持续偏小,状态几乎不更新 | 1. R设置过大,p(z | x)过于平坦,z对x的区分度低 2. H矩阵为零或极小,观测对状态不敏感 3. z与\hat{x}^-的残差(z - H\hat{x}^-)长期为零,新息无信息 |
1. 检查R的量纲和数值,对比传感器实测噪声STD 2. 验证H是否正确映射状态到观测空间(如用单位状态向量测试H输出) 3. 打印新息序列,看是否长期≈0 |
| K值异常大,状态随z剧烈跳变 | 1. R设置过小,p(z | x)过于尖锐,滤波器过度信任z 2. z存在野值(outlier),但R未建模其鲁棒性 3. H矩阵过大,放大观测噪声影响 |
1. 检查R是否低于传感器实测噪声下限 2. 绘制z序列和残差序列,识别野值点 3. 检查H的数值范围,确认无量纲错误(如用mm单位H配m单位z) |
| 残差(新息)不白,存在明显周期性或趋势 | 1. 似然模型p(z | x)缺失关键物理效应(如前述气压计偏移) 2. 观测噪声v非白噪声,存在有色噪声(如1/f噪声) 3. 状态模型F或B不准确,导致\hat{x}^-系统性偏差 |
1. 分析残差频谱,找主导频率,反推缺失的物理环节 2. 计算残差自相关函数,看是否拖尾 3. 将残差与控制输入u或已知扰动d做互相关 |
| P矩阵不收缩,或收缩后又快速膨胀 | 1. R过大,似然信息弱,无法有效降低不确定性 2. Q(过程噪声)过大,先验不确定性P^-增长过快,抵消了观测收益 3. H的列空间未覆盖所有状态维度,部分状态不可观 |
1. 检查R与P^-的量级比,理想情况下trace(R) ≈ trace(H P^- H^T) 2. 降低Q,观察P是否开始收缩 3. 计算可观测性矩阵O = [H; HF; HF²; ...],检查秩 |
我有个土办法:将R设为极小值(如1e-10),若P迅速坍缩至零,则证明系统可观;若P仍不降,必是H或F的问题。 |
| 多传感器融合时,某一源被完全忽略 | 1. 该源的R远大于其他源,p(z | x)贡献微乎其微 2. 该源的H与其他源不一致,导致其观测在联合似然中被“稀释” 3. 数据同步错误,z与x时间戳错位 |
1. 比较各源R的迹(trace),确保量级相当 2. 检查各H矩阵的行数和列索引,确认映射到同一状态子集 3. 用示波器或时间戳日志,验证z_k与x_k的物理对应性 |
提示:所有排查的终点,都是回到p(z|x)的建模是否忠于物理。滤波器从不撒谎,它只是诚实地执行你赋予它的概率信念。当结果不如意,不是公式错了,而是你对世界的概率描述(先验p(x)和似然p(z|x))需要修正。
6. 从线性到非线性:似然视角的延展价值——为什么理解p(z|x)是进阶的基石
线性卡尔曼滤波的优雅,建立在p(z|x) = N(z; Hx, R)这个强假设之上。但现实世界充满非线性:相机成像的透视投影z = f(x) = [f_x·X/Z, f_y·Y/Z]^T;雷达的距离-角度观测z = [√(X²+Y²), atan2(Y,X)]^T;甚至简单的温度传感器,其输出z与真实温度x的关系也常是非线性的z = a·x² + b·x + c + v。
此时,p(z|x) = N(z; h(x), R)依然成立,但h(x)是非线性函数。贝叶斯更新p(x|z) ∝ p(z|x) p(x)不再有解析解,因为高斯先验p(x)经过非线性h(x)变换后,p(z|x)的积分无法闭合。
这就催生了EKF(扩展卡尔曼滤波)和UKF(无迹卡尔曼滤波):
- EKF:在当前估计\hat{x}^-处对h(x)做一阶泰勒展开,h(x) ≈ h(\hat{x}^-) + H_k (x - \hat{x}^-),其中H_k = ∂h/∂x |_{x=\hat{x}^-}。于是,p(z|x)被局部线性化为N(z; h(\hat{x}^-) + H_k (x - \hat{x}^-), R),再套用线性卡尔曼公式。EKF的本质,是在\hat{x}^-处,用线性似然p(z|x) ≈ N(z; H_k x + c, R)去近似真实的非线性似然。
- UKF:不近似h(x),而是近似p(x)。用一组确定性采样点(Sigma点)捕获p(x)的均值和协方差,将这些点通过真实h(x)传播,再用传播后的点重构p(z)和p(x|z)。UKF的本质,是放弃对p(z|x)的解析建模,转而用数值方法直接模拟“先验p(x)经过非线性h(x)后,生成观测z的概率分布”。
两者的优劣,直接源于对p(z|x)处理方式的不同:
- EKF计算快,但H_k的精度决定成败。若h(x)在\hat{x}^-处曲率大(如z=1/x在x≈0附近),一阶近似失效,K计算错误,滤波器发散。
- UKF更鲁棒,因为它不依赖h(x)的可导性,也不怕强非线性,但计算量大,Sigma点数量随状态维数指数增长。
我在做AR眼镜SLAM时,曾用EKF处理相机观测,因特征点深度x很小导致h(x)=f/x的导数爆炸,跟踪频繁丢失;换成UKF后,稳定性大幅提升,代价是CPU占用增加15%。这印证了:对p(z|x)的建模精度,是滤波性能的天花板。线性化是妥协,数值模拟是逼近,而理解其本质,才能在妥协与成本间做出明智选择。
更进一步,当传感器噪声v的分布明显偏离高斯(如激光雷达在边缘检测时的重尾噪声),或存在多个可能的生成机制(如视觉观测可能来自正确匹配,也可能来自误匹配),p(z|x)就需要更复杂的模型:混合高斯(GMM)、t分布、甚至基于深度学习的似然网络。这些前沿方向,其核心思想一以贯之:让p(z|x)尽可能贴近传感器在真实世界中的数据生成过程。 你对p(z|x)的理解越深,就越能驾驭从经典滤波到现代概率机器学习的整条技术脉络。
我个人在实际使用中发现,花三天时间彻底搞懂p(z|x)的物理含义,比调两周参数带来的收益更大。因为参数是术,而似然是道——掌握了道,术自然水到渠成。
相关推荐
基于Python+Open CV的手势识别算法设计
伴随着人工智能时代的到来,人机交互的领域也逐渐成为研究的一大方向;其中,手势识别是人机交互领域的一项关键技术,自此手势识别也迎来了一波高潮,近几年无论是在消费领域、电子领域、数码领域、家电领域甚至汽车领域上,都能或多或少的见到手势识别的身影。 手势识别在设计智能高效的人机界面方面具有至关重要的作用, 目前手势识别已应用到手语识别、智能监控、到虚拟现实等各个领域,手势识别的原理都是利用各种传感器(例如红外、摄像头等)对手部的形态进行捕捉并进行建模,形成一个模型信息的序列帧,而后将这些信息序列转换为机器能够识别的相对应指令(例如打开、切换菜单、移动等)来完成控制。 采用Python的集成开发环境Pycharm进行本次课程设计,在Pycharm中进行需要库(模块)的下载,调取电脑摄像头,按帧读取摄像头采集到的头像,形态学处理,图像旋转(由于摄像头采集到的图像是镜像,需要用cv2.flip将摄像头采集到的图像进行处理),选取图片中固定位置作为手势输入,用红线画出手势识别框,基于hsv的肤色检测,进行高斯滤波,找出轮廓,求出图像中手势的凹凸点,手指间角度求取。
ROS-CV-ImageConverter:将ROS图像转换为OpenCV(cv :: Mat)类型的图像
ROS-CV图像转换器 依存关系 cv_bridge(ROS软件包)
计算机视觉图像处理-CV2与图像插值算法
用最近邻插值与双线性插值原理完成图像缩放 最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输。缺点:使用最近邻插值算法处理图像放大时,在图象中可能出现明显的块状效应 双线性插值,在两个方向上做三次线性插值。使用双线性插值算法处理图像放大时,在图象中可能出现马赛克 代码 import cv2 img = cv2.imread(’./xiabang.jpg’, cv2.IMREAD_UNCHANGED) #缩放比例 scale_percent = 0.3 width = int(img.shape[1] * scale_percent) height = int
基于水平集CV模型的图像分割(Matlab代码)
基于水平集CV模型的图像分割(Matlab代码),全套代码
导向滤波(guide_filter)的python实现
导向滤波(guide_filter)的python实现,可以结合暗通道;理论实现比较好的图像去噪效果。

