关于运动模糊问题的分析及处理方法

news2024/11/16 7:39:29

1、问题背景

前段时间有做一个化妆镜项目,就是一面镜子上装有一个摄像头,用户对着镜子化妆时,可同时用来采集人脸信息,分析人脸用的。客户反馈抓拍静止的人脸图像时,画面正常,而当人脸稍微运动时,抓到的图像则会有运动模糊的现象。本文主要就是总结一下对于此问题的分析及处理过程。

2、问题分析

导致运动模糊的原因有很多,我们要根据实际的问题现象去做排查定位,之前有写过一篇文章分析:拍摄运动物体,产生运动模糊/拖影的原因分析

问题现象是用户距离摄像头很近的情况下(约20-50cm,也相当于我们实际照镜子的距离),轻微的晃头就会导致抓拍的人脸图像产生运动模糊。

这里可以分析得出,被摄物体距离相机比较近、人的头部不经意的运动速度比较快。所以很大一部分原因是被摄物体和相机之前产生了相对运动导致的,也就是将整个运动过程都成像在了Sensor上。

是否是ISP当中时域降噪强度开的过大导致的?这个可以调整时域降噪的强度去确认,验证是不相关的。

另一个原因是之前没考虑到的,就是景深范围。这款产品定义的是30cm对焦,查看如下的景深表只有10cm,所以实际使用时人脸稍微前后运动一下,肯定是有很大可能会超过10cm,导致成像不清晰。

所以通过如上分析,会导致人脸运动模糊的原因有两个:

a、人脸和相机相对运动导致的运动模糊。

b、镜头的景深范围过小,当运动超过景深范围时,会导致成像不清晰。

3、解决方案

a、人脸和相机相对运动导致的运动模糊;

如何避免相对运动导致的运动模糊呢?

只有当相机和被摄物体相对静止,或者相机的曝光时间大于被摄物体运动速度才可以做到,所以可通过降低曝光时间、或者提高帧率来实现,实际都是提高单帧曝光完成的速度。

如何降低曝光时间呢?

首先要确认此场景下是否已经走到最大曝光时间了,因为不同亮度场景下所用的曝光时间是不一样的,比如在室外高亮的场景下,一帧图像曝光完成可能就1-2行,此种情况下降低曝光时间用处就不大。一般的修改方法是可在驱动中去限制最大曝光行,或者AE算法中去做限制。

如何提高帧率?

降低帧率的话,一般是减小 sensor vts 的值即可,但提高帧率的话要考虑到mipi速率、带宽性能的限制,这个就要向 sensor 原厂去提需求,让他们更新相应 setting 出来才行。

另外不论是直接降低曝光时间、还是通过提高帧率来降低曝光时间,都有可能带来噪声变多、清晰度损失的副作用。因为当曝光时间走到最大,还达不到ae target值时,AE 就会通过增加 sensor 增益来达到目标亮度,一方面增益增加了,会带来更多噪声,另一方面 ISP 是根据不同增益等级去做去噪的,所以增益变大了,去噪强度就会增加,导致清晰度损失。

我们调试的此项目是通过将曝光时间降低到1/60s、帧率保持不变的情况下(不提高帧率是因为此 sensor 在full size的分辨率下,只支持30fps),再接着去优化 ISP 的降噪效果,提高了清晰度后才满足要求的。

b、镜头的景深范围过小,当运动超过景深范围时,会导致成像不清晰。

调试一款产品前,我们要考虑其实际的应用场景,10cm的景深范围肯定是不满足实际使用要求的,根据我们平常照镜子的需求近焦端距离10cm(像平常我们挤痘痘是需要的靠这么近的),远焦端距离100cm,所以建议景深范围10-100cm,也就是90cm内为好。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/677037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java springboot整合MyBatis实现分页查询以及带条件的分页查询

之前的文章 java springboot整合MyBatis做数据库查询操作操作了springboot整合MyBatis,然后简单做了个按id查询的操作 那么 我们按上文搭建起的环境继续 我们直接在staffDao接口中声明一个分页函数 Select("select * from staff limit #{page},#{pageSize}&q…

【Vue】Vite 组件化开发

文章目录 组件化开发一、组件化开发思想二、Vue 组件的构成2.1 组件组成结构2.2 组件 template 节点2.2.1 在 template 中使用指令2.2.2 在 template 中定义根节点 2.3 组件的 script 模板 三、组件的基本使用3.1 组件的注册3.1.1 全局组件注册3.1.2 局部组件注册 3.2 组件样式…

ffmpeg命令参数

主要参数 -i 设定输入流 -f 设定输出格式(format) -ss 开始时间 -t 时间长度视频参数 -vframes 设置要输出的视频帧数 -b 设定视频码率 -b:v 视频码率 -r 设定帧率 -s 设定画面的宽与高 -vn 不处理视频 -aspect aspect 设置横纵比4:3 或16:9 或1.333或…

软件项目管理 第三章软件项目的启动过程课后习题参考答案——主编:李冰、张桥珍、刘玉娥

第三章 软件项目的启动过程 课后习题参考答案 1.选择题 (1)乙方在项目初始阶段的主要任务不包含以下哪一项(D)。 A. 项目分析 B. 竞标 C. 合同签署 D. 合同管理 (2)项目章程中不…

Spring Boot Configuration Annotation Processor not configured 问题解决

目录 问题抛出: ConfigurationProperties 问题抛出: 进行Spring Boot配置文件部署时,发出警告Spring Boot Configuration Annotation Processor not configured,但是不影响运行。 不过有时候springboot项目出错了并且排除了所有…

【裸机开发】中断系统 —— 中断向量表(设置中断向量偏移的原因)

之前的LED驱动不存在中断,也就不包含中断的初始化。如果程序包含了中断,我们应还需要初始化哪些内容?要解决这个问题,我们需要先了解一个中断系统包含了哪些内容。 ① 中断向量表:描述中断对应的中断服务函数&#xf…

C++笔记之stack、queue、priority_queue、deque

code review! C笔记之stack、queue、priority_queue、deque 文章目录 C笔记之stack、queue、priority_queue、deque一.cppreference介绍1.stack2.queue3.priority_queue4.deque 二.容器适配器三.stack详解1.创建一个不包含任何元素的 stack 适配器,并采用默认的 de…

Debian 12中再次安装R软件

上篇博客(地址:https://blog.csdn.net/my1114/article/details/131347147?spm1001.2014.3001.5501)中所述的,在Debian12中按默认方式编译安装R软件,有一定的局限性。 如下图所示: 因此,本…

Redis入门(2)-字符串

String是Redis最基础、最常见的类型,string类型的value中可存放任意数据,包括数值型、二进制的图片、音频、视频、序列化对象等。一个String类型的value最大是512M. 1.getset k v 若key存在返回之前的值,若不存在返回nil 2.strlen key 返…

【面试】标准库相关题型(三)

文章目录 1. unordered_map底层实现原理1.1 散列表1.2 STL 中的 unordered_map 的实现1.3 unordered_map 2. 迭代器底层实现原理及种类2.1 主要作用2.2 底层原理2.3 迭代器类型属性 3. 迭代器失效3.1 容器类别3.2 失效情况3.3 C11容器类别 4. STL容器的线程安全4.1 背景知识4.2…

Git分支使用方法

目录 前言 一、查看可用分支 二、创建新分支 三、切换到新分支 四、在新分支上进行工作 五、提交更改 六、切换回主分支 前言 分支是指在同一个代码仓库中的不同版本线。它们可以被用来同时开展不同的开发任务、修复bug或实现新功能,而不会影响到主要的代码…

【数据结构】栈和队列的应用

🎇[数据结构]栈和队列的应用🎇 🌟 正式开始学习数据结构啦~此专栏作为学习过程中的记录🌟 文章目录 🎇[数据结构]栈和队列的应用🎇🍰一.栈在括号表达式中的应用🚀1.原理&#x1f680…

Linux1.基础指令(上)

1.Linux系统可创建多个用户。 2.创建用户:adduser 用户名 设置密码:passwd 用户名 (系统会提示再次输入密码,注意密码不回显)。 3.删除用户首先要在root权限下,输入指令:userdel -r 用户名。 4.ls指令 ls -a(显示所有文件,包括隐藏文件) :…

【软件设计师暴击考点】计算机组成原理与体系结构高频考点暴击系列【二】

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:软件…

【P3】kali 最强渗透工具 - metasploit(安装配置及使用教程详解)

文章目录 一、metasploit 是什么?二、metasploit 攻击 windows 操作系统三、metasploit 攻击永恒之蓝全流程四、metasploit 攻击成功后能做什么4.1、操作步骤4.2、攻击示例 五、msfvenom 绕过杀毒软件技巧5.1、捆绑木马5.2、加壳:压缩壳、加密壳5.2.1、T…

分片和一致性哈希

在设计大规模分布式系统时,你可能会遇到两个概念——分片(sharding)和一致性哈希(consistent hashing)。虽然我在网上找到了很多关于这些术语的解释,但它们让我感到有些困惑。我觉得分片和一致性哈希本质上…

Web网页制作-知识点(2)——常用文本标签、列表标签、表格标签、Form表单、块元素与行内元素(内联元素)

目录 常用文本标签 列表标签 有序列表 无序列表 定义列表 表格标签 表格组成与特点 表格标签 表格属性 ​​​合并表格单元格 Form表单 属性说明 表单元素 文本框 密码框 提交按钮 块元素与行内元素(内联元素) 内联元素和块级元素…

Flink JdbcSink.sink源码解析及常见问题

文章目录 源码入口我们看下flush方法干了什么flush方法至此走完了,但是什么时机写入的数据呐?补充总结: 常见问题1. 为什么会出现JdbcSink.sink方法插入Mysql无数据的情况?2. JdbcSink.sink写Phoenix无数据问题 参考 基于Flink 1.…

设计模式之组合模式笔记

设计模式之组合模式笔记 说明Composite(组合)目录组合模式示例类图菜单组件抽象类菜单类菜单项类测试类 说明 记录下学习设计模式-组合模式的写法。JDK使用版本为1.8版本。 Composite(组合) 意图:将对象组合成树型结构以表示“部分-整体”的层次结构。Composite使得用户对单…

Linux网络-网络层IP协议

目录 IP协议 计算机网络分层 IP协议头格式 IP数据报 - 数据分片 数据报为什么要分片? 数据报分片是什么? 如何做到IP数据报分片? 分片demo示例 并不推荐分片,能不分片则不分片。 网段划分 前置了解 网络号和主机号 为…