自动曝光算法(第一讲)

这篇具有很好参考价值的文章主要介绍了自动曝光算法(第一讲)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

序言

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

介绍

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

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

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

自动曝光算法(第一讲),isp

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图的亮度:当前raw图的亮度=当前环境的环境光*当前的曝光值

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

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

10ms 1.5x

自动曝光算法(第一讲),isp

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

自动曝光算法(第一讲),isp

目标亮度:预设一个值或者一组值,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范围内,亮度达到预期。

仿真代码

待续……文章来源地址https://www.toymoban.com/news/detail-740482.html

到了这里,关于自动曝光算法(第一讲)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++Primer——第一讲

    重制C++Primer 目录 一、第一个程序 二、代码  二、题目 我们会从一个C++程序开始,这里默认您已经安装了Dev-C++或其他的IDE软件。 下面这串代码是可以输出“Hello world”的代码。  如果要运行它,就应该先将它编译成程序。先打开IDE,新建一个文件(Ctrl+N): 接着,您可以复

    2024年02月08日
    浏览(39)
  • 第一讲:入门知识笔记

    python 变量无类型,但值里面有类型。 动态类型语言(pythonjavascript) Subtraction reverse 3-digit number 判断两个浮点数是否相等不能直接用== 运算优先级 operation precedence not and or 计算闰年 交换变量 name variable google.github.io/styleguide/pyguide.html python中的权限控制access control 默认成员变量

    2024年01月25日
    浏览(40)
  • JavaSE面试深度剖析 第一讲

    目录 JavaSE面试深度剖析 第一讲 Java面向对象 1 面向对象都有哪些特性以及你对这些特性的理解 2 访问权限修饰符 public、private、protected, 以及不写(默认)时的区别 3 如何理解 clone 对象       本文章向大家介绍JavaSE面试深度剖析 第一讲,主要内容包括其使用实例、应用技巧

    2024年02月06日
    浏览(41)
  • 第一讲:BeanFactory和ApplicationContext接口

    BeanFactory是ApplicationContext的父接口,是真正的Spring核心容器,主要的ApplicationContext实现都【组合】了他的功能。 首先先看一下BeanFactory的接口定义: 表面上只有getBean功能,实际上控制反转、基本的依赖注入、直至Bean的生命周期的各种功能,都由他的实现类提供, 例如:Defau

    2024年02月12日
    浏览(34)
  • 蓝桥杯---第一讲 递归与递推

    本篇博客主要打卡记录博主学习蓝桥杯C++AB组辅导课的习题第一章节的题目。 这一道题主要考查 dfs 算法,然后这一道题就是以位置来进行 搜索 当搜索到最后一个位置的时候就可以 收获结果 然后考虑枚举到的位置 可以选择 选 或者 不选 这一道题目 就是枚举每一个位置,然

    2024年02月08日
    浏览(37)
  • 「网络编程」第一讲:初识网络_网络基础1

    「前言」文章是关于网络编程方面的,今天内容大致是网络基础,讲解下面开始! 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、计算机网络背景 1.1 网络发展 1.2 认识 \\\"协议\\\" 二、网络协议初识 2.1 协议分层 2.2 OSI七层模型 2.3 TCP/IP五层(或四层

    2024年02月08日
    浏览(56)
  • 第一讲使用IDEA创建Java工程——HelloWorld

            为了能够让初学者更快上手Java,不会像其他书籍或者视频一样,介绍一大堆历史背景,默认大家已经知道Java这么编程语言了。本专栏只会讲解干货,直接从HelloWord入手,慢慢由浅入深,讲个各个知识点,这些知识点也是目前工作中项目使用的,而不是讲一些老的

    2024年02月11日
    浏览(37)
  • 【Numpy第一讲】如何生成矩阵,如何对矩阵进行加减乘除

    该博客为本人自学自编的笔记,主要介绍了Numpy部分用处,这是第一篇Numpy文章 Numpy是一个强大的Python库,用于进行科学计算,它可以处理矩阵和很多数据。 多维数组对象 :在Numpy中,最核心的部分就是它的多维数组对象,或者叫做ndarray。这个数组允许你存储同类型的数据集

    2024年04月10日
    浏览(39)
  • 7月第一讲,LLaMA模型指令微调 字节跳动多模态视频大模型

    Valley: Video Assistant with Large Language model Enhanced abilitY 大家好,我是卷了又没卷,薛定谔的卷的AI算法工程师「陈城南」~ 担任某大厂的算法工程师,带来最新的前沿AI知识和工具,包括AI相关技术、ChatGPT、AI绘图等, 欢迎大家交流~。   近期基于LLaMA微调的模型有很多,Alpaca,V

    2024年02月16日
    浏览(40)
  • Docker第一讲 Docker容器间/容器与宿主机ping不通解决

    通过容器ip访问 容器重启后,ip会发生变化。通过容器ip访问不是一个好的方案。 通过宿主机的ip:port访问 通过宿主机的ip:port访问,只能依靠监听在暴露出的端口的进程来进行有限的通信。 通过link建立连接(官方不推荐使用) 运行容器时,指定参数link,使得源容器与被链接

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包