图像质量评估(7) -- 图像稳定性(Image Stabilization)

        图像稳定性(Image Stabilization)指的是相机在捕获图像过程中,相机内的光学系统有多稳定。如果相机不稳定,那么图像看起来会模糊。造成图像模糊的原因有很多,例如弱光环境,使用了长焦距,以及手持相机使用中的抖动加上一个慢速快门等。

图像稳定性的背景知识

焦距(focal length)

        焦距指平行光入射时从透镜光心到光聚集之焦点的距离,也称为焦长,是光学系统中衡量光的聚集或发散的度量方式。

        广角相机的焦距较短,这意味着焦点会更靠近透镜光心,因此可视角度也会变大,所能看到的图像区域会变宽,图像中的物体会显示地更小。

低光(Low-light)

        处于低光场景中时,要想获得的曝光,需要调整进光量。可以通过改变光圈,ISO灵敏度以及快门速度来调整。因此,如果处于低光场景,可以通过选择更大的光圈,更高的ISO灵敏度或更慢的快门速度来获得更高的进光量。但是环境越暗,能改善进光量的可能性就越小。

        在很多场景下即使使用最大的光圈也不够,增加ISO灵敏度又会对图像质量造成负面冲击。在这种情况下,降低快门速度成了唯一选项。

        更长的曝光时间能够帮助修正低光环境的进光量。但是,快门速度越慢,被捕获到的相机抖动就会越多(尤其对于手持相机来说),造成模糊的图像。

用更低的快门速度避免图像模糊

        作为一个通用规则,快门速度至少要达到焦距的倒数:

        T = 1/focal length

        手持相机要避免图像模糊,需要记住焦距越长,快门速度应该要越快。使用一个过长的焦距会导致抖动增加。

左:ISO100-f/5.6-1/13s-200mm ;中:ISO 400-f/5.6-1/50s-200mm;右:ISO 1600-f/5.6-1/200s-200mm

设置一个短的快门速度

        绝大多数情况下,可以通过在相机设置中选择一个更大的光圈或更高的ISO灵敏度来设置一个更快的快门速度。但通常相机不会按照摄影者的偏好提供合适的设置。举个例子,摄影者可能需要比可用的光圈数值更小的值。要解决这个问题,通常会选择一个更高的ISO灵明度,但这样做通常会将图像信号放大到一个危险的水平:增加了噪声,降低了图像质量。如果不能使用相机设置来达到更快的快门速度,可以利用设置外的其他稳定图像的方法来获得无模糊的图像。

图像稳定方法

        我们需要记住一个核心的东西是对于拍摄一个快速移动的物体,快门的速度变短是最好的解决方案。如果没有一个较快的快门速度,即便使用以下图像稳定的方法,运动的物体也会导致图像模糊。

三脚架(Tripods)

        使用三脚架是比较经典的避免慢速快门造成模糊的方法。当然,三脚架并不完美,它的效果取决于假设三脚架的平面的稳固程度。另外,当手动松开三脚架时也会造成轻微的相机摆动,因此搭配定时器或相机遥控器是比较推荐的。

        尽管三脚架相对可靠,但它解决不了所有问题。现如今大部分相机和镜头都有内置的图像稳定器,要么在镜头侧(In-Lens),要么在sensor侧(In-Camera),用来补偿诸如手部抖动造成的稳定性问题。

光学图像稳定器(Optical Image Stabilizer)

        In-Lens方法中,OIS包含了浮动镜头用来抵消抖动。本质上讲,小型测量设备(如陀螺仪)记录由摄影者导致的抖动位移信息并将信息发给处理器,处理器随后根据这些信息做浮动镜头的修正调整来修正光路。浮动镜头能在水平和垂直方向上移动,以此来平衡yaw(Y轴的旋转)和pitch(X轴的旋转)。

 围绕Y轴的旋转称为yawning或yaw,围绕X轴的旋转称为pitching或pitch

浮动镜头(绿色部分)在水平和垂直方向上移动,补偿X和Y轴旋转位移 

        光学In-Lens图像稳定器对于带有光学取景器(例如长焦镜头)的相机来说尤其重要。如果稳定器被激活,它会在当快门按钮按到一半的时候开始工作。随后稳定的光信息穿过相机内部的反光镜到达光学取景器,让场景中的物体保持稳定。

        光学In-Lens图像稳定器方法是更为常见的图像稳定方法,但它不是对每种镜头都可用。

传感器位移式光学图像稳定器(Sensor-shift Optical Image Stabilization)

        某些厂商使用基于传感器的稳定器(In-Camera)。和In-Lens稳定器中传感器保持固定的方式相比,这个方法使用了一个自由移动的传感器来抵消相机抖动。也就是说,sensor根据相机的位移沿着X或Y轴方向进行移动。除了能够稳定住X和Y轴的位置,sensor-shift稳定器还能修正光轴方向的旋转(roll),因此能够在单个独立轴上消除相机抖动。

 sensor-shift稳定器能够修正yaw,pitch,roll

        需要注意的是,可以在系统中同时集成In-Camera和In-Lens稳定器。很多相机只会选择其中一种,也有部分相机同时使用两种方案。如果同时使用两种方案,厂商必须保证这两个部件相互之间不会产生负面干扰导致不想要的模糊的图像。

其他图像稳定方案

        前面提到的图像稳定方法都称为(纯)光学图像稳定方法,还有一些方法,关注的是“非光学”层面的事情。举例来说,某些手机厂商会组合多张短时间曝光的欠曝图片,通过这种方法来生成一副最终的图像(如google HDR+)。另一种方法是将一副正常曝光的模糊图像和一张欠曝的清晰的图像的边缘进行融合。这些方法有很多困难的地方,其中一个是定义适合目标图像的曝光时间。尽管说了这么多,对用户来说,他们只会关注即使是处于低光条件,系统也要给出一张清晰的图片这一点。

衡量图像稳定系统的质量

        衡量相机系统内图像稳定系统的最有效的手段之一是使用一个抖动模拟设备和对应的测试图卡。ISO 20954-1描述了这种方法。使用这类设备,你能够定义和控制相机的抖动来产生比较结果。在设置了设备后,相机会在不同的曝光时间中去拍摄测试图卡。系统会进行图像中的边界的评估,报告出哪些曝光时间会产生模糊的边界。

       

使用STEVE稳定性模拟设备和斜边测试图卡的样例 

        关于手机中的防抖,可以参考一下这篇文章:

手机上很常见的OIS光学防抖,都有什么区别?https://baijiahao.baidu.com/s?id=1730199929187740075&wfr=spider&for=pc

        

### 图像防抖算法中的陀螺仪数据处理实现 #### GyroDIS技术概述 GyroDIS利用陀螺仪提供的角速度信息来预测相机的运动轨迹并据此调整图像帧,以减少因手部震动或其他外部因素引起的模糊。这种方法特别适用于存在较大镜头畸变的情况,能有效改善局部抖动不均匀的问题[^1]。 #### 解决背景拖拽问题 传统光流法(GME)难以区分前景物体移动与摄像设备本身的晃动,这可能导致错误补偿——即所谓的“背景拖拽”。引入陀螺仪后,可以直接测量拍摄装置的实际姿态变化,提供更精确的参考依据给防抖系统,避免此类误操作的发生。 #### 应用于低光照环境下的优势 在光线不足条件下,视觉特征点变得稀疏甚至消失,使得依赖于这些特征的传统EIS方法失效。然而,借助始终稳定的惯性传感器读数,则可以在任何照明环境下保持良好的稳定性能。 #### 提升防抖效果的方法论探讨 为了进一步增强防抖能力,除了单纯依靠陀螺仪之外,还应考虑改进基础框架内的核心运算逻辑。具体而言,就是将简单的刚体模型替换为更为复杂的仿射或投影变换模式,以便更好地适应复杂多样的实际应用场景需求[^2]。 ```python import numpy as np def gyro_to_rotation_matrix(gyro_data, dt): """ Convert gyroscope data into rotation matrix """ omega_x = gyro_data['x'] * dt omega_y = gyro_data['y'] * dt omega_z = gyro_data['z'] * dt R = np.array([[np.cos(omega_y)*np.cos(omega_z), np.sin(omega_x)*np.sin(omega_y)*np.cos(omega_z)-np.cos(omega_x)*np.sin(omega_z), np.cos(omega_x)*np.sin(omega_y)*np.cos(omega_z)+np.sin(omega_x)*np.sin(omega_z)], [np.cos(omega_y)*np.sin(omega_z), np.sin(omega_x)*np.sin(omega_y)*np.sin(omega_z)+np.cos(omega_x)*np.cos(omega_z), np.cos(omega_x)*np.sin(omega_y)*np.sin(omega_z)-np.sin(omega_x)*np.cos(omega_z)], [-np.sin(omega_y), np.sin(omega_x)*np.cos(omega_y), np.cos(omega_x)*np.cos(omega_y)]]) return R def apply_gyro_dis(image_sequence, gyro_readings, frame_rate=30): """ Apply GyroDIS to stabilize image sequence based on given gyro readings.""" stabilized_images = [] prev_rot_mat = None for i in range(len(image_sequence)): current_frame = image_sequence[i] if i > 0: delta_t = 1 / float(frame_rate) rot_mat = gyro_to_rotation_matrix(gyro_readings[i], delta_t) # Compute relative transformation between frames rel_transform = np.dot(rot_mat.T, prev_rot_mat) if prev_rot_mat is not None else rot_mat transformed_image = cv2.warpPerspective(current_frame, rel_transform, (current_frame.shape[1], current_frame.shape[0])) stabilized_images.append(transformed_image.copy()) prev_rot_mat = rot_mat else: stabilized_images.append(current_frame) prev_rot_mat = gyro_to_rotation_matrix(gyro_readings[i], 0.) return stabilized_images ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亦枫Leonlew

希望这篇文章能帮到你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值