数字防抖(Digital Image Stabilization, DIS)是通过软件算法对图像序列进行处理,补偿因相机抖动导致的画面不稳定的技术。以下是其核心原理和常见实现算法的详细介绍:
数字防抖的核心原理
-
运动估计
通过分析连续帧之间的像素变化,估计相机抖动产生的全局运动(如平移、旋转)。常见的运动估计方法包括块匹配(Block Matching)或特征点匹配(如ORB、SIFT)。 -
运动补偿
根据估计的运动参数,反向调整当前帧的位置或角度,抵消抖动影响。例如,若检测到帧间向右平移,则将当前帧向左平移相同幅度。 -
帧合成与裁剪
补偿后的帧可能导致画面边缘缺失,需通过裁剪或动态填充(如黑边、边缘扩展)保持输出分辨率一致。
常见实现算法
基于块匹配的运动估计
通过比较相邻帧中固定大小的图像块(如16×16像素)的相似度,找到最佳匹配位移。
import cv2
import numpy as np
def block_matching(prev_frame, curr_frame, block_size=16):
height, width = prev_frame.shape
motion_vectors = []
for y in range(0, height, block_size):