腊月里,小林在爷爷的旧抽屉里翻出一盘 VHS 录像带。插进播放机,屏幕上的画面让他又惊喜又难受——那是奶奶六十大寿的生日宴,可画面布满密密麻麻的雪花点,像隔着毛玻璃看世界;镜头还抖得厉害,人物忽左忽右,像在颠簸的公交车上拍出来的。小林想:这盘带子是全家最珍贵的记忆,有没有办法让画面“干净”下来、“站稳”?这正是视频 AI 中两个密切相关的基本功——视频去噪与视频稳定化要解决的问题。去噪,就是把雪花点、颗粒这些“随机杂讯”从画面中抹掉;稳定化,则是把拍摄时手抖造成的画面晃动“扶正”。本文会从噪声的本质讲起,沿着空间去噪、时域去噪、稳定化原理、运动估计这条主线,再聊到工程落地与调优,帮你从零建立起完整的知识框架。
掌握视频去噪与稳定化,是进入视频 AI 编辑领域的必修课。无论做短视频增强、老片修复还是影视后期,这两项技术都是最常用的基础能力,能直接提升产品画质与用户体验。
可视化演示
动态演示视频去噪与稳定化处理的核心机制,通过采集/分析/决策/反馈四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
视频去噪与稳定化处理:视频噪声 视频噪声模型与去噪原理 时域去噪与空域去噪方法 核心机制可视化 视频去噪与稳定化处理整体架构与关键组件
噪声本质认知
小林把录像带转录成数字文件,放慢逐帧查看:画面里的“雪花”一直在跳动,颜色忽明忽暗,像无数只小虫子在屏幕上游走。他请教做影视修复的师兄,师兄说:这些不是录像带“脏了”,而是当年摄像机在室内灯光不足时,传感器为了强行出图,不得不“猜”出很多像素值——猜得不准,就成了噪点。
在 AI 看来,噪点不是“脏东西”,而是一种可以用数学描述的随机误差。假设真实场景是一幅干净的画面 S,摄像机记录下来的画面是 I,那么二者的关系可以写成下面这个式子。
这个模型叫“加性噪声模型”,是视频去噪最常用的理论基础。实际噪声还有更复杂的形态:暗光下传感器的热噪声近似高斯分布,像均匀撒落的沙粒;强压缩产生的块效应像一块块马赛克污渍;偶尔出现的椒盐噪声则像不小心洒上去的黑白芝麻。不同的噪声形态,决定了后面要选用不同的“滤网”来清理。
把小林的录像带放回这个模型:奶奶的笑脸是 S,游走的“小虫子”是 N。AI 要把 S 从 I 里“捞”出来。接下来要讲的空间去噪和时域去噪,就是两种不同的“捞法”——一个只盯单帧照片,一个会对比前后多帧。
- 观测像素 I摄像机实际记录下来的画面值,相当于“隔着毛玻璃看到的颜色”
- 真实信号 S场景原本的亮度与颜色,是理想状态下应该拍到的画面
- 噪声项 N传感器在暗光下的随机猜测误差,像小虫子一样叠加在真值上
- 坐标与时刻x、y 表示像素在画面中的位置,t 表示这是第几帧
空间去噪算法
小林先试了最朴素的办法:把每个像素的颜色,和它周围邻居的平均值对齐。这就像擦毛玻璃——只擦局部一小块,用周围区域的干净颜色把模糊处“蹭匀”。这就是图像处理里的“均值滤波”。
但直接平均有个毛病:远近邻居权重一样,容易把画面擦糊。更聪明的做法是让权重随距离“衰减”——紧挨着的像素影响大,远处的像素影响小。这个衰减规律,正好可以用钟形的高斯函数来描述。
高斯滤波是空间去噪的基石。再往前走一步,“双边滤波”在空间距离之外还考察颜色差异:如果邻居的颜色和中心像素差得太远,说明它可能属于边缘另一侧,就只给很低的权重——这样既能去噪,又能保住人物轮廓。更激进的“非局部均值”(NLM)甚至会在整幅图里搜索相似的小窗格来做加权平均,相当于擦玻璃时,从房间另一面找了块同样花纹的布来对照印证。
小林把高斯滤波套到录像上,雪花确实淡了不少,可奶奶的脸也被“柔和”得有点糊。他明白了:空间去噪是单帧单擦玻璃,力量用大了会伤细节。要想既干净又不糊,还得让前后多帧画面一起帮忙——这就是下一节的时域去噪。
- 归一化系数把所有权重加起来正好等于 1,保证画面整体亮度不改变
- 指数衰减项距离中心越远,权重呈指数级下降,远处像素的影响力迅速减弱
- 标准差 σ控制“邻居范围”的旋钮——σ 越大,参与平均的范围越广,画面越柔和
时域去噪算法
师兄给小林做了个小实验:用三脚架对着同一场景连拍 100 张照片,然后把它们叠加平均。奇怪的事发生了——每张照片上随机出现的噪点,平均之后互相抵消了大半。原因很简单:噪点是“随机”出现的,这张这里亮、那张那里暗,平均后都被拉回中间;而奶奶的笑脸是真实存在的,每张都长一样,平均后纹丝不动。这就是时域去噪的核心——利用帧间一致性。
视频本质上是高速连拍的照片序列,相邻帧的场景高度相似。于是 AI 可以一边播放一边累计记忆:当前帧到了,就拿出来和前面几帧攒下的“平均记忆”做加权融合。但视频和连拍照片有个关键差别——画面里的物体会动。如果直接把上一帧拿来叠加,人脸一移动就会留下“鬼影”。所以正规做法是先做运动补偿:估计物体在两帧之间移动了多少,把错位对齐后再融合。
这个式子叫“时域递归滤波”,是视频降噪最常用的基础结构。α 越接近 1,当前帧保留越多,响应快但降噪弱;α 越小,历史积累越厚,噪声压得越平,但运动物体容易拖尾。工业级产品往往根据运动幅度自动调节 α——画面静止时大胆降噪,剧烈运动时保守一些。
小林把时域递归滤波叠加上去,画面明显安静了,雪花几乎消失,奶奶的笑容依然清晰。他长舒一口气:空间去噪是“单兵作战”,时域去噪是“集团军协同”,两者配合,才真正把老录像从沙尘暴里救了出来。
- 当前帧画面 I_t刚采集到的第 t 帧原始观测,包含最新的真实信息与噪声
- 历史滤波结果 Î_{t-1}已经与更早的多帧融合过的干净画面,相当于“平均记忆”
- 融合系数 α取值在 0 到 1 之间,决定当前帧与历史记忆的信任比例
- 加权求和两帧按比例混合,历史占比越大,随机噪点被抵消得越彻底
稳定化原理
噪点清完了,还有第二座山要翻:画面抖。小林盯着屏幕,奶奶敬酒时,整个画面像坐海盗船一样忽左忽右、上下颠簸。他想:要是能把每一帧都“扶正”到同一个视角该多好。
稳定化的本质,是把拍摄时相机自己的“乱运动”从画面中剥离。想象你在颠簸的小船上用手机记录航线:每记一个定位点,船一晃笔尖就歪一下,整条航线变成锯齿。稳定化要做的,就是把这些“歪掉”的定位点,拉回到一条平滑的航线上。
实际算法分三步:第一步,估计每一帧相机的运动轨迹 C_t,也就是这一帧“取景中心”相对参考位置的偏移;第二步,对整条轨迹做平滑,把每个点替换成它邻近 K 帧的加权平均,得到理想平滑轨迹 C'_t;第三步,计算原始轨迹与平滑轨迹的差值,对每一帧做反向平移和旋转补偿。一句话:先量出乱走的航线,再把航线抻直,最后把所有画面摆到抻直后的航线上。
小林看到处理后的画面:奶奶敬酒的镜头稳稳当当,像把海盗船换成了平静的游船。他也记下了一个隐忧:稳定化不能凭空造出没拍到的内容,被挤走的边缘画面要靠裁切来补偿——这是后面陷阱篇要讲的代价。
- 原始轨迹点 C_t第 t 帧取景中心的实际位置,相当于航行笔记里的一个定位点
- 邻域半宽 K平滑时参考前后各 K 帧的定位点,K 决定“看多远”
- 平滑权重 w_k给邻域内每个定位点分配权重,通常中间帧权重大、两边逐渐变小
- 加权滑动平均用邻域的加权平均值替代原始点,锯齿毛刺被拉平,轨迹变顺滑
特征与运动估计
讲了这么多稳定化和运动补偿,最核心的问题来了:AI 是怎么知道画面“动了多少”的?小林想了想:就像坐在行驶的火车上看窗外,想判断自己移动了多远,最靠谱的办法是盯住远处一座塔,记录它在视野里的位置变化。视频 AI 也一样,它要先“盯住”画面里那些稳定可靠、容易辨认的小标记——特征点。
常见的特征点有角点、边缘、纹理丰富的小块。找到特征点后,AI 会在下一帧里追踪这些点跑到哪里去了——这个追踪结果叫“光流”,也就是画面中每个点的运动速度。光流的数学基础是一个很自然的假设:物体表面某一点在运动前后,它的亮度保持不变。
这个式子叫“光流约束方程”。一个像素有两个未知数 u 和 v,一条方程解不出来,所以经典算法(如 Lucas-Kanade)会把邻域像素的方程合在一起联立求解,相当于用一整片区域的运动来“投票”决定局部运动。有了帧间的运动场,运动补偿、相机轨迹估计就都有了依据。
回到小林的录像带:AI 锁定了蛋糕上的烛光、墙上的相框这些特征点,追踪它们在每一帧的位置,从而算出摄影机的抖动轨迹。这就像在颠簸的船上,船长最终靠着岸上灯塔的位置,才算出了船到底偏了多少。
- 亮度不变假设同一个点在两帧之间保持相同亮度,这是光流成立的前提
- 空间梯度 I_x、I_y画面颜色在水平、垂直方向的变化快慢,相当于“纹理的陡峭程度”
- 光流速度 u、v待求的像素在水平、垂直方向的运动速度
- 时间梯度 I_t同一坐标位置的亮度随时间的变化率
- 联立求解必要性一条方程有两个未知数,必须结合邻域像素的方程一起求解
工程实现要点
算法在实验室跑通了,小林却犯了难:师兄给的代码处理一分钟录像要十分钟,这哪行?把算法变成产品,要过一关又一关的工程坎。打个比方:实验室里做菜可以精雕细琢,开餐厅就要考虑出餐速度、食材周转和后厨人手——工程实现就是把“能跑的算法”变成“能上线的系统”。
先说实时性。一个 1080p 视频每帧约有 200 万个像素,每帧都要做滤波、融合和光流估计。粗略估算:对每秒 30 帧、分辨率 W×H 的视频做 K×K 空间滤波,总计算量是
为了压住成本,工程上常用三板斧:降分辨率——先用低分辨率估计运动,回到全分辨率做画质修复;分块并行——把画面切成小块交给 GPU 多线程同时算;数据流水线——一边读帧、一边计算、一边写输出,别让 CPU 空闲等待。部署到手机上还要权衡功耗与内存带宽,必要时借用硬件编解码器自带的滤波单元做预处理。
小林最终把处理管线拆成两段:先用 1/4 分辨率跑光流估计轨迹,再用全分辨率做修复,速度从十分钟降到了十几秒。他感叹:工程实现就像给算法当“管家”,既要保证它吃得好(精度),更要保证它干得快(效率)。
- 帧数 N视频总共有多少帧,直接放大总工作量
- 分辨率 W×H每一帧的像素总数,决定单帧的基准工作量
- 滤波核边长 KK×K 窗口里每个邻居都要参与加权运算,是平方级增长项
- 总计算量 C四者相乘,直观展示各因素对系统开销的放大效应
性能调优策略
速度达标了,小林又遇到新问题:到底怎么客观评价处理效果?光靠肉眼不够——同一段画面,有人说清楚有人说糊。他需要一把“尺子”,能量化地告诉算法:你离理想画面还差多远。这把尺子就是 PSNR(峰值信噪比)。
PSNR 的思路很直白:把算法输出和一张“标准答案”(干净无噪的参考帧)逐像素对比,差异越大分数越低。分贝数和对数刻度类似声音的分贝,数值越高代表越接近标准答案。
除了 PSNR,还有 SSIM 这类更贴近人眼感受的指标——它同时比较亮度、对比度和结构信息。调优的一般流程是:先用 PSNR/SSIM 做自动化批量扫参,锁定大方向;再找典型场景(暗光、快速运动、复杂纹理)人工审片。常见调参对象包括高斯核 σ、时域融合系数 α、光流平滑窗口大小。最后别忘了做“消融实验”:把每个模块单独关掉对比效果,才能知道哪一步贡献最大、哪一步在帮倒忙。
小林用 PSNR 一测,发现自己之前 α 调得太大,噪点没了但人脸细节也被抹平;把 α 从 0.9 调回 0.6,PSNR 反而涨了 2 分贝。原来“尺子”不会说谎:一味追求安静,代价是丢失真实。调优就像调口味,太淡没效果,太咸毁食材,恰到好处要用数据说话。
- 最大信号值 MAX8 位图像的最大像素值取 255,代表信号的理论峰值
- 均方误差 MSE输出帧与参考帧逐像素差值的平方平均,是误差的“总账本”
- 对数压缩10 倍 log₁₀ 把大动态范围的比值压缩成易读的分贝数
- 完整公式MSE 越小,PSNR 越大,说明输出越接近理想画面
常见陷阱与对策
项目上线前,师兄给小林列了一份“翻车清单”:很多新手把去噪和稳定化想得很简单,结果用力过猛,把老录像修成了“塑料脸”。小林问:修复文物怕用力过猛刷坏原画,处理视频是不是一个道理?师兄点头:正是。
第一个陷阱是过平滑。所有去噪都在牺牲细节,均值滤波的窗口越大,噪声压得越狠,画面的纹理和边缘也被抹得越平。一个简单模型能说明这个矛盾:把 K×K 窗口内的像素平均后,噪声强度大约降为原来的 1/K。
对策是“保边”优先:改用双边滤波、引导滤波,让算法在边缘处自动降低邻居权重;或者把画面分成平坦区和纹理区,分区设置降噪强度。第二个陷阱是卷帘快门伪影:CMOS 传感器逐行曝光,剧烈抖动时画面会像果冻一样扭曲,稳定化时不能只做平移,还要做局部网格变形矫正。第三个陷阱是边界问题:稳定化需要裁掉画面边缘来掩盖补偿产生的黑边,裁少了露黑边,裁多了损失视野——工程上常用内容感知填充来补边,或根据轨迹平滑幅度自适应决定裁切比例。
小林把师兄的清单贴在了工位上:过平滑要保边、卷帘快门要矫正、边界要裁切补偿。他意识到,每一项对策都是在“不伤画质”与“去噪防抖”之间找平衡。修复老录像如此,做任何视频 AI 产品也是如此——真正的功夫,是在约束下优雅地取舍。
- 输入噪声 σ_in滤波前原始帧的噪声强度
- 窗口边长 K滤波核的边长,K 越大参与平均的像素越多
- 输出噪声 σ_out滤波后残余的噪声强度
- 同源代价细节同样被 K 平均掉,提醒调参时必须在降噪与保真之间权衡
AI 应用场景
家庭老录像数字化修复
阶段:模型推理 / 后处理
解决的问题:传统修复靠人工逐帧处理,一分钟录像要修几个小时,成本极高;AI 自动完成去噪与稳定化,把修复时间压缩到分钟级,且无需专业美术师逐帧操作
具体案例:某影像工作室承接“翻新奶奶的结婚录像”业务:先做时域递归降噪清除雪花,再用特征点跟踪估计相机抖动并平滑补偿,最后补上稳定化裁切损失的黑边,成片 PSNR 提升 8-10 dB,用户几乎看不出这是三十年前的录像
短视频 App 上传链路画质增强
阶段:端上实时推理 / 流式处理
解决的问题:用户在暗光、运动场景下拍摄的视频噪声大、画面抖,直接压缩上传画质更差,容易导致用户放弃发布
具体案例:某短视频 App 在客户端上传管线中嵌入轻量级去抖模块:先用低分辨率光流估计全局运动,再做时域加权降噪,最后补偿抖动并裁边,全程控制在 30ms 内,用户无感完成画质提升
安防监控夜间取证
阶段:离线批处理
解决的问题:夜间监控普遍暗光高噪声,摄像头受风或振动影响画面抖动,导致人脸、车牌无法辨认
具体案例:某公安合作项目对夜间盗窃案的监控录像做取证增强:用空间滤波压制热噪声、时域滤波利用多帧冗余重建细节,再针对卷帘快门伪影做局部矫正,最终成功放大辨认出嫌疑人车辆号牌
Python 演示
"""视频去噪与稳定化演示: 合成数据 -> 空间去噪 -> 时域去噪 -> 抖动估计与补偿"""import numpy as np def make_synthetic_video(h=60, w=80, n=30, seed=42): """生成合成测试视频: 静止亮块 + 相机抖动 + 高斯噪声""" rng = np.random.default_rng(seed) clean, noisy = [], [] for t in range(n): frame = np.full((h, w), 0.1, dtype=np.float32) frame[h//2-8:h//2+8, w//2-8:w//2+8] = 0.8 clean.append(frame) if t == 0: dx, dy = 0, 0 else: dx = int(rng.integers(-3, 4)) dy = int(rng.integers(-3, 4)) shaken = np.roll(np.roll(frame, dx, axis=1), dy, axis=0) noisy.append(np.clip(shaken + rng.normal(0, 0.15, (h, w)), 0, 1)) return np.stack(clean), np.stack(noisy) def spatial_denoise(video, k=3): """空间去噪: 每帧与 kxk 均值核做卷积""" from numpy.lib.stride_tricks import sliding_window_view out = np.empty_like(video) pad = k // 2 for i, f in enumerate(video): p = np.pad(f, pad, mode='edge') out[i] = sliding_window_view(p, (k, k)).mean(axis=(2, 3)) return out def temporal_denoise(video, alpha=0.6): """时域去噪: 当前帧与上一帧滤波结果递归融合""" out = np.empty_like(video) out[0] = video[0] for i in range(1, len(video)): out[i] = alpha * video[i] + (1 - alpha) * out[i - 1] return out def estimate_shift(a, b, r=4): """在 [-r,r] 内搜索平移量: 找到让 b 对齐 a 的偏移 (dx, dy)""" best, best_d = -1.0, (0, 0) for dy in range(-r, r + 1): for dx in range(-r, r + 1): shifted = np.roll(np.roll(b, dy, axis=0), dx, axis=1) score = float(np.mean(a * shifted)) if score > best: best, best_d = score, (dx, dy) return best_d def stabilize(video): """稳定化: 以第一帧为基准, 估计并反向补偿每帧的抖动""" out = np.empty_like(video) ref = video[0] for i in range(len(video)): dx, dy = estimate_shift(ref, video[i]) out[i] = np.roll(np.roll(video[i], dy, axis=0), dx, axis=1) return out def psnr(a, b): """峰值信噪比: 衡量结果与理想画面之间的接近程度""" mse = float(np.mean((a - b) ** 2)) return 10 * np.log10(1.0 / (mse + 1e-12)) if __name__ == "__main__": clean, noisy = make_synthetic_video() denoised = spatial_denoise(noisy, k=3) denoised = temporal_denoise(denoised, alpha=0.6) stabilized = stabilize(denoised) print("原始噪声视频 PSNR: %.2f dB" % psnr(noisy, clean)) print("空间+时域去噪后: %.2f dB" % psnr(denoised, clean)) print("去噪+稳定化后: %.2f dB" % psnr(stabilized, clean))
frame[h//2-8:h//2+8, w//2-8:w//2+8] = 0.8在深色背景中央放一个亮块,作为可追踪的“真实场景”shaken = np.roll(np.roll(frame, dx, axis=1), dy, axis=0)用整帧像素平移模拟相机抖动noisy.append(np.clip(shaken + rng.normal(0, 0.15, (h, w)), 0, 1))叠加高斯噪声并裁剪到合法范围out[i] = sliding_window_view(p, (k, k)).mean(axis=(2, 3))用滑动窗口视图做均值卷积,实现空间去噪out[i] = alpha * video[i] + (1 - alpha) * out[i - 1]时域递归滤波:当前帧与历史记忆加权融合shifted = np.roll(np.roll(b, dy, axis=0), dx, axis=1)在候选偏移下把 b 平移后与参考帧比对score = float(np.mean(a * shifted))用逐像素乘积平均衡量两帧的对齐程度out[i] = np.roll(np.roll(video[i], dy, axis=0), dx, axis=1)找到偏移后反向补偿,把抖动扶正return 10 * np.log10(1.0 / (mse + 1e-12))计算 PSNR,用数值量化每一步的改善幅度
常见误区
误区“我把高斯滤波的 σ 调到很大,画面确实'干净'了,雪花全没了,但人脸像打了马赛克一样糊。我觉得去噪嘛,糊一点是正常的。”
正解去噪的目标是“去除噪声、保留细节”,而不是把画面抹平。σ 过大会把边缘和纹理这些真实信息一并平均掉,这就是过平滑。正确做法是用保边滤波(双边滤波、引导滤波)或分区处理,在平坦区域大力降噪、在边缘处刹车。
为何常见:均值和高斯滤波给人的直观效果就是“变模糊”,初学者容易把“模糊程度”和“降噪强度”画上等号,忽略了去噪同时还要保真。
误区“既然噪点是随机的,那我直接把连续 5 帧平均,噪点不就抵消了吗?我试了一下,结果人脸边缘出现了一圈重影,像鬼影一样。”
正解直接平均的前提是画面“完全不动”。真实视频里物体在运动、镜头在移动,直接平均会把不同位置的同一个物体叠成重影。必须先做运动估计与补偿,把相邻帧对齐后再融合,这才是真正的时域去噪。
为何常见:静态场景叠加平均的经验容易迁移误导——人们往往忽略了视频里“东西会动”这个最基本的事实。
误区“我看有些 App 处理完视频会放大一点,把边缘裁掉。那我是不是只要把画面四周裁一圈,抖动的部分就被裁掉了?”
正解裁切只是稳定化流水线的最后一步,用来掩盖补偿后产生的黑边。真正的核心是三步:估计每帧相对参考帧的运动、对相机轨迹做平滑、用平滑前后的差值反向补偿画面。不做运动补偿直接裁边,物体照样抖,只是少了边框。
为何常见:从成品观察只看到了“画面变大被裁切”的表象,没看到背后隐藏的运动估计与轨迹平滑过程。
误区“我用 PSNR 调参,调到 38dB 了,结果拿给用户看,大家都说画面'塑料感'很重。PSNR 高难道不代表画质好吗?”
正解PSNR 是逐像素的数值差异统计,对“亮度偏差”敏感,但对“结构、纹理、边缘”这些主观感受不敏感。有时画面轻微平移几像素会让 PSNR 大跌,人眼却看不出区别;反之过度平滑让 PSNR 微涨,人眼却觉得糊。所以要结合 SSIM、主观评分等多种维度综合评估。
为何常见:数值指标直观、自动化、便于对比,容易让人产生“数值就是唯一真理”的依赖心理。
面试题
Q1. 描述视频噪声最常用的数学模型是?
- A.乘法噪声模型
- B.加性噪声模型← 正确答案
- C.卷积噪声模型
- D.非线性噪声模型
答案:B。视频去噪最常假设噪声直接叠加在真实信号上,即“观测 = 真实 + 噪声”,称为加性噪声模型。它简单有效,便于用减法还原真实画面。乘法、卷积、非线性模型虽然也存在,但在多数工程场景中并非首选。
Q2. 关于高斯滤波,下列说法正确的有?
- A.权重随距离增大而衰减← 正确答案
- B.σ 越大邻域范围越广← 正确答案
- C.能彻底消除椒盐噪声
- D.所有权重之和归一为 1← 正确答案
答案:ABD。高斯滤波的权重呈钟形曲线,随距离增加指数衰减(A 对);σ 控制范围,越大参与平均的邻居越多(B 对);权重归一化保证亮度不变(D 对)。高斯滤波对椒盐噪声这类“极端离群值”只能抹平而不能根除,且过度平滑会伤及边缘,故 C 错。
Q3. 时域递归滤波中 α 越大意味着?
- A.历史权重越大降噪越强
- B.当前帧权重越大响应越快← 正确答案
- C.运动补偿幅度变得越大
- D.视频帧率自动提升越高
答案:B。时域递归滤波公式为 Î_t = α·I_t + (1-α)·Î_{t-1},α 是当前帧的信任比例。α 越大,当前帧保留越多,运动响应快但降噪弱;α 越小,历史记忆占比大,降噪强但易拖尾。它和运动补偿、帧率没有直接关系。
Q4. 光流约束方程中包含的两个未知量是?
- A.一个像素运动方向
- B.两个方向的运动速度← 正确答案
- C.三个颜色通道的数值
- D.四个相邻像素坐标
答案:B。光流约束方程 I_x·u + I_y·v + I_t = 0 中,u 和 v 分别是像素在水平、垂直方向的运动速度,这正是要估计的两个未知量。一条方程两个未知数,需要结合邻域联立求解。
Q5. 视频稳定化处理的正确流程是?
- A.先裁切后平滑再估计
- B.先估计运动后平滑再补偿← 正确答案
- C.先补偿后裁切再估计
- D.先平滑再估计后裁切
答案:B。稳定化的三步是“估计每帧运动→对相机轨迹平滑→按差值反向补偿”,裁切只是补偿后消除黑边的收尾动作。顺序颠倒必然出错:不知道运动就谈不上平滑,没做补偿就裁边等于白裁。
Q6. 非局部均值滤波与高斯滤波的本质差异是?
- A.前者全图搜相似窗格后者只用邻域← 正确答案
- B.前者只用邻域后者全图搜相似窗格
- C.两者都只利用时间轴像素信息
- D.两者输出结果完全等价无差别
答案:A。高斯滤波只看空间邻域,权重由距离决定;非局部均值(NLM)则在整幅图中寻找与当前窗格相似的窗格来加权平均,能利用远处相似结构帮助降噪。二者都要面对“细节保留”与“过平滑”的权衡,但搜索范围的差异是本质区别。
Q7. 卷帘快门伪影的主要成因是?
- A.传感器逐行曝光导致画面扭曲← 正确答案
- B.镜头焦距过长导致画面模糊
- C.视频压缩率过高引起块效应
- D.时域滤波系数过大引起拖尾
答案:A。CMOS 传感器逐行曝光,拍摄剧烈抖动时,画面不同行曝光时刻不同,横向运动物体会被拉成斜线,如同果冻晃动。应对方法是用网格变形做局部矫正。焦距过长是模糊问题,压缩过高是块效应,滤波过大是拖尾,均非卷帘快门成因。
Q8. 下列属于保边空间去噪算法的有?
- A.均值滤波
- B.双边滤波← 正确答案
- C.引导滤波← 正确答案
- D.高斯滤波
答案:BC。双边滤波在空间距离之外还考察颜色差异,边缘两侧颜色差异大时权重骤降,因此能保边;引导滤波利用引导图的结构信息,也能在保边前提下去噪。均值与高斯只按位置加权,遇到边缘同样会模糊,故不属于保边算法。
Q9. 光流估计的核心假设是?
- A.物体亮度在帧间保持不变← 正确答案
- B.物体颜色在帧间不断变化
- C.物体位置在帧间完全不动
- D.相机运动方向始终相同
答案:A。光流约束方程来自“亮度不变假设”——同一个物点在相邻帧之间移动前后亮度保持一致。基于这个前提,才能用空间梯度与时间梯度反解出运动速度。其余三个假设均不成立或不是光流的出发点。
Q10. 关于视频去噪与稳定化,说法正确的有?
- A.空间去噪只处理单帧图像← 正确答案
- B.时域去噪利用帧间信息← 正确答案
- C.稳定化需要估计运动轨迹← 正确答案
- D.去噪效果与噪声类型无关
答案:ABC。空间去噪逐帧独立处理,时域去噪跨帧利用冗余信息,两者互补;稳定化先估计相机运动轨迹再平滑补偿。D 错:去噪效果与噪声类型密切相关,高斯噪声、椒盐噪声、压缩块效应的针对性策略完全不同。