相机in-sensor zoom功能介绍

和你一起终身学习,这里是程序员Android
经典好文推荐,通过阅读本文,您将收获以下知识点:

一、In-sensor zoom 概述

二、如何开启 In-sensor zoom

2.1 开启 camxsettings.xml setting

2.2 多摄像头,需要添加特殊的逻辑

2.3 在 MetaTransitionTable 配置 sensorModeGroupId 的范围

2.4 在Sensor.xml 中设置兼容性 INSENSORZOOM

2.5 InSensor zoom log

一、In-sensor zoom 概述

In-sensor zoom 功能 是一种通过图像传感器本身的技术实现变焦的解决方案,主要应用于智能手机、数码相机等设备中。它与传统的光学变焦和数码变焦不同,其核心在于直接利用传感器的物理特性或图像处理技术来模拟变焦效果,而非依赖镜头组的物理移动或单纯裁剪放大图像。


核心原理

  1. 高分辨率传感器裁剪

    • 设备使用超高分辨率的图像传感器(例如 48MP、64MP 或更高),在拍摄时仅截取传感器中心区域的像素(例如 12MP 部分),通过"裁剪"实现等效变焦效果。例如,若传感器分辨率足够高,2倍裁剪后仍能输出清晰的照片。
  2. 像素合并技术(Pixel Binning)

    • 部分传感器支持动态像素合并(如 Quad Bayer 阵列),可在不同焦段下切换模式。例如,默认模式下合并像素以提升暗光表现,变焦时则使用未合并的高分辨率原始数据,通过裁剪实现无损变焦。
  3. 多摄像头协同

    • 结合多个固定焦距的镜头(如广角、主摄、长焦),通过传感器裁剪和算法融合,填补光学变焦的焦段空缺。例如,2倍变焦可能由主摄传感器裁剪实现,而5倍则由专用长焦镜头完成。

与传统变焦技术的对比

类型 原理 优点 缺点
光学变焦 通过镜头物理移动改变焦距 画质无损,细节保留最好 需要复杂镜头结构,增加体积和成本
数码变焦 直接放大图像,本质是裁剪+插值 成本低,无需硬件改动 画质严重下降,噪点增多
In-sensor变焦 依赖传感器高分辨率裁剪或像素合并 体积小巧,画质优于数码变焦 依赖传感器性能,弱光下效果受限

优势

  1. 节省空间:无需复杂的光学变焦机械结构,适合轻薄设备(如智能手机)。
  2. 无缝过渡:与多摄像头系统配合,可平滑切换不同焦段(如从1x到5x)。
  3. 成本可控:高分辨率传感器普及后,裁剪方案比多镜头模组更经济。

局限性

  1. 画质依赖传感器:若传感器分辨率不足,裁剪后细节损失明显。
  2. 弱光表现差:裁剪会减少单位像素的进光量,暗光环境下噪点增多。
  3. 非真光学变焦:本质仍是数字处理,与光学变焦的画质仍有差距。

应用场景

  • 智能手机:如三星的"Space Zoom"、谷歌的"Super Res Zoom"均采用传感器裁剪+算法增强。
  • 无人机/运动相机:受限于体积,常采用高分辨率传感器实现电子变焦。
  • 监控摄像头:通过传感器区域裁剪实现变焦追踪目标。

未来趋势

随着传感器技术(如更高分辨率、更大尺寸)和AI算法的进步,In-sensor zoom可能进一步缩小与光学变焦的差距,甚至结合计算摄影(如多帧合成、超分辨率重建)实现"无镜头变焦"的颠覆性设计。

  1. InSensor Zoom 不仅需要高通平台支持,而且需要Camera sensor 模组支持(需要跟Sensor FAE 确认)。

  2. 与正常的zoom 对比,Insensor zoom 使用full remosaic size mode 替换1/4 binng mode, 当zoom > 2x, sensor crop输出2x zoom.

二、如何开启 In-sensor zoom

2.1 开启 camxsettings.xml setting

vendor/qcom/proprietary/camx-common/settings/common/camxsettings.xml

设置 Enable In Sensor Zoom DefaultValue

go 复制代码
<setting>
   <Name>Enable In Sensor Zoom</Name>
   <Help>Settings to enable In sensor Zoom</Help>
   <VariableName>enableInSensorZoom</VariableName>
   <VariableType>BOOL</VariableType>
   <SetpropKey>vendor.debug.camera.enableInSensorZoom</SetpropKey>
   // 设置  Enable In Sensor Zoom DefaultValue 
   <DefaultValue>TRUE</DefaultValue>
   <Dynamic>FALSE</Dynamic>
   <Public>TRUE</Public>
 </setting>
2.2 多摄像头,需要添加特殊的逻辑

oem/qcom/multicamera/chimcxcameraconfig/configs/netrani/netrani.xml

配置 SensorMode Group id 是否否支持 Insensor zoom 1 支持 、0 不支持

go 复制代码
<!-- Transition Modes ============================================================== ====================-->
    <TransitionMode id="0" sensorModeGroupId="0" skipRate="0" physicalDeviceRef="UltrawidePhysicalCam" />
    <TransitionMode id="1" sensorModeGroupId="0" skipRate="0" physicalDeviceRef="WidePhysicalCam" />
    <TransitionMode id="2" sensorModeGroupId="0" skipRate="0" physicalDeviceRef="TelePhysicalCam" />
    <TransitionMode id="3" sensorModeGroupId="1" skipRate="0" physicalDeviceRef="WidePhysicalCam" />
    <TransitionMode id="4" sensorModeGroupId="1" skipRate="0" physicalDeviceRef="TelePhysicalCam" />
    <!-- Transition Tables ==================================================================================-->
2.3 在 MetaTransitionTable 配置 sensorModeGroupId 的范围
go 复制代码
<MetaTransitionTable id="2" metadata="zoomRatio" type="Float">
        <Transition  activeRangeStart="0.6" activeRangeEnd="0.9999"  hysteresisMinFactor="0.0" hysteresisMaxFactor="0.0" transition_modes="(0)"/>
        <Transition  activeRangeStart="1.0" activeRangeEnd="1.9999"  hysteresisMinFactor="0.0" hysteresisMaxFactor="0.0" transition_modes="(1)"/>
        <Transition  activeRangeStart="2.0" activeRangeEnd="2.9999"  hysteresisMinFactor="0.0" hysteresisMaxFactor="0.0" transition_modes="(3)"/>
        <Transition  activeRangeStart="3.0" activeRangeEnd="6.0999"  hysteresisMinFactor="0.0" hysteresisMaxFactor="0.0" transition_modes="(2)"/>
        <Transition  activeRangeStart="6.1" activeRangeEnd="120.01"  hysteresisMinFactor="0.0" hysteresisMaxFactor="0.0" transition_modes="(4)"/>
    </MetaTransitionTable>
2.4 在Sensor.xml 中设置兼容性 INSENSORZOOM

找FAE 要Sensor FAE 要一组 支持remosaic 的insensor zoom 的 resolution

go 复制代码
<!--res5 4624x3472_30fps for QCFA insensorzoom mode with remosaic enable -->
     <!--Frame dimension: contains xStart, yStart, width and height -->
     <frameDimension>
       <xStart>  </xStart>
       <yStart> </yStart>
       <width>4624</width>
       <height>3472</height>
     </frameDimension>
     
      <!--List of features / capabilities supported by sensor -->
      <capability>INSENSORZOOM</capability>
      <transitionGroups>BINCROP43 BINCROP169</transitionGroups>
      <RemosaicTypeInfo>NoRemosaic</RemosaicTypeInfo>
2.5 InSensor zoom log

log 关键字:
SetInSensorZoomInfo|PublishPerFrameSensorMetaData .*resID|ApplySensorUpdate

bEnableInSensorZoomMode: 1 表示成功开启Insensor Zooom

触发Insensorroom 后 会切换对应的senmode 的resolution(比如:从 mode 1-->mode 5 bEnableInSensorZoomMode: 1 )

go 复制代码
bEnableInSensorZoomMode: 1 
 01-01 18:53:41.468933  1501 11723 I CHIUSECASE: [CORE_CFG ] chifeature2graphselector.cpp:7391 SetInSensorZoomInfo() [InSensorZoom] cameraId:0 bEnableInSensorZoomMode: 0zoomStatusChanged = 0 requested zoomState: 1 m_inSensorZoomInfo.zoomState 1 appFrameIndex 91 size 3
 01-01 18:53:41.469350  1501 11723 I CHIUSECASE: [CORE_CFG ] chifeature2graphselector.cpp:7391 SetInSensorZoomInfo() [InSensorZoom] cameraId:3 bEnableInSensorZoomMode: 1zoomStatusChanged = 0 requested zoomState: 2 m_inSensorZoomInfo.zoomState 2 appFrameIndex 91 size 3

mode 1-->mode 5 
 01-01 18:53:28.041499  1501  3338 I CamX    : [CORE_CFG][SENSOR ] camxsensornode.cpp:2266 PublishPerFrameSensorMetaData() Sensor[3] AppliedGains: ReqId[11],... ... resID 1, ContextTypeID: 0
 01-01 18:53:28.185560  1501  3339 I CamX    : [CORE_CFG][SENSOR ] camxsensornode.cpp:2266 PublishPerFrameSensorMetaData() Sensor[3] AppliedGains: ReqId[12],... ... resID 1, ContextTypeID: 0
 01-01 18:53:28.293122  1501  3341 I CamX    : [CORE_CFG][SENSOR ] camxsensornode.cpp:2266 PublishPerFrameSensorMetaData() Sensor[3] AppliedGains: ReqId[13],... ... resID 1, ContextTypeID: 0
 01-01 18:53:28.440977  1501  3341 I CamX    : [CORE_CFG][SENSOR ] camxsensornode.cpp:2266 PublishPerFrameSensorMetaData() Sensor[3] AppliedGains: ReqId[14],... ... resID 1, ContextTypeID: 0

至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

点个在看,为大佬点赞!

相关推荐
小彭努力中2 小时前
8.Three.js中的 StereoCamera 立体相机详解+示例代码
开发语言·前端·javascript·vue.js·深度学习·数码相机·ecmascript
猿饵块8 小时前
机器人--相机
数码相机·机器人
小彭努力中9 小时前
9.Three.js中 ArrayCamera 多视角相机详解+示例代码
开发语言·前端·javascript·vue.js·数码相机·ecmascript·webgl
爱凤的小光17 小时前
图漾官网Sample_V1版本C++语言完整参考例子---单相机版本
开发语言·c++·数码相机
zhongqu_3dnest18 小时前
什么是全景相机?
数码相机·saas·数字孪生·三维空间·全景相机·三维全景技术
zhongqu_3dnest2 天前
vr全景相机如何选择?
数码相机·vr·全景相机
zhongqu_3dnest2 天前
什么是VR相机?VR相机的发展历史
数码相机·vr·全景相机
Time_Memory_cici2 天前
相机中各个坐标系的转换关系如像素坐标系到世界坐标系以及相机标定的目的
数码相机
XU磊2603 天前
双目RealSense系统配置rs_camera.launch----实现D435i自制rosbag数据集到离线场景的slam建图
数码相机·机器人·自动驾驶