ISP流程介绍(Raw格式阶段)
一、ISP之DPC
DPC(Defective Pixel Correction)也就是坏点矫正,在sensor接收光信号,并做光电转换之后。
这一步设计的意义在于:摄像头sensor的感光元件通常很多会存在一些工艺缺陷缺陷,让图像上某些像素无法正常收集到需要的光信号,导致图像出现明显高光或者死黑像素点。
通常的作法,可以是sensor厂商检测标定出这些坏点,然后直接矫正。也可以是拍摄图像之后,通过特定算法进行直接软件矫正。
看到已经有不少小伙伴写过这方面实现,所以详细实现可以参考:https://zhuanlan.zhihu.com/p/392906069
二、ISP之BLC
BLC(Black Level Correction)也就是暗电流矫正,本质上来说,isp需要做这一步的原因也是因为硬件缺陷。
主要是因为感光元器件和光电转换之类器件在输入光强度为0,也就是环境光线全黑的情况下,依然会有电压输出,引起结果图像实际像素值大于0,导致图像出现异常。
最简单的做法:在实验室全黑环境下,拍摄一张全黑的raw图像,分别计算图像rggb通道平均值并保存,实际拍图时候,每张图像的rggb通道都减去对应的平均值,并归一化得到矫正之后图像。
同样的,这类详细介绍,也有很多小伙伴做过了,我这里不做详细展开了,细节可以参考:https://zhuanlan.zhihu.com/p/386487708
三、ISP之LSC
LSC(Lens Shading Correction)也就是镜头阴影矫正,常规意义上来说,这一步也可理解为硬件缺陷导致的,本质上是由于镜头光学特性引起的。
整体上这种缺陷又可以分为两类:
1、Luma shading:镜头从中心到边缘逐渐出现了能量衰减,导致结果图像呈现中心亮四周黑的现象。
2、不同颜色的光折射率不同,白光经过镜头到成像sensor时候,由于折射率问题,会导致不同颜色光落到不同位置上,引起偏色。
最简单暴力的矫正方法:将输入图像平均分成24x24之类的块,默认中心块的亮度和颜色为gt,将其他块的亮度和颜色直接往中心块靠齐。矫正前和矫正后图像可以参考如下图片。
需要特别注意的是,本身来说,核心缺陷在于中心进光量远大于边角,这一步虽然可以亮度/颜色强行修正,但是必然出现噪声放大和缓解不了解析力不足的缺陷,
边角去噪可以在继续牺牲解析力情况下,缓解放大后的边角噪声,但是边角解析力在不引入额外设备或者说叠多帧的条件下,那是基本没救了的。
下图分别为修正前和修正后图像对比:
同样的,这块的修正细节,也有很多小伙伴讲过了,大家可以参考文章:https://zhuanlan.zhihu.com/p/389334269, 上面截图也引用自这篇文章。
四、ISP-NR Raw
NR Raw(noise reduction for Raw)也就是Raw域去噪,单纯的图像去噪算法在这几十年发展中,已经有了无数种,简单按类别来分,就有简单空域滤波(比如高斯),考虑像素值相识性(如双边),变换域去噪(如小波),考虑图像块内容结构相似性(如nlm,bm3d),加入时域信息(mfnr),基于聚类训练(如各类字典或者RAISR等),基于nn网络等。
去噪算法这块,有兴趣的后面慢慢折腾讲,这里展开讲的话,相对于isp来说,就有点太发散了。我们这里重点只讲下isp raw当前这个节点去噪的明显优势。
去噪之前,首先我们需要知道噪声产生原因:噪声一般是 sensor 接收光子,然后转化成 RAW 图的过程中产生的,通常由这几个阶段参数:
1、sensor接收到光粒子,光粒子激发电子时候,会产生 photon noise,该噪声服从泊松分布。
2、sensor本身发热产生暗电流,引入dark noise 或者热噪声,该噪声服从泊松分布。
3、电子产生电流再被模拟放大器放大信号时候,产生read noise噪声,属于加性噪声。
4、模拟信号进行ADC模数转换,得到离散照度值时候,会产生adc 噪声,也属于加性噪声。
总结下来,Raw图像上一共应该会有两类噪声:泊松和加性噪声。 设备在实验室特定环境下,拍摄特定场景并通过计算,可以直接估算出这两类的噪声参数,参考资料: 计算摄影:噪声模型与噪声估计_低照度 噪声的关系-CSDN博客 。
将这些噪声参数,引入去噪算法中,比如nlm之类权重计算时候,加入这些参数引导去噪,可以进一步改善算法去噪效果。更明显优势是:当我们有了sensor的噪声参数之后,就可以根据这些参数数据,生成符合该sensor噪声形态的无数噪声图像数据,这些噪声叠加到干净gt图像上之后,就有了无数训练数据对,nn去类算法最头痛的训练数据问题在这里得到解决,并且nn训练时候只需要学会对这类噪声形态去噪,泛化性要求明显降低,对去噪效果提升和模型小型化非常友好,参考资料:https://zhuanlan.zhihu.com/p/237734097 ,
但是如果Raw图像经过了后续的Demosiac/gamma/ltm之类操作之后,那么噪声形态会被严重破坏,导致无法估算sensor的噪声参数。所以后续阶段上做去噪,不止无法使用噪声参数这个先验信息,还将面对更复杂的噪声形态。
五、ISP之AWB
AWB(Auto White Balance)也就是自动白平衡,该模块存在的原因在于,人眼本身拥有视觉矫正功能,它可以在不同光源情况下,还原识别出物体本身的颜色。
但是sensor没有这个能力,光源变化产生的颜色变化,会对sensor带来一样的变化影响,不同色温环境下,拍出来的图像颜色会随着色温变化而变化(如暖色温情况下,排出的结果图会偏红)。
自动白平衡就是给sensor加上人眼的视觉矫正功能,简单实现来说,就是计算出当前场景的偏色情况,然后方向补偿,将偏色强行拉回到正常颜色上。最暴力的做法,在需要矫正的环境光线下拍一张灰卡,灰卡在实际场景上拍摄出来的偏色层度,就是WB需要反向补偿矫正的强度。
如下图,左边为矫正前,右边为矫正后:
AWB也是发展了若干年了,很多大佬们已经详细讲解过很多了,细节我这里也略过了,后面有兴趣研究这块算法了再慢慢展开探索,感兴趣细节的小伙伴们,可以参考:https://zhuanlan.zhihu.com/p/395206555 等文章,如上展示图片也来自该文章。
六、ISP之Demosaic
Demosaic也就是去马赛克,该模块存在价值,主要是为了节约sensor成本,理论上来说,将拍摄现实场景画面,使用三个sensor同时收集r,g,b通道信息,并保证r,g,b通道像素点对齐的话(其实不保证也应该没关系,配准算法后端对齐后也能用),就不需要Demosaic,直接可以得到rgb彩色图像了。比如使用如下结构的sensor设计(图片引用来自:https://zhuanlan.zhihu.com/p/170610956):
基于成本考虑,上图这种设计,通常用的不太多,常用的sensor设计如下图这样(图片引用来自:https://zhuanlan.zhihu.com/p/170610956):
使用如上这类sensor,可以只使用一个感光芯片,并且不需要考虑棱镜分光之类复杂设计,缺点嘛,就是图像质量差了亿点点,并且需要额外使用Demosaic之类技术进行通道插值,合成全彩色图像。
相关插值技术有很多,常见的比如:最近邻,双线性,色差/色比法,沿边缘方向加权等,最近发展也出现了很多nn Demosaic之类技术,效果挺好的,很多小伙伴也已经写过这方面细节了,可以参考:
https://zhuanlan.zhihu.com/p/170610956
https://zhuanlan.zhihu.com/p/510682315
等相关文章,这里就不展开了。等后面有兴趣研究这块技术时候,在单独慢慢整理。
七、小结
经过如上六步,图像信息完成从收集光子激发电流 ,到电流转换为离散照度值(Raw图像数据) ,再到RGB彩色图像的转换,Raw图像上相关操作基本到此结束。
相关文章:
ISP流程介绍(Raw格式阶段)
一、ISP之DPC DPC(Defective Pixel Correction)也就是坏点矫正,在sensor接收光信号,并做光电转换之后。 这一步设计的意义在于:摄像头sensor的感光元件通常很多会存在一些工艺缺陷缺陷,让图像上某些像素无法正常收集到需要的光信号…...
Codeforces Round 1023 (Div. 2)
Dashboard - Codeforces Round 1023 (Div. 2) - Codeforces 一个构造问题,我把最大的数放在一个数组,其余数放在另一个数组,就能保证gcd不同 来看代码: #include <bits/stdc.h> using namespace std;int main() {int t;ci…...
按位宽提取十六进制值
需求:给出一个十六进制值,要求提取high和low位之间的值。比如16ha0f0,这是一个16bit宽的十六进制数0xa0f0,提取[15:12]范围内的值。 def extract_bits(value, high, low):"""从 value 中提取 [high:low] 位的值:p…...
Android设备序列号获取方式全解析
Android设备序列号获取方式全解析 前言 在Android开发中,获取设备序列号(SN)是设备管理类应用常见的需求。但不同厂商设备获取方式存在差异,且Android系统版本升级也带来了API变化。本文将系统梳理7种主流序列号获取方式&#x…...
Spring框架(1)
Spring框架是Java企业级开发中最受欢迎的框架之一,它通过简化开发流程、降低耦合度,让开发者能够更专注于业务逻辑的实现。本文将带你了解Spring框架的核心概念和基本用法。 一、Spring框架简介 Spring是一个轻量级的开源Java开发框架,由Ro…...
软件安全(二)优化shellcode
我们在上一节课中所写的shellcode,其中使用到的相关的API是通过写入其内存地址来实现调用。这种方法具有局限性,如切换其他的操作系统API的内存地址就会发生变化,从而无法正常调用。 所谓的shellcode不过是在目标程序中加一个区段使得程序可…...
前端使用腾讯地图api实现定位功能
1.配置key 申请地址: https://lbs.qq.com/dev/console/key/manage 2.在项目中引入jssdk <script type"text/javascript" src"https://apis.map.qq.com/tools/geolocation/min?keykey&referermyapp"></script>使用 const g…...
单片机-STM32部分:10、串口UART
飞书文档https://x509p6c8to.feishu.cn/wiki/W7ZGwKJCeiGjqmkvTpJcjT2HnNf 串口说明 电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种: TTL电平:3.3V或5V表示1&am…...
STM32外设-串口UART
STM32外设-串口UART 一,串口简介二,串口基础概念1,什么是同步和异步/UART与USART对比2,串行与并行3,波特率 (Baud Rate)4,数据帧 (Data Frame)5,TX 和 RX 三,硬件连接1,u…...
《工业计算机硬件技术支持手册》适用于哪些人群?
《工业计算机硬件技术支持手册》于2024年出版,主要讲当前正在应用的最新计算硬件技术。包括计算机各种功能接口、扩展总线、各种国际通行的板型规格等等。书中引用的数据,全部来自国际行业技术规范,书中还融入了作者几十年的工作经验和操作技…...
element-ui时间线样式修改
element-ui时间线样式修改 前两天公司给了一个需求 要求如下图所示 需求是时间在步骤条左边,看了element-ui的文档 发现并没有参数可以设置时间在步骤条的左边 那没办法 只能自己想一想办法了 首先想到的是用样式直接改变 活不多说 直接搞 第一步 选中时间这个元素 发现了这个类…...
动态规划之背包问题:组合优化中的经典NP挑战
背包问题概念: 背包问题是一种经典的组合优化的NP问题,在计算机科学、运筹学等领域有着广泛的应用。 问题可以简单的描述为: 假设有一个容量为C的背包和n个物品,每个物品i都有重量w[i]和价值v[i]。目标是选择一些物品放入背包&…...
JavaScript 基础
JS概念 JS基础概念 JS是一种运行在客户端(浏览器)的编程语言, 实现人机交换结果 作用: 网页特效表单验证数据交互服务端编程(node.js) JS的组成 ECMAScript—javaScript语言基础Web APIs—(DOM: 页面文档对象模型)(BOM: 浏览器对象模型) JS书写 位置 内部: 写到< /body…...
Vibe Coding: 优点与缺点
如果你最近在开发圈子里,你很可能听说过这个新趋势"vibe coding"(氛围编程)。 我只能说我对此感受复杂。以下是原因。 优势 在构建新项目时,靠着氛围编程达到成功感觉很自由!但对于遗留代码来说情况就不同了,尽管也不是不可能。 实时反馈和快速迭代 Cursor(…...
小动物听力评价系统基本原理简析
小动物听力评价系统是用于评估小动物听力功能的专业设备,以下从系统组成、工作原理、评价方法等方面为你介绍: 一 系统组成 声音刺激模块:能产生不同频率、强度和类型的声音信号,如纯音、啭音、短声等,以刺激小动物的听…...
spark缓存-persist
存储级别指定 persist:可以通过传入 StorageLevel 参数来指定不同的持久化级别。常见的持久化级别有: MEMORY_ONLY:将 RDD 以 Java 对象的形式存储在 JVM 的内存中。若内存不足,部分分区将不会被缓存,需要时会重新计算…...
树初步 #1(插排串联 - 辽宁省2024CCPC)
树初步 数的基础内容可以看看树基础 - OI Wiki里面的讲解,对一些操作的基础概念介绍的很清楚; 下面直接来看例题: 插排串联 - 辽宁省CCPC 题目大意 给定一个n1个节点的有根数; 根节点(0号)是插座&…...
CDGP重点知识梳理(82个)
目 录 考点分布 考试要求 第一章 数据管理-5%...
shell脚本基础详细学习(更新中)
shell简单介绍 Shell不仅仅是充当用户与UNIX或者localhost交互的角色,还可以作为一种程序设计 语言来使用。通过Shell编程,可以实现许多非常实用的功能,提高系统管理的自动化水平。 如果有一系列经常需要使用的命令,把它存储在一…...
记录一下学习kafka的使用以及思路
下面这是kafka的依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-stream-kafka</artifactId></dependency> 我在学习的时候直接导入是没有导入成功的,我猜测大概的原因是我本…...
AT9880B北斗单模卫星定位SOC芯片
AT9880B是一款高性能北斗单模卫星导航接收机SOC单芯片,芯片集成射频前端和数字基带、北斗多频卫星信号处理引擎、电源管理功能。芯片支持接收中国北斗二号和北斗三号,支持接收B1I、B1C、B2I、B3I、B2a和 B2b等频点信号。 主要特性: 支持北斗…...
李沐《动手学深度学习》 | 多层感知机
文章目录 感知机模型《深度学习入门》的解释训练感知机损失函数的选择感知机的收敛定理:什么时候能够停下来,是不是真的可以停下来感知机的不足 多层感知模型案例引入隐藏层从线性到非线性单隐藏层-单分类案例多隐藏层 激活函数softmax函数溢出的问题 多…...
vue数据可视化开发常用库
一、常用数据可视化库 1. ECharts 特点:功能强大,支持多种图表类型,社区活跃。适用场景:复杂图表、大数据量、3D 可视化。安装:npm install echarts示例:<template><div ref"chart" c…...
CAN转ModbusTCP网关:破解电池生产线设备协议壁垒,实现全链路智能互联
在电池生产的现代工艺中,自动化和信息化水平的提高是提升产能、保障品质与安全的关键。CAN 协议作为一种广泛应用于汽车、工业控制等领域的串行通信协议,它以其高可靠性和强实时性而受到企业的青睐。而在众多工业通讯协议中,ModbusTCP作为一种…...
更新 / 安装 Nvidia Driver 驱动 - Ubuntu - 2
如果按更新 / 安装 Nvidia Driver 驱动 - Ubuntu-CSDN博客中的步骤操作后问题依旧,则查看过程中的提示信息。 如果发现有“Use sudo apt autoremove to remove them.”,则执行: #sudo apt autoremove #nvidia-smi...
技术分享 | 如何在2k0300(LoongArch架构)处理器上跑通qt开发流程
近期迅为售后团队反馈,许多用户咨询:2K0300处理器采用了LA264处理器核,若要在该处理器上运行Qt程序,由于架构发生了变化,其使用方法是否仍与ARM平台保持一致? 单纯回答‘一致’或‘不一致’缺乏说服力&…...
ubuntu 24.04 error: cannot uninstall blinker 1.7.0, record file not found. hint
最近在打python3.12的镜像,安装browser-gym的核心库,编译一个使用browswer agents的环境,然后出现了下面的问题: error: cannot uninstall blinker 1.7.0, record file not found. hint: the package was installed by debian.系…...
学习记录:DAY28
DispatcherController 功能完善与接口文档编写 前言 没什么动力说废话了。 今天来完善 DispatcherController 的功能,然后写写接口文档。 日程 早上:本来只有早八,但是早上摸鱼了,罪过罪过。下午:把 DispatcherContro…...
C# 的异步任务中, 如何暂停, 继续,停止任务
namespace taskTest {using System;using System.Threading;using System.Threading.Tasks;public class MyService{private Task? workTask;private readonly SemaphoreSlim semaphore new SemaphoreSlim(0, 1); // 初始为 0,Start() 启动时手动放行private read…...
html object标签介绍(用于嵌入外部资源通用标签)(已不推荐使用deprecated,建议使用img、video、audio标签)
文章目录 HTML <object> 标签详解基本语法与核心属性关键属性解析1. **data**2. **type**3. **width & height**4. **name** 嵌入不同类型的资源1. **嵌入图像**2. **嵌入音频**3. **嵌入视频**4. **嵌入 PDF** 参数传递与回退内容**参数(<param>&a…...
专题练习1
优化: 找101-200的质数: 开发验证码: 解密数字 抽奖 优化 彩票...
Uniapp编写微信小程序,使用canvas进行绘图
一、canvas文档: https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Tutorial 二、数据绘制(单位是像素): 1、绘制文本: 文字的长度超过设置的最大宽度,文字会缩在一起 ① 填充文本…...
Java高频基础面试题
Java高频基础面试题 Java基础 Java的特点是什么? 面向对象平台无关性(“一次编写,到处运行”)支持多线程自动内存管理(垃圾回收)安全性丰富的类库 JDK、JRE和JVM的区别 JDK (Java Development Kit): Java…...
U9C-SQL-采购订单视图
U9C-SQL-采购订单视图 SELECTpo.ID,CONVERT ( VARCHAR ( 10 ), po.CreatedOn, 23 ) AS 签订日期,org.Name AS 甲方,po.DocNo AS 单号,item.Code AS 料号,item.Name AS 品名,item.SPECS AS 规格,item.DescFlexField_PrivateDescSeg1 AS 图号,item.DescFlexField_PrivateDescSeg2…...
HTML字符串转换为React元素实现
HTML字符串安全转换为React元素的实现 一、背景介绍 介绍HTML字符串在Web开发中的常见场景。说明React中直接使用HTML字符串的局限性。提出将HTML字符串转换为React元素的需求。 二、首先必备的两个npm库:html-react-parser和dompurify 导入: pnpm i…...
全局异常未能正确捕获到对应的异常
自定义Validation验证器遇到的问题 抛出的异常没有能被指定的TaskValidException.class方法拦截到。故写这个原因 全局异常拦截只能拦截相同的异常。只能通过解析转入自定义的异常。自定义的异常继承的异常要是一家子的。如TaskValidException和ValidationException。这样就能在…...
LeetCode 解题思路 47(最长回文子串、最长公共子序列)
解题思路: dp 数组的含义: dp[i][j] 是否为回文子串。递推公式: dp[i][j] s.charAt(i) s.charAt(j) && dp[i 1][j - 1]。dp 数组初始化: 单字符 dp[i][i] true,双字符 dp[i][i 1] s.charAt(i) s.charA…...
P11369 [Ynoi2024] 弥留之国的爱丽丝(操作分块,DAG可达性trick)
真的神仙题。感觉学到了很多。 题意: 给你一张 n n n 个结点 m m m 条边的有向图,点编号为 1 , 2 , … , n 1,2,\dots,n 1,2,…,n。每条边的颜色为黑色或白色。一开始所有 m m m 条边都是黑色的。 你需要进行 q q q 次操作,有两种操作…...
NAT穿越
概述 IPSec协商是通过IKE完成--->ISAKMP协议完成--->由UDP封装,源目端口均为500。 NAT--->NAPT,同时转换IP和端口信息。 对端设备会查验收到的数据报文中的源IP和源端口,其中源IP可以设定为NAT转换后的IP,但是源端口无法…...
不黑文化艺术学社首席艺术家孙溟㠭浅析“雪渔派”
孙溟㠭浅析“雪渔派” 何震 字主臣 ,长卿,号雪渔,安徽婺源(今江西)人,是明代著名的篆刻家和书法家,与文彭独树一帜,实现书法与刀法的统一。 云中白鹤 笑谭间气吐霓虹 边款 其篆刻吸…...
【Linux操作系统】第一弹——Linux基础篇
文章目录 💡 一. Linux的基本常识🪔 1.1 linux网络连接三种方式🪔1.2 虚拟机的克隆🪔1.3 虚拟机的快照🪔1.4 虚拟机的迁移和删除🪔1.5 vmtools工具 💡二. Linux的目录结构🪔2.1 Linu…...
“ES7+ React/Redux/React-Native snippets“常用快捷前缀
请注意,这是一个常用的列表,不是扩展提供的所有前缀。最完整和最新的列表请参考扩展的官方文档或在 VS Code 中查看扩展的详情页面。 React (通常用于 .js, .jsx, .ts, .tsx): rfce: React Functional Component with Export Defaultrafce: React Arro…...
selenium替代----playwright
安装 好处特点:这个东西不像selenium需要固定版本的驱动 pip config set global.index-url https://mirrors.aliyun.com/pypi/simplepip install --upgrade pippip install playwright playwright installplaywright install ffmpeg (处理音视频的)验证&#x…...
2025年社交APP安全防御指南:抵御DDoS与CC攻击的实战策略
2025年,社交APP的用户规模与业务复杂度持续增长,但随之而来的DDoS与CC攻击也愈发隐蔽和智能化。攻击者通过AI伪造用户行为、劫持物联网设备,甚至利用区块链漏洞发起混合攻击,对平台稳定性与用户数据安全构成严峻挑战。本文将结合最…...
PHP会话技术
第十六章-PHP会话技术 PHP会话技术是构建动态、个性化Web应用的核心机制之一,它通过跟踪用户在网站上的连续操作状态,实现了网页间的数据持久化交互。无论是电商平台的购物车信息保存、社交媒体的用户登录状态维持,还是表单数据的跨页面传递…...
QT聊天项目DAY10
1.封装redis操作类 头文件 #ifndef REDISMANAGE_H #define REDISMANAGE_H#include "Singletion.h" #include "GlobalHead.h"class RedisManage : public Singletion<RedisManage> {friend class Singletion<RedisManage>; public:~RedisMana…...
5.0.5 变换(旋转、缩放、扭曲)
WPF变换可以产生特殊效果,如平移、旋转、扭曲。 变换类 描述TranslateTransform沿着X轴和Y轴平移ScaleTransform 沿着定义的中心点缩放RotateTransform沿着定义的中心点旋转SkewTransform 扭曲元素MatrixTransfrom提供3x3矩阵,用于定义一个自定义变换 1…...
matlab转python
1 matlab2python开源程序 https://blog.csdn.net/qq_43426078/article/details/123384265 2 网址 转换网址:https://app.codeconvert.ai/code-converter?inputLangMatlab&outputLangPython 文件比较网址:https://www.diffchecker.com/text-comp…...
什么是直播美颜SDK?跨平台安卓、iOS美颜SDK开发实战详解
时下,尤其在社交、娱乐、电商等应用场景中,一个流畅且效果自然的美颜功能往往能直接影响用户的留存率和平台的营收。要实现这些效果,美颜SDK是核心工具。那么,什么是直播美颜SDK?它的功能有哪些?如何进行跨…...
大尺寸PCB如何重塑通信与新能源产业格局
在5G通信基站与新能源电站的机房内,一块块面积超过600mm600mm的PCB板正悄然推动着技术革命。作为电子设备的核心载体,大尺寸PCB凭借其高密度集成与复杂工艺,成为通信、能源等领域的“隐形功臣”。以猎板PCB为代表的厂商,凭借宽幅曝…...