x265 源码拆解:MotionEstimate::refineMV —— 亚像素运动估计精炼全解析

“整数像素搜索只是 ME 的起点,真正的精度藏在 1/4 像素的缝隙里。”

1 介绍

在视频编码中,运动估计(Motion Estimation, ME)的目标是为当前帧的每个预测单元(PU)在参考帧中找到最佳匹配位置。整数像素 ME 找到的 MV 精度为 1 像素,但 HEVC/H.265 标准要求 MV 精度为1/4 像素(QPEL)。从整像素到 QPEL 的这步"精炼",就是refineMV函数的核心使命。

refineMV是 x265 中MotionEstimate类的一个成员函数,定义在encoder/motion.cpp第 631~762 行。与它的"大哥"motionEstimate(负责整数像素 ME 的全流程)不同,refineMV专注于从 MVP 出发,在亚像素精度上逐步搜索最优 MV

为什么需要 refineMV?

整数像素 ME 找到的最佳位置,从 QPEL 角度看只是一个粗略的锚点。真实的最优匹配往往落在整像素之间的半像素或四分之一像素位置——这是因为视频内容的空间连续性使得"偏移 0.25 像素"可能比"偏移 1 像素"带来更低的残差代价。

refineMV vs moti