基于FPGA的自动曝光算法实现

news2025/2/24 23:41:42

1 概述

       在机器视觉中,自动曝光(Auto Exposure)是很多成像设备的必备功能。所谓自动曝光,就是根据环境或拍摄物体照明强度自动调节图像传感器的曝光时间,使输出图像的平均灰度(亮度)保持在一个合理范围,不产生过曝或欠曝现象。

       有一些CMOS图像传感器带有自动曝光功能,可直接使用。对于没有自动曝光功能的CMOS传感器,就需要在接收端设计开发相应的自动曝光算法,来动态控制CMOS的曝光时间。目前,很多CMOS传感器使用FPGA芯片作为图像接收端。

      本文介绍一种在FPGA中实现的自动曝光算法,具有原理简单、实时性高、响应快、收敛快的特点。

2 自动曝光算法

2.1 自动曝光原理

       自动曝光的算法有很多种,为了便于FPGA实现,从资源消耗和实时性的角度,可以选用2种原理相对简单的方法:灰度均值法和加权灰度均值法。

       首先,2种方法都需要设置一个图像的目标灰度均值Yt。

       灰度均值法是计算整幅图像的灰度(亮度)均值Y,即

Y = 整幅图像的像素灰度累加和÷像素数

       加权灰度均值法是将图像等分为N个区域,每个区域单独计算灰度均值Yi,并为每个区域的灰度均值赋予不同的权重系数Fi,最后加权得到整幅图像的灰度均值Y。其中

       显然,加权灰度均值法考虑了场景亮度的不均匀性,当较亮的像素点集中位于图像某些区域时,该种方法更具有优势。

       然后,将Y与Yt相比较,得出Yt-Y=∆Y ,然后计算出下一帧图像的曝光时间。

2.2 曝光时间调节步长

       自动曝光的曝光时间调节需要具备2个基本要求:快读响应和快速收敛。

       快速响应是指,曝光时间的调节使图像亮度的变化速度能尽可能跟上光照变化的速度。也就是图像亮度达到稳定的延迟时间短。

       快速收敛是指,当自动曝光接近结束时,图像亮度趋于稳定或在很小范围内波动时,曝光时间调节应迅速收敛,最终维持在1个稳定值。

       为了满足上述2个条件,设置一个最小灰度均值差∆Ymin,当|∆Y|≤∆Ymin 时,表示自动曝光收敛,无需进行曝光时间调节。

       默认CMOS输出图像的亮度与光照近似为线性关系。当|∆Y|>∆Ymin 时,已知当前帧图像的曝光时间为T,则曝光时间调节步长∆T采用了如下公式计算:

       当满足

       当满足

       下一帧图像的曝光时间即为Tn=T+∆T

3 FPGA实现

        经过比较,最终选择了加权灰度均值法在FPGA中予以实现,将图像等分为16个子块分别计算均值。为了降低资源消耗,将求灰度均值Y过程中的除法转换为乘法运算,求∆T 改为查找表方式实现。

       根据上述原理,所设计的FPGA模块支持自动曝光时间范围为1μs~1s,图像分辨率可调,并且可支持单时钟周期多像素点输入。

        针对4096*4096,8bit图像的自动曝光模块资源消耗如下:

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

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

相关文章

redis安装和数据类型

关系型数据库和非关系型数据库的区别: ①存储结构不同,关系型数据库是二维表格的方式,非关系型数据库是键值对的形式(文档、图文等); ②扩展方式不同,关系型数据库是纵向提升硬件性能&#xf…

嵌入式硬件中Printf函数的原理

作为嵌入式单片机领域小白的我,在查阅STM32、MSP432等串口通信的开发例程时, 总是能看到用 printf()这个函数来进行串口的发送功能。 目录 有关printf()函数需要解决的疑问: 一、printf&am…

34种ArcGIS常用操作技巧大汇总

概述 ArcGIS产品线为用户提供一个可伸缩的,全面的GIS平台。ArcObjects包含了许多的可编程组件,从细粒度的对象(例如单个的几何对象)到粗粒度的对象(例如与现有ArcMap文档交互的地图对象)涉及面极广&#x…

iperf3常用

iperf使用方法详解 iperf3是一款带宽测试工具,它支持调节各种参数,比如通信协议,数据包个数,发送持续时间,测试完会报告网络带宽,丢包率和其他参数。 安装 sudo apt-get install iperf3iPerf3常用的参数&am…

六、数据仓库详细介绍(ETL)方法篇

0x00 前言 上文我们把数据仓库类比我们人类自身,数据仓库“吃”进去的是原材料(原始数据),经过 ETL 集成进入数据仓库,然后从 ODS 开始逐层流转最终供给到数据应用,整个数据流动过程中,在一些关…

【JAVAEE】Java中的文件基础

目录 1.文件 1.1什么是文件 1.2文件路径 2.Java中操作文件 File类中常见的属性 File类中常见的构造方法 File类中常见的方法 3.文件内容的读写---数据流 按字节进行数据读InputStream FileInputStream 按字节进行数据写OutputStream 按字符进行数据读FileReader 按…

【JavaSE】Java基础语法(一)

文章目录 1. ⛄常量2. ⛄数据类型2.1 🌠🌠计算机存储单元2.2 🌠🌠Java 中的数据类型 3. ⛄变量的注意事项4. ⛄键盘录入5. ⛄标识符 1. ⛄常量 常量:在程序运行过程中,其值不可以发生改变的量。 Java中的常…

2023年我要在深圳考CPDA数据分析师认证,含金量如何?

CPDA数据分析师认证是大数据方面的认证,助力数据分析人员打下扎实的数据分析基础知识功底,为入门数据分析保驾护航。 帮助数据分析人员掌握系统化的数据分析思维和方法论,提升工作效率和决策能力,遇到问题能够举一反三&#xff0c…

opencv图像灰度化

图像灰度化就是将图像的亮度值(R,G,B)按照一定的方式映射到0-255之间的灰度值上,为了使图像看起来不那么单调,需要将图像的亮度值进行变换。下面简单介绍下 opencv中的灰度化函数: 1、先将图像的像素值转换为R,G,B三个…

手机也可以搭建博客?安卓Termux+Hexo搭建属于你自己的博客网站 - 公网远程访问

文章目录 1. 安装 Hexo2. 安装cpolar内网穿透3. 公网远程访问4. 固定公网地址 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章,在几秒内,即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并…

【Linux】信号集及相关函数(sigemptyset、sigfillset、sigprocmask)

目录 1、信号集2、自定义信号集相关函数3、sigprocmask函数函数解析代码举例 橙色 1、信号集 多个信号组成的一个集合称为信号集,其系统数据类型为 sigset_t 。 在 PCB 中有两个非常重要的信号集,一个称为“阻塞信号集”,另一个是“未决信号…

Charles 抓包工具下载安装及基础使用

在Charles抓包工具之前讲过了Fiddler抓包工具,在讲之前先来解决读者的该怎么读这两个单词( Charles 读:雀奥斯 和 Fiddler 读:非的了 ),下面进入正题,有使用过抓包工具的或者看过之前关于Fiddle…

leecode530—二叉搜索树的最小绝对差

leecode530 二叉搜索树的最小绝对差 🔎首先要知道二叉搜索树是有序的,补充一下二叉搜索树的相关概念。 🟠 对于 BST 的每一个节点 node,左子树节点的值都比 node 的值要小,右子树节点的值都比 node 的值大。 &#x1f…

数据分析笔记:基本概念,常用图表,报告大纲

1.数据分析 1.1定义 对数据进行分析。数据分析是为了提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。在实际工作中,帮助管理者判断和决策。 1.2步骤 数据分析的基本步骤包括明确思路,制定计划、数据收集、数据处理、数据分析、数据显…

chatgpt赋能Python-python_kanren

Python Kanren:一种强大的逻辑编程工具 Python Kanren是一种基于Python的逻辑编程工具,它可以帮助开发人员轻松地构建复杂的逻辑应用程序。如果您正在寻找一种可以帮助您更快地开发和测试逻辑代码的工具,那么Python Kanren绝对是一个不错的选…

MySQL 用户管理

目录 用户管理 用户 用户信息 创建用户 删除用户 修改用户密码 数据库的权限 给用户 注意:如果发现赋权限后,没有生效,执行如下指令: 回收权限 用户管理 如果我们只能使用 root 用户,这样存在安全隐患。这时…

有没有高清录制视频软件?如何录制清晰的视频?

案例:录屏画质模糊影响观看怎么办? 【我把我在电脑上的操作录制了下来,录屏虽然可以看清楚操作的步骤,但是画质比较模糊,看起来很不舒服。有没有什么方法可以录制清晰画质的视频?】 当今数字化时代&#…

Ubutun安装Anconda3

一、下载Anconda 方法一:官网下载 https://www.anaconda.com/download(比较费时) 可以点击右键复制地址 使用Wget下载 wget https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh方法 2:清华源 在清华大…

Shell运维实战2-条件判断与函数

目录 Shell 条件测试与比较脚本条件测试文本测试表达式字符串测试表达式整数二元比较操作符逻辑操作符区别总结 if 语句Shell 函数基础执行 Shell 条件测试与比较 脚本条件测试 # -f判断文件是否存在,如果存在返回真,反之为假 # 一下结构类似于三元运算…

Hadoop基础学习---5、MapReduce概述和WordCount实操(本地运行和集群运行)、Hadoop序列化

1、MapReduce概述 1.1 MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Had…