把手机架在手里拍视频,就像坐上一辆在碎石路上颠簸的大巴,想用铅笔在本子上画一幅风景。手一抖,笔尖就歪出锯齿;车一震,画纸也跟着扭。AI视频去抖动技术(Stabilization),就是给这辆大巴装上一双“AI之手”:先读懂纸是怎么被颠的(运动估计),再规划一条平顺的画笔路线(相机路径平滑),接着把每一帧画错的内容重新描正(画面重映射),最后修补画纸边缘露出的空白(裁剪与边缘填充)。整个过程,就像一位耐心的画师在颠簸车上完成了整幅大作。你不需要知道复杂的数学公式也能看懂:所谓稳定,就是先量出颠簸,再抹掉颠簸,最后把露馅的边缘补好。

岗位关联

对AI从业者而言,去抖动是视频生成的“三基色”之一:理解运动估计、路径平滑与边缘补偿,几乎是进入任何视频编辑AI岗位的必修课。

目录
  1. 可视化演示
  2. 抖动成因分析
  3. 运动估计方法
  4. 相机路径规划
  5. 画面重映射
  6. 裁剪边缘填充
  7. 工具实践指南
  8. 前沿趋势演进
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示视频去抖动三步流程(运动估计→高斯平滑→裁剪填充)、三种方法对比(特征点/光流/深度学习速度精度差异)与平滑半径调参(15/30/60帧+OIS/EIS/AI三级防抖),交互切换核心技术。

本节配有交互动效(进入视口后自动加载,约 3KB)。

AI视频去抖动稳定技术 去抖流程:运动估计(光流/特征点)→高斯平滑(低通滤波)→裁剪填充(边缘修复)三步 方法对比:特征点(速度快精度低)/光流(均衡)/深度学习(精度高速度慢) 参数调优:平滑半径15-60帧,OIS+EIS+AI三级防抖,延迟Stable = Crop(Smooth(Estimate(frames))) | radius ∈ [15,60] 运动估计→低通滤波→裁剪填充消除帧间抖动

抖动成因分析

把手机架在手里拍视频,就像坐上一辆在碎石路上颠簸的大巴,想在颠簸的车厢里用铅笔画一幅画。手一抖,笔尖就偏离原来的线条,在纸上留下锯齿状的轨迹。要把这段视频变稳,先得弄清楚:这辆“大巴”到底是怎么颠的?

视频的“颠簸”不是一种,而是三股力量叠在一起。第一股是手持物理振动:手部肌肉微颤、走路时身体上下起伏、按下快门的瞬间冲击,都会让镜头产生高频平移和旋转,频率通常在 1 到 10 赫兹。第二股是滚动快门畸变:如今多数手机摄像头采用 CMOS 逐行曝光,拍快速移动的物体时,画面会像果冻一样扭动,原本笔直的电线杆会被拉成弯的。第三股是帧间运动错位:相邻两帧之间相机位置已经改变,画面里的内容在帧与帧之间发生偏移,人眼看到的就是连续的“晃”。

这三股力量共同决定了一帧画面的“歪斜程度”。AI 去抖动算法会把每一帧看作画板上的一页纸,先量化纸在哪个方向偏了、偏了多少,再在后续阶段把这页纸“扶正”。注意,低频的缓慢移动(比如你边拍边转身)属于自然运动,是导演想要的“驾驶意图”;只有高频抖动才是要去掉的噪声。所以去抖动的第一步不是直接裁图,而是先做运动分析。

理解了大巴的三种颠簸方式,AI 才能在后续环节里对症下药:哪一笔是手抖出来的,哪一笔是纸自己扭了,哪一笔是司机本来想转的弯。接下来,算法要做的第一件实事,就是测量这些颠簸的幅度。

运动估计方法

假设你坐在大巴上,手里举着画板,想知道纸刚才被风吹歪了多少。有一个笨却可靠的办法:盯住纸角上的那个小树桩图案,前一秒它在左上角,这一秒它跑到了中间偏右——图案挪动的距离,就是纸的位移。AI 的运动估计,做的就是这件事。

算法会在每一帧画面里挑出许多“小树桩”,也就是容易辨认的角点(通常叫特征点),比如窗框的转角、旗帜的尖角、远处屋顶的棱边。然后到下一帧里去找这些点跑到哪了。这一找一配对,帧与帧之间的运动关系就出来了。常见做法是金字塔 Lucas-Kanade 光流:它假设小窗口内的像素移动方向基本一致,用最小二乘法解出像素在两个方向上的移动速度。

把大量特征点的移动综合起来,可以拟合成一个仿射变换模型,描述整帧画面的旋转、缩放和平移。这里的核心约束是光流方程:假设同一个点在两帧之间亮度不变,再从图像梯度与时间变化率中解出运动速度。下面就是这个方程的来龙去脉。

有了这些“读数”,AI 相当于拿到了大巴方向盘和车厢姿态的每一帧记录。纸往哪边歪、歪得多快,都被量化成了数字。下一步,就可以开始规划一条不颠簸的行驶路线了。

Ix u+Iy v+It=0\displaystyle I_x \, u + I_y \, v + I_t = 0
这个公式的意思是:像素在水平方向移动 $u$、垂直方向移动 $v$ 时,加上亮度的时间变化,总和为零。它是几乎所有光流法的“基石”。
  1. 亮度恒常假设假设同一个物体像素在两帧之间亮度几乎不变,这是光流法成立的前提。
    I(x,y,t)=I(x+dx,y+dy,t+dt)I(x,y,t) = I(x+\mathrm{d}x, y+\mathrm{d}y, t+\mathrm{d}t)
  2. 一阶泰勒展开把右侧按当前位置泰勒展开,并忽略二阶以上的高阶小量。
    I(x+dx,y+dy,t+dt)≈I(x,y,t)+Ixdx+Iydy+ItdtI(x+\mathrm{d}x, y+\mathrm{d}y, t+\mathrm{d}t) \approx I(x,y,t) + I_x \mathrm{d}x + I_y \mathrm{d}y + I_t \mathrm{d}t
  3. 整理消元两边同减 $I(x,y,t)$ 再同除 $\mathrm{d}t$,就得到光流约束方程。
    Ixdxdt+Iydydt+It=0⇒Ixu+Iyv+It=0I_x \frac{\mathrm{d}x}{\mathrm{d}t} + I_y \frac{\mathrm{d}y}{\mathrm{d}t} + I_t = 0 \quad\Rightarrow\quad I_x u + I_y v + I_t = 0

相机路径规划

现在知道了纸的晃动轨迹,但还不能把所有晃动都抹掉。设想司机开着大巴从山脚爬向山顶,途中被石块硌得直颠簸。你希望保留的是“从山脚到山顶”的大方向,去掉的是“被石块硌到”的小跳。AI 要做的是把这条原始路径拆成两条:低频的自然运动和高频的抖动。

视频里的“路径”,指相机累积变换的轨迹——从第一帧到当前帧,相机总共平移了多少、旋转了多少。一条理想的路径应当平滑得像手绘的弧线;而抖动会让它在弧线上叠加锯齿。常用的分离工具是滑动窗口平滑:取当前帧前后各 $K$ 帧的路径点做加权平均,高频锯齿会在平均中被磨平。

平滑参数 $K$ 和权重分布直接影响稳定效果。$K$ 越大,轨迹越顺滑,但系统延迟越高,还容易把自然运动也抹平;权重常用高斯分布,距离中心越近的帧贡献越大。下面这个公式就是滑动窗口加权平均的完整表达。

平滑后的路径,就是“如果司机在平整路面上开车”本该走出的弧线。有了它,相当于拿到了修正草稿的底稿。接下来要做的,就是把每一帧歪歪扭扭的画笔重新挪到底稿上。

St=∑i=−KKwi Pt+i∑i=−KKwi\displaystyle S_t = \frac{\sum_{i=-K}^{K} w_i \, P_{t+i}}{\sum_{i=-K}^{K} w_i}
简单说,就是用前后一小段窗口里的路径点取一个“加权平均”,让每一帧的位置都不至于太突兀。
  1. 选取邻域窗口前后各取 $K$ 帧作为参考范围,$K$ 越大运动越平滑但时延越高。
    i∈{−K,−K+1,⋯ ,K}i \in \{-K, -K+1, \cdots, K\}
  2. 设定高斯权重离中心帧越远的路径点权重越小,过渡更自然。
    wi=exp⁡ ⁣(−i22σ2)w_i = \exp\!\left(-\frac{i^2}{2\sigma^2}\right)
  3. 归一化加权平均除以权重总和,保证平滑轨迹的数量级和原路径一致。
    St=∑i=−KKwiPt+i∑i=−KKwiS_t = \frac{\sum_{i=-K}^{K} w_i P_{t+i}}{\sum_{i=-K}^{K} w_i}

画面重映射

路线规划好了,接下来要把画纸上已经画歪的线条,按照底稿重新描一遍。你可以把每一帧想象成一张透明胶片,上面画着当前时刻的画面。稳定就是把所有胶片按底稿的位置对齐叠好。这一步骤在视频处理里叫画面重映射。

重映射的关键是上一节算出的“平滑路径”与原始路径作差,得到每一帧的补偿变换。然后做逆向映射:对于输出画布上的每个坐标,都去问“这个点应该取自原始画面的哪里”。这样稳定后画面就不再出现帧间错位。

补偿变换通常用仿射变换矩阵表达,它支持旋转、缩放和平移的组合。矩阵里 $a,b,c,d$ 控制旋转与缩放,$t_x,t_y$ 控制平移。由于连续帧的变换需要级联,常用齐次坐标把矩阵扩成 $3\times 3$ 参与连乘。重映射时,像素落在非整数坐标,要用双线性插值取附近像素的加权值,避免画面出现锯齿。

把每帧胶片按底稿对齐后,抖动已经在视觉上消失了。但你很快会发现新问题:胶片挪动后,画纸边缘露出了空白,就像拼图被挪走后剩下桌布。这就是下一节要解决的边缘难题。

[x′y′1]=[abtxcdty001][xy1]\displaystyle\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix}=\begin{bmatrix} a & b & t_x \\ c & d & t_y \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} x \\ y \\ 1 \end{bmatrix}
这个矩阵把原始坐标 $(x,y)$ 变换到稳定后的新坐标 $(x',y')$,是整个重映射过程的“指挥棒”。
  1. 齐次坐标扩充把二维坐标加一个 1 变成三维向量,平移才能写进矩阵乘法。
    (x,y)→(x,y,1)⊤(x,y) \rightarrow (x,y,1)^{\top}
  2. 矩阵参数含义$a,b,c,d$ 控制旋转缩放,$t_x,t_y$ 控制平移,组合成仿射变换。
    M=[abtxcdty001]M = \begin{bmatrix} a & b & t_x \\ c & d & t_y \\ 0 & 0 & 1 \end{bmatrix}
  3. 路径累乘连续帧的变换矩阵连乘,得到任意帧相对首帧的全局变换路径。
    M0→t=M0→1M1→2⋯Mt−1→tM_{0\to t} = M_{0\to 1} M_{1\to 2} \cdots M_{t-1\to t}

裁剪边缘填充

重新对齐画面后,画纸的边缘会露出底下的桌布——那些本来在画面里、后来被挪走的内容,留下一圈空白。如果直接把空白裁掉,画面会缩小;如果让空白露着,观众一眼就会出戏。于是诞生了两个策略:裁剪与填充。

最常用的策略是安全边距裁剪:稳定时把输出画幅整体向中心缩小,比如只输出原始画面的 90%,这样四周无论怎么挪都有内容打底。代价是视场角变小,拍摄时本来能看到的更宽范围会被裁掉,所以专业模式常保留 10%~20% 的安全边距。

但遇到大幅晃动时,光靠裁剪还不够,画面边缘会露出没有真实纹理的黑边。这时需要内容感知填充:算法观察边缘附近的纹理方向、颜色和结构,像修图师用仿制图章一样,顺着周围纹路“脑补”出缺失的像素。更聪明的方案是动态构图:稳定过程中自适应地调整缩放比例和裁切位置,让主体始终待在安全区内,同时尽可能多地保留原始像素。

给画纸镶上“蕾丝边”后,观众眼里就只剩一幅完整、平稳的画面,看不出刚才那辆大巴有多颠。到这里,一条完整的软件去抖动流水线已经跑通。不过大多数创作者并不需要从零实现它,市面上的工具已经把这套流程打包成了按钮。

工具实践指南

理解了整套原理,就像学会了修画的手艺。但你未必需要从造纸开始——市面上的“智能画板”已经把流水线封装好了。我们只需知道哪块是裁剪、哪块是填充,就能调出好效果。

剪辑软件是首选武器:Premiere 的 Warp Stabilizer 提供了方法选项——位置、位置缩放、子空间、透视。子空间方法适合复杂运动,但画面偶尔会有伪影;位置方法适合只有平移的简单抖动。剪映这类国产 App 则把防抖做成一键开关,内部自动降级为轻量光流加陀螺仪融合。

调参数是关键:平滑度控制路径滤波的强度,调太高会让画面有“漂移感”甚至变慢;裁切率决定输出画幅的缩小比例,越高越稳但视野越小。更进阶的做法是结合陀螺仪数据:手机端稳定时,陀螺仪提供硬件级运动感知,和视觉特征点互相印证,遇到光线暗、纹理少的环境也不容易迷路。

用这些工具时,你其实是在指挥一位懂行的稳画师:告诉他裁多少、平滑多少、用什么策略。理解背后的运动估计与路径规划,参数就不再是玄学。

前沿趋势演进

回到开头的比喻:比起在颠簸的大巴上“事后修画”,未来的稳定系统更像给大巴装上自动驾驶——它能在颠簸发生时提前预判,甚至在镜头拍到的瞬间就把画面稳住。

生成式 AI 正在改写边缘填充的下限。以前内容感知填充只能仿制纹理,遇到复杂的楼宇结构就露怯;如今扩散模型可以根据全局语义生成合理的“缺失画面”,让边缘填充从“补桌布”升级为“还原真实桌布花纹”。

端侧实时稳定是另一个热潮:手机 SoC 上的 NPU 能在一帧内完成特征点提取、光流估计和补偿重映射,延迟压到肉眼不可感知,让 Vlog 创作者拍完即稳、无需后期。全景视频稳定则把问题从 2D 平面拓展到 6DoF 空间,算法需要在球面上做全局路径优化,保证多镜头拼接处的抖动同步消失。

从手动画板到 AI 修画,从后期补救到实时预判,稳画师的本领越来越大。对于今天的创作者,理解运动估计、路径规划和边缘填充这套框架,就是拿到了通往未来视频工具的钥匙。

AI 应用场景

Vlog与短视频后期防抖

阶段:AI后期处理

解决的问题:传统人工防抖需要逐帧手动跟踪关键点,费时且不准确;用 Warp Stabilizer 这类 AI 工具可以自动分析完整帧间运动,在几分钟内把手持奔跑素材修成平滑画面。

具体案例:旅行博主在大理古城手持拍摄逛街素材,回来发现画面晃得头晕。导入 Premiere 后添加 Warp Stabilizer,方法选“子空间”,平滑度调到 35%,裁切率 20%,几秒钟渲染后晃动明显消失。不过画面边缘偶尔出现树影伪影,于是改用“位置缩放”方法规避。

运动相机实时端侧稳定

阶段:端侧实时推理

解决的问题:骑行、潜水时没有后期条件,需要机内即时输出稳定画面;纯光流法在低纹理场景会失效,运动相机把陀螺仪数据与视觉估计融合,实现实时稳像。

具体案例:GoPro Hero 的 HyperSmooth 功能在骑行场景下,以每秒 200Hz 读取陀螺仪姿态,同时用 CNN 估计画面光流,两者融合后实时得到补偿变换,机内直接输出平稳的 4K 视频,无需电脑处理。

航拍与全景视频专业稳像

阶段:专业三维稳定与拼接

解决的问题:无人机在大风中会有大幅翻滚和果冻效应,全景相机多个镜头间的运动也不一致;需要在三维空间做全局路径优化,而不是简单 2D 裁剪。

具体案例:影视航拍团队用大疆 Mavic 系列拍摄强风环境下的跨海大桥素材,后期在达芬奇里使用 Stabilizer 做三维姿态估计,并结合全景拼合软件对 6DoF 路径做平滑,最终输出既保留大桥气势又无抖动的成片。

Python 演示

python100 行
import cv2import numpy as np  def make_shaky_video(path, frames=120, w=320, h=240):    writer = cv2.VideoWriter(path, cv2.VideoWriter_fourcc(*"mp4v"), 30, (w, h))    for i in range(frames):        img = np.full((h, w, 3), 240, dtype=np.uint8)        x = int(w * 0.5 + 40 * np.sin(i * 0.08) + 8 * np.sin(i * 0.7))        y = int(h * 0.5 + 20 * np.sin(i * 0.31))        cv2.circle(img, (x, y), 22, (30, 90, 200), -1)        cv2.rectangle(img, (40, 160), (w - 40, 220), (60, 180, 90), -1)        writer.write(img)    writer.release()  def estimate_transforms(cap):    ok, prev = cap.read()    if not ok:        return []    prev_gray = cv2.cvtColor(prev, cv2.COLOR_BGR2GRAY)    prev_pts = cv2.goodFeaturesToTrack(prev_gray, 150, 0.01, 10)    transforms = []    while True:        ok, frame = cap.read()        if not ok:            break        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)        pts, status, _ = cv2.calcOpticalFlowPyrLK(prev_gray, gray, prev_pts, None)        keep = status.flatten() > 0        if int(keep.sum()) < 10:            m = np.eye(2, 3, dtype=np.float32)        else:            src = prev_pts[keep].reshape(-1, 2)            dst = pts[keep].reshape(-1, 2)            m, _ = cv2.estimateAffinePartial2D(src, dst)        transforms.append(m)        prev_gray = gray        prev_pts = cv2.goodFeaturesToTrack(gray, 150, 0.01, 10)    cap.release()    return transforms  def total_path(transforms):    path = [transforms[0]]    for m in transforms[1:]:        prev = np.vstack([path[-1], [0.0, 0.0, 1.0]])        cur = np.vstack([m, [0.0, 0.0, 1.0]])        path.append((cur @ prev)[:2, :])    return path  def smooth_paths(path, radius=8):    flat = [p.reshape(6) for p in path]    n = len(flat)    smoothed = []    for i in range(n):        window = flat[max(0, i - radius):min(n, i + radius + 1)]        smoothed.append(np.mean(window, axis=0).reshape(2, 3))    return smoothed  def compensation(path, smooth):    comps = []    for p, s in zip(path, smooth):        ph = np.vstack([p, [0.0, 0.0, 1.0]])        sh = np.vstack([s, [0.0, 0.0, 1.0]])        comps.append((sh @ np.linalg.inv(ph))[:2, :].astype(np.float32))    return comps  def stabilize(src, dst, radius=8):    cap = cv2.VideoCapture(src)    fps = int(cap.get(cv2.CAP_PROP_FPS))    tw = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))    th = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))    cap.release()    transforms = estimate_transforms(cv2.VideoCapture(src))    if not transforms:        print("视频读取失败")        return    path = total_path(transforms)    smooth = smooth_paths(path, radius)    comps = compensation(path, smooth)    writer = cv2.VideoWriter(dst, cv2.VideoWriter_fourcc(*"mp4v"), fps, (tw, th))    cap = cv2.VideoCapture(src)    for comp in comps:        ok, frame = cap.read()        if not ok:            break        out = cv2.warpAffine(frame, comp, (tw, th))        writer.write(out)    cap.release()    writer.release()  if __name__ == "__main__":    make_shaky_video("shaky.mp4")    stabilize("shaky.mp4", "smooth.mp4")    print("去抖动完成: shaky.mp4 -> smooth.mp4")
目的:从零演示“运动估计 → 路径平滑 → 补偿重映射”的经典去抖动流水线,可直接运行生成对比视频。
  1. cv2.goodFeaturesToTrack(prev_gray, 150, 0.01, 10)在画面里挑选容易追踪的角点,相当于找出比喻里的“小树桩”。
  2. cv2.calcOpticalFlowPyrLK(prev_gray, gray, prev_pts, None)金字塔光流跟踪上一帧的角点在当前帧跑到哪了。
  3. cv2.estimateAffinePartial2D(src, dst)用匹配点对估计帧间仿射变换,量化两帧之间的旋转平移。
  4. path.append((cur @ prev)[:2, :])累积路径:当前帧变化矩阵乘以之前所有帧的变化,得到从首帧到当前帧的全局轨迹。
  5. np.mean(window, axis=0).reshape(2, 3)滑动窗口平均,把高频抖动在路径中抹平,留下平滑的“驾驶意图”。
  6. np.linalg.inv(ph)对原始路径矩阵求逆,用于计算“平滑后位置”相比“原始位置”需要补偿多少。
  7. cv2.warpAffine(frame, comp, (tw, th))按补偿矩阵重映射每一帧,输出稳定画面。

常见误区

误区我以为开了 AI 防抖,视频的清晰度会变高,像修复老照片一样把模糊变清晰。

正解去抖动解决的是“帧间跳动”和“错位拖影”,不是“单帧模糊”。它不会增加传感器已丢失的细节;相反,为了隐藏边缘空白,稳定后通常要裁剪画幅,分辨率不升反降。想要更清晰,得靠超分辨率,那是另一个 AI 任务。

为何常见:很多视频教程把防抖和画质增强放在同一个“AI增强”按钮下,用户很自然会把两者混为一谈。

误区我觉得去抖动无非是把四周裁一圈,画面“看起来”眼不见心不烦就稳了。

正解裁剪只是最后一步“善后”。如果不先做运动估计和重映射,直接裁边,画面主体依然会在裁切框里乱跳,晃动感完全消除不了。正确的顺序是:先算出每帧该补偿多少,再用裁剪处理边缘。

为何常见:因为稳定结果直观上确实表现为画幅变小,初学者容易把“结果”当成“方法”。

误区只有带陀螺仪的运动相机才能做防抖,普通电脑软件没法稳定画面。

正解纯软件方法完全可行。本文演示的特征点光流法,就是靠画面里的视觉线索估计运动,不需要任何硬件传感器。陀螺仪只是额外的“参考答案”,在低纹理场景提供补充信息;没有它,软件照样能稳。

为何常见:手机宣传里常强调 OIS/EIS 硬件级防抖,让用户误以为硬件是防抖的必要条件。

误区AI 填充边缘时,能把人物被裁掉的手臂、楼房被切掉的部分真实还原出来。

正解内容感知填充是“猜测”而非“还原”。它根据周围纹理生成看起来合理的像素,但复杂的结构细节往往画错,出现重复纹理或扭曲。真实信息一旦没被拍到,就永远找不回来。所以填充只是补救手段,拍摄时留足安全边距才是上策。

为何常见:生成式 AI 的 Demo 太惊艳,让人高估了补画能力,忽略了它本质上是在“编造”。

面试题

Q1. 视频去抖动的第一步通常是做什么?

单选题 · easy

  • A.直接裁剪画面四周
  • B.估计帧间运动关系← 正确答案
  • C.降低视频输出的帧率
  • D.提高视频压缩码率

答案:B。先做运动估计才能知道画面歪了多少,就像修画前先看清纸是怎么晃的。裁剪只是最后处理边缘的手段;降帧率、加码率与稳定无关。

Q2. 下列哪种行为会明显加剧手持视频的抖动?

单选题 · easy

  • A.使用三脚架固定拍摄
  • B.跑步时跟拍移动物体← 正确答案
  • C.把手机放在桌面上拍
  • D.使用稳定器慢慢平移

答案:B。跑步带来的低频大幅起伏和高频冲击,会同时激发平移和旋转抖动;三脚架、桌面、稳定器都是在消除物理振动。

Q3. 光流法成立的核心前提是什么?

单选题 · easy

  • A.场景亮度在两帧间近似不变← 正确答案
  • B.相机必须固定在三脚架上
  • C.视频帧率必须达到 60fps
  • D.画面中不能有任何运动物体

答案:A。光流约束方程推导的第一步就是亮度恒常假设——同一个点在两帧之间亮度变化可忽略。相机固定和 60fps 都不是必要条件。

Q4. 滚动快门主要会引起什么画面问题?

单选题 · mid

  • A.运动物体出现果冻状扭曲← 正确答案
  • B.画面整体色调偏绿偏蓝
  • C.视频音画不同步的现象
  • D.视频文件体积异常膨胀

答案:A。CMOS 逐行曝光导致不同行的拍摄时刻不同,快速运动或剧烈抖动时,画面里的竖直线会像果冻一样扭动,这是滚动快门特有的畸变。

Q5. 相机路径规划中“滑动窗口平滑”的主要作用是什么?

单选题 · mid

  • A.去掉高频晃动保留自然运动← 正确答案
  • B.提高画面暗部的亮度层次
  • C.压缩视频文件的存储体积
  • D.自动裁剪掉多余的边缘像素

答案:A。滑动窗口对前后 K 帧的路径点取加权平均,相当于低通滤波,能把高频抖动磨平,同时保留司机“转弯爬坡”的低频意图。

Q6. 为什么稳定之后画面视场角通常会变小?

单选题 · mid

  • A.因为需要裁剪边缘来隐藏空白← 正确答案
  • B.因为自动对焦会损失焦距
  • C.因为帧率下降导致画面变小
  • D.因为码率降低导致画质压缩

答案:A。画面重映射后边缘会露出没有真实内容的区域,必须向内裁剪或填充来掩盖,因此输出视场角比原始素材小,这是稳定不可避免的代价。

Q7. 运动估计阶段常用的技术手段有哪些?

多选题 · mid

  • A.特征点跨帧追踪与匹配← 正确答案
  • B.金字塔光流计算像素运动← 正确答案
  • C.仿射变换拟合全局运动← 正确答案
  • D.直方图均衡增强图像对比度

答案:ABC。特征点追踪找稀疏对应,光流算稠密运动,仿射变换把运动统一建模,三者是运动估计的常用组合。直方图均衡是画质增强,和运动估计无关。

Q8. 仿射变换矩阵不能表达下列哪种几何变化?

单选题 · hard

  • A.透视投影的近大远小← 正确答案
  • B.围绕中心的旋转变换
  • C.水平方向的整体平移
  • D.两个方向的不同缩放

答案:A。仿射变换是线性变换加平移,只能保持平行线平行;透视投影需要 3×3 单应矩阵才能表达“近大远小”的灭点效果。

Q9. 实时端侧视频去抖动面临哪些主要挑战?

多选题 · hard

  • A.计算量受手机功耗和散热限制← 正确答案
  • B.处理延迟必须低到肉眼无感← 正确答案
  • C.完全可以不考虑输出画质损失
  • D.模型需要轻量化以适配 NPU← 正确答案

答案:ABD。端侧实时稳定要在有限算力下把光流、路径平滑、重映射压缩到单帧时间内完成,同时还要兼顾画质裁剪与伪影控制。“不考虑画质”是明显错误选项。

Q10. 内容感知填充处理边缘空白时的本质是什么?

单选题 · hard

  • A.依据周围纹理生成猜测像素← 正确答案
  • B.从相机缓存找回丢失像素
  • C.把原始画面放大后覆盖边缘
  • D.降低边缘亮度使空白不可见

答案:A。填充是“用上下文猜内容”,不是“找回真实像素”。放大画面会重新引入模糊与锯齿,降低亮度只是视觉掩盖,没有真正补充内容。