当前位置: 首页 > news >正文

自动曝光算法(第一讲)

序言

失业在家无事,想到以后换方向不做自动曝光了,但是自动曝光的工作经验也不能浪费了,准备写一个自动曝光的教学,留给想做自动曝光的小伙伴参考。笔者当时开发自动曝光没有按摄影的av+tv=ev=bv+sv公式弄,而是按正确的增益=目标亮度/当前亮度*当前增益的公式去开发。

介绍

自动曝光算法的目的:已知当前raw图亮度、当前曝光时间、当前增益和目标亮度,当环境光发生变化的时候,是通过控制增益、曝光时间和光圈使raw图的亮度,保持在目标亮度附近。

下面开始对上面的话进行解释:

raw图:r gr gb b格式的图,借鉴rgb图,raw图在数据上可以看成一个mxnx4的图片

raw图的亮度:将全图的r gr gb b的像素值分别累加后除以每个通道像素点的个数求平均后按yuv计算公式算。

r_avg=r_sum/r_num

gr_avg=gr_sum/gr_num

gb_avg=gb_sum/gb_num

b_avg=b_sum/b_num

y=(0.299 * r_avg+ 0.2935 * (gr_avg+ gb_avg) + 0.114 * b_avg)

曝光时间和增益:曝光时间和增益可以看成一个乘法系数,该乘法系数不可以为0,因为硬件存在最小曝光时间(1行)和最小增益(1x),这个系数是作用在整个raw图上的,如果该系数发生变化,raw图的每个值发生同样倍数的变化。

举个例子说明曝光时间和增益变动的影响

假设当前亮度下获取到一张raw图,该图的每个点的像素如下,已知当前的曝光时间和增益分别是10ms和1.5x,下面我们要给sensor下发一个新的曝光参数,新的曝光参数为曝光时间10ms和增益3x。对比前后2组曝光参数,可以发现,增益从1.5x变成了3x,扩大了2倍。因此如果当前raw图的像素值没有饱和,每个点的像素也扩大了2倍。

10ms 1.5x

10ms 3x(如果是20ms 1.5x 每个像素也是变成2倍)

目标亮度:预设一个值或者一组值,raw图的亮度要在这个值附近,一般是±5%范围内。

当环境光发生变化的时候,是通过控制增益、曝光时间和光圈使raw图的亮度,保持在目标亮度附近。

假设当前环境光亮度为c,曝光时间和增益提供的系数为w,当前的raw图的亮度为cur_y,目标亮度为tar_y。

假如tar_y/cur_y在0.95到1.05范围内,则认为当前曝光没问题。

假如tar_y/cur_y不在0.95到1.05范围内,且tar_y/cur_y=w2;则需要将曝光时间和增益提供的系数为w变成w*w2,当曝光值(曝光时间、增益和光圈(虽然我们这里没用到光圈)的积叫做曝光值)从w变成w*w2,画面亮度也要*w2,cur_y->cur_y*w2。tar_y/(cur_y*w2)=w2/w2=1,1在0.95到1.05范围内,亮度达到预期。

仿真代码

待续……

相关文章:

自动曝光算法(第一讲)

序言 失业在家无事,想到以后换方向不做自动曝光了,但是自动曝光的工作经验也不能浪费了,准备写一个自动曝光的教学,留给想做自动曝光的小伙伴参考。笔者当时开发自动曝光没有按摄影的avtvevbvsv公式弄,而是按正确的增…...

QStandardItemModel,setData和setItem区别

背景: model存储数据,用于同步view显示。数据节点全部是item。对象树结构。但是一些常用的函数的特征和用法,手册中没有提及太多,于是记录备忘。 主要包括: setRowCount,setColumnCount setItem&#x…...

应用出海新福祉,融云助IM社交迅速对齐海外用户体验

对于互联网业务而言,贴近年轻用户的创新是永恒的话题。近期,一种新的社交方式悄悄地在年轻人中流行开来,这就是“猫鼠游戏”。关注【融云全球互联网通信云】了解更多 玩法可以说是我们熟悉的“躲猫猫”游戏升级版,不同之处在于&a…...

64T存储松下mov和索尼mp4文件变0字节恢复案例

64T存储松下mov和索尼mp4文件变0字节恢复案例 小型入门的小NAS凭借超市的性价比在各行业中开始流行,可以通过搭配普通SATA硬盘就可以完成阵列上线,部署也很简单,一根网线就搞定。我们看一个影视公司64T小NAS存储比较奇怪的恢复案例。 故障存…...

【C/C++】 常量指针、指针常量、指向常量的常指针

const修饰指针的三种情况 int main() {int a 10;int b 10;//常量指针//const修饰的是int,指针指向可以改,指针指向的值不可以更改const int * p1 &a; p1 &b; //正确//*p1 100; 报错//指针常量//const修饰的是指针,指针的值&am…...

容斥原理,多步容斥

容斥意义法 设计状态表示容斥的过程。比较简单的容斥题目一般可以容斥意义。 如果我们要求方案数的话,通常情况下我们的把限制视为两个方面,一方面是总限制,一方面是对于每个物品的限制,这样设集合 S i S_i Si​表示满足总限制以及…...

vue(32) : win10创建vue2基础前端框架

vue2element-uiaxios 1.创建vue2项目 开发工具为HBuilderX 3.7.3 1.1.新建项目 1.2.普通项目-vue项目(2.6.10) 等待创建项目 2.安装element-ui组件 2.1右键左下角开始图标 2.2.cd进入项目目录,执行安装element-ui npm i element-ui -S 2.3.main.js引入配置 import {Paginat…...

如何制作一款资源网站app

简介 平时生活学习中我们会经常登录各种网站,比如看电影,看视频学习,找资料等等。有时想找到一个靠谱的网站,花了很长时间也找不到。我自己收集了很多好的网站,主要是找资源的,然后我做了一个导航app软件&…...

解决在Win7下运行一些老游戏花屏或色彩异常问题的方法

有一些喜欢回顾经典老游戏的玩家们,在目前最新的windows7的操作系统下,运行某些游戏会出现花屏,问题的原因是因为win7对这些游戏的DirectDraw不兼容,一种方法是改游戏配置文件,把游戏色彩8bit改成16bit,当然…...

使用vue3+vite+elctron构建小项目介绍Electron进程间通信

进程间通信 (IPC) 是在 Electron 中构建功能丰富的桌面应用程序的关键部分之一。 由于主进程和渲染器进程在 Electron 的进程模型具有不同的职责,因此 IPC 是执行许多常见任务的唯一方法,例如从 UI 调用原生 API 或从原生菜单触发 Web 内容的更改。 在 …...

家政APP开发服务同城预约维修接单管理系统软件小程序

家政服务小程序是一个基于移动端的家政服务平台,为用户提供方便快捷的家政服务。以下是小程序的主要功能: 1. 家政服务内容展示:商家可以在小程序中展示各种家政服务项目,如清洁、保洁、保姆、月嫂、钟点工等。用户可以浏览服务信…...

NOIP2023模拟8联测29 C. 蛋糕

NOIP2023模拟8联测29 C. 蛋糕 文章目录 NOIP2023模拟8联测29 C. 蛋糕题目大意思路code 题目大意 你现在得到了一个二维蛋糕,它从左到右可以分成 n n n 列,每列高为 a i a_i ai​ 。对于每一列,又可以从下到上分为 a i a_i ai​ 块&#x…...

echarts的图表立体感——实现立体柱状图和立体饼图的详细教程

😂博主:小猫娃来啦 😂文章核心:使用echarts实现立体柱状图和立体饼图的详细教程 文章目录 简单介绍立体柱状图和立体饼图环境配置实现立体柱状图实现立体饼图总结 简单介绍立体柱状图和立体饼图 立体柱状图和立体饼图是数据可视化…...

解决VSCode使用SSH远程连接时无法指定用户名的问题

Windows 11自带OpenSSH客户端,和VSCode配合得很好,没有这个问题。 今天要说的是旧版本Windows 7/8/10系统遇到的问题。 PS: Windows 7可以运行的最后版本是VSCode 1.80.2 由于Windows 7/8/10没有自带的OpenSSH客户端,但可以调用MSYS环境下的…...

Vue Camera是什么,如何用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一、Vue Camera是什么? Vue Camera是一个基于Vue.js的相机组件库,…...

ORANGE室内高尔夫—韩国室内模拟高尔夫原装进口真实体验身临其境

ORANGE室内高尔夫—韩国室内模拟高尔夫 真实体验 身临其境 室内高尔夫的产品优势: 1. 实际高尔夫球场的限制:室内高尔夫可以弥补室外高尔夫球场数量有限的问题,使得更多人能够享受高尔夫运动。 2. 天气和季节的限制:室内高尔夫可…...

【观察】从口袋到云端全景式AI创新,联想“全栈智能”再升级

知名科技杂志《连线》创始主编凯文凯利曾预测:“在未来的 100 年里,人工智能将超越任何一种人工力量,将人类引领到一个前所未有的时代。” 确实如此,犹如历史上蒸汽机、电力、计算机和互联网等通用技术一样,近20年来&a…...

linux 实用命令搜集 —— 筑梦之路

1. xargs命令 # 找出 / 目录下以 .conf 结尾的文件,并进行文件分类find / -name *.conf -type f -print | xargs file# 找出文件并打包find / -name *.conf -type f -print | xargs tar cjf test.tar.gz 2. 查找内存使用量较高的进程 ps -aux | sort -rnk 4 | he…...

08-Docker-网络管理

Docker 在网络管理这块提供了多种的网络选择方式,他们分别是桥接网络、主机网络、覆盖网络、MACLAN 网络、无桥接网络、自定义网络。 1-无桥接网络(None Network) 当使用无桥接网络时,容器不会分配 IP 地址,也不会连…...

【VS Code】使用 VS Code 登陆远程服务器上的 Docker 容器

以下命令默认已经构建了一个 Docker Image。 # 在服务器上启动 docker (-p 端口映射,用于后续的 ssh 连接) docker run -itd -v /mnt/mount/:/home -p 8124:22 --name container-name --gpus all image-name# 进入容器中 docker exec -it container-name /bin/bas…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

LangFlow技术架构分析

🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

Python爬虫(52)Scrapy-Redis分布式爬虫架构实战:IP代理池深度集成与跨地域数据采集

目录 一、引言:当爬虫遭遇"地域封锁"二、背景解析:分布式爬虫的两大技术挑战1. 传统Scrapy架构的局限性2. 地域限制的三种典型表现 三、架构设计:Scrapy-Redis 代理池的协同机制1. 分布式架构拓扑图2. 核心组件协同流程 四、技术实…...

解密鸿蒙系统的隐私护城河:从权限动态管控到生物数据加密的全链路防护

摘要 本文以健康管理应用为例,展示鸿蒙系统如何通过细粒度权限控制、动态权限授予、数据隔离和加密存储四大核心机制,实现复杂场景下的用户隐私保护。我们将通过完整的权限请求流程和敏感数据处理代码,演示鸿蒙系统如何平衡功能需求与隐私安…...

数据库优化实战指南:提升性能的黄金法则

在现代软件系统中,数据库性能直接影响应用的响应速度和用户体验。面对数据量激增、访问压力增大,数据库性能瓶颈经常成为项目痛点。如何科学有效地优化数据库,提升查询效率和系统稳定性,是每位开发与运维人员必备的技能。 本文结…...

JS设计模式(5): 发布订阅模式

解锁JavaScript发布订阅模式:让代码沟通更优雅 在JavaScript的世界里,我们常常会遇到这样的场景:多个模块之间需要相互通信,但是又不想让它们产生过于紧密的耦合。这时候,发布订阅模式就像一位优雅的信使,…...

【HTML】HTML 与 CSS 基础教程

作为 Java 工程师,掌握 HTML 和 CSS 也是需要的,它能让你高效与前端团队协作、调试页面元素,甚至独立完成简单页面开发。本文将用最简洁的方式带你掌握核心概念。 一、HTML,网页骨架搭建 核心概念:HTML通过标签定义内…...

Android Settings 数据库生成、监听与默认值配置

一、Settings 数据库生成机制​ ​传统数据库生成(Android 6.0 前)​​ ​路径​:/data/data/com.android.providers.settings/databases/settings.db​创建流程​: ​SQL 脚本初始化​:通过 sqlite 工具创建数据库文件…...

android关于pthread的使用过程

文章目录 简介代码流程pthread使用hello_test.cppAndroid.bp 编译过程报错处理验证过程 简介 android开发经常需要使用pthread来编写代码实现相关的业务需求 代码流程 pthread使用 需要查询某个linux函数的方法使用,可以使用man 函数名 // $ man pthread_crea…...