ISP——你可以从这里起步(二)
接上一篇,上一篇是原理篇,这一篇是实战篇,为了实现下面框图中的不完美ISP。
第一章 做一张RAW图自己用
不是所有的人都能获得raw图,即使获得了raw图也需要对应的sensor参数才能把它用起来,所以我找了一条野路子可以把任意一张.jpg、.bmp或.png图像做成raw图,这样就可以避免对设备的依赖。
ISP的pipeline正向使用可以把raw图解析成人眼适宜观看的rgb图像,把rgb图像沿着ISP的pipeline反着推导回去,也可以获得raw图,而且参数可调。
1.1. 挑选一张输入图像
我喜欢使用色卡,色卡图像没有复杂的线条,并且包含丰富的色块,所以pipeline的第一张测试图,我选择用色卡开始,fig.1是我挑选的测试图。
1.2. 模糊图像——锐化的反变换
采用高斯滤波,把fig.1模糊掉,效果如fig.2所示:
1.3. 加高斯噪声——降噪的反变换
挑选一个力度的高斯噪声,加到fig.2的图像上,得到的效果如fig.3所示:
1.4. 亮度调整——Gamma的反变换
gamma系数选择2.2,得到的效果如fig.4所示:
1.5. RGB域转到XYZ域——CCM的反变换
这步可能会有争议,毕竟CCM和一些相机参数有关,但是我现在没有相机参数,而我手里有标准RGB域和XYZ域互转的3x3矩阵,所以我选择把CCM转到XYZ域,得到的效果如fig.5所示:
1.6. 设置k系数——白平衡的逆变换
得到的效果如fig.6所示:
1.7. 拆成bayer模式——demosaic的逆变换
把RGB图按照byaer模式抽点,得到的效果如fig.7所示,图片中分方块是分辨率的问题,显示的分辨率过大matlab会出现这样的情况,全屏就可以了。
1.8. 加入椒盐噪声——坏点的反变换
加入椒盐噪声的效果如fig.8所示,图像中的块仍然是显示问题,全屏或者设置imshow函数的参数就能解决。
1.9. 加入偏置——black level的反变换
得到的效果如fig.9所示,这一步其实也可以忽略,因为原理很简单,且sensor参数会明确告知,省掉也不影响算法理解。
1.10. 保存图像
直接用save保存成.mat文件,不要用imwrite函数写成.bmp或者其他的格式的输出文件,因为.bmp格式的文件会压缩,压缩就意味着数据精度有一定的丢失,且用眼睛几乎看不出来,这样后面调试ISP的时候都不知道是在哪里丢失了精度。
具体代码可以参考input_to_raw.m
第二章 用做出来的RAW图调试ISP
有了raw图就可以进行ISP中每一步的调试了,现在要开始走正向的ISP了,先把刚才保存的.mat文件load进来。pipeline中的每个模块都写成了函数的形式,直接调用就可以,只是有些参数在函数里面,未使用传参统一管理。
2.1. Black Level
前面加了多少偏置还记得吧,减掉就可以了,得到的效果图如fig.10所示,块效应仍然是显示问题,全屏可以解决。
2.2. 坏点矫正
坏点矫正的原理见本专栏:坏点矫正,效果图如fig.11所示:
2.3. Demosaic
Demosaic的原理见本专栏:Demosaic,效果图如fig.12所示,边缘看起来似乎没有问题?这是因为这张色卡图的边缘很规整,测试不了复杂的边缘,所以调试一个ISP用一张图像就远远不够的,需要很多张图像。
2.4. 白平衡
白平衡的原理见本专栏:白平衡,效果图如fig.13所示,右下角的白色由fig.12中的偏粉色变成了白色,说明白平衡效果正常。
2.5. CCM
CCM的原理见本专栏:CCM和Gamma,效果图如fig.14所示,这个效果明显不正常,这说明即使我用的是标准的RGB和XYZ互转的矩阵,在加入了其他模块之后,也变不回原来的颜色了,需要用其他的方法做进一步的调整,或者可以考虑关闭input_to_raw.m里面的RGB转到XYZ域的功能。
2.6. Gamma
Gamma的原理见本专栏:CCM和Gamma,效果图如fig.15所示,CCM不正确,Gamma很难正确。
2.7. Denoise
Denoise的原理见本专栏:Denoise,效果图如fig.16所示,denoise函数内化了双边、导向双边和NLM共3个降噪算法,通过mode控制,目前使用的是双边降噪。
2.8. Sharpen
Sharp的原理见本专栏:sharpen,效果图如fig.17所示:
2.9. 总结
一个完整的ISP pipeline流程已经走完了,运行代码中的isp_basic.m就可以看见文章中的效果,能直接看出来的两个问题是CCM和降噪做的不好,CCM需要标定,也可以借助专业的软件Imatest或者是其他的软件对色卡做色差计算。降噪的问题是力度不够,但是在YUV域做很大的降噪会损失细节,可以考虑在RAW域增加一个降噪和后面的YUV域降噪相互配合。
不管怎么说,已经拥有了一个ISP的雏形,且刚需模块都在里面了,能够做的工作也变多了,接下来就是一步一步完善它,给每个模块用上更复杂更有效的算法,或者是增加更高级的模块获得更好的效果。
如果需要matlab代码可以从这里提取:代码链接。
相关文章:

ISP——你可以从这里起步(二)
接上一篇,上一篇是原理篇,这一篇是实战篇,为了实现下面框图中的不完美ISP。 第一章 做一张RAW图自己用 不是所有的人都能获得raw图,即使获得了raw图也需要对应的sensor参数才能把它用起来,所以我找了一条野路子可以把…...

Qt / Qt Quick程序打包的一些坑 (四)
【写在前面】 打包方法见 Qt / Qt Quick程序打包的方法。 这里是再次记录一些坑。 【正文开始】 直接进入正题: 在 Qt5 中,如果我们的 Qml 中使用了【Qt Shapes】模块,那么在打包的时候,会缺少Qt5QuickShapes.dll。 然后ÿ…...

《传统视觉算法在视觉算法中的地位及应用场景
一、引言 在计算机视觉领域的发展历程中,传统视觉算法扮演了至关重要的角色。尽管近年来深度学习算法在视觉任务中取得了巨大的成功,但传统视觉算法依然具有不可替代的地位。传统视觉算法通常基于数学模型和手工设计的特征,具有计算效率高、…...

老老实实干一辈子程序员是没出息的!这本证书你早该学!
一、程序员有没有必要学软考? 当然有,因为你不可能一辈子都是程序员。 你了解或者接触过30岁、35岁以上的程序员去向吗? 我毕业快十年了,当初正赶上互联网时代的浪潮,好几个学计算机的同学毕业后去了一线城市或者深…...

鸿蒙next版开发:相机开发-录像(ArkTS)
在HarmonyOS 5.0中,ArkTS提供了一套完整的API来管理相机功能,特别是录像功能。本文将详细介绍如何在ArkTS中实现录像功能,并提供代码示例进行详细解读。 录像功能开发步骤 1. 导入相关接口 首先,需要导入相机相关的接口&#x…...

闯关leetcode——3206. Alternating Groups I
大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/alternating-groups-i/description/ 内容 There is a circle of red and blue tiles. You are given an array of integers colors. The color of tile i is represented by colors[i]: colors[i…...

多个摄像机画面融合:找到同一个目标在多个画面中的伪三维坐标,找出这几个摄像头间的转换矩阵
搞算法,重要的是解决问题的思想,不要再局限于语言、框架、性能!!! 要解决的问题是:在某一个摄像头画面中,目标会被遮挡或者丢失,但在另外一个摄像机画面中,目标完整&…...

Three.js性能优化和实践建议
Three.js 是一个功能强大的 3D 引擎,当场景足够大的时候,就会出现卡顿的现象,首先要保证电脑的性能够用,然后看看下面方法,帮助你提高应用的运行效率。 1. 使用 stats.js 监视性能 在进行任何优化之前,首…...

C#入门 023 什么是类(Class)
什么是“类” 是一种数据结构 是一种数据类型 代表现实世界中的“种类” 构造器和析构器 析构器 析构器(Destructor)是一种特殊的成员方法,用于在对象被垃圾回收器(Garbage Collector, GC)回收之前执行清理操作。…...

一篇Spring Boot 笔记
一、Spring Boot 简介 Spring Boot 是一个用于创建独立的、基于 Spring 的生产级应用程序的框架。它简化了 Spring 应用的初始搭建和开发过程,通过自动配置等功能,让开发者能够快速地构建应用,减少了大量的样板代码和复杂的配置。 二、核心特…...

一生一芯 预学习阶段 NEMU代码学习(2)
接上回:一生一芯 预学习阶段 NEMU代码学习(1) 上次说到这里 static int cmd_c(char *args) {cpu_exec(-1);return 0; } 当输入c时,会执行:cpu_exec(-1); void cpu_exec(uint64_t n) {g_print_step (n < MAX_IN…...

《手写Spring渐进式源码实践》实践笔记(第二十章 实现简单ORM框架)
文章目录 第二十章 简单ORM框架实现背景技术背景基本概念工作原理优点缺点常见的ORM框架 业务背景 目标设计实现代码结构类图实现步骤 测试事先准备属性配置文件测试用例(selectOne)测试结果测试用例(selectList)测试结果 总结 第二十章 简单ORM框架实现 背景 技术背景 ORM&…...

AI技术赋能电商行业:创新应用与未来展望
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《热点时事》 期待您的关注 引言 随着科技的飞速发展,人工智能(AI)技术正逐步渗透到各行各业&a…...

windows 11编译安装ffmpeg(包含ffplay)
一、源码及安装包下载 1.1,ffmpeg源码包下载 下载地址:Download FFmpeg 1.2,mysys下载 下载地址:MSYS2 1.3,libx264源码包下载 下载地址:x264, the best H.264/AVC encoder - VideoLAN 二、软件安装 2.1&…...

系统启动时将自动加载环境变量,并后台启动 MinIO、Nacos 和 Redis 服务
服务器信息 服务器 IP:192.168.1.44服务器用户:changzhou用户密码:XXXXXXXX Nacos 数据库用户信息: 账号:cz_nacos密码:XXXXXXXX Nacos 内网地址:http://192.168.1.44:8848/nacos 账号&#x…...

[ACTF2020 新生赛]Upload 1--详细解析
信息收集 题目告诉我们是一道upload,也就是文件上传漏洞题目。 进入界面,是一个灯泡,将鼠标放在图标上就会出现文件上传的相应位置: 思路 文件上传漏洞,先看看有没有前端校验。 在js源码中找到了前端校验ÿ…...

power bi中的related函数解析
在Power BI中,RELATED函数是一种用于检索相关表中数据的函数。它用于在一个表中检索与当前行相关联的另一个表中的数据。 销售成本 [销售数量]*related(商品表[进价])...

目前区块链服务商备案支持的区块链技术类型
status"success"data1-name"比特币/Bitcoin/BTC"3-name"以太坊/Ethereum/ETH"875-name"超级账本/Hyperledger"5-name"柚子/EOS/EOS"6-name"恒星链/Stellar/XLM"1055-name"Quorum"7-name"莱特币/Li…...

CatBoost中的预测偏移和排序提升
在 CatBoost 中,预测偏移(Prediction Shift) 和 排序提升(Ordered Boosting) 是其关键概念和创新点。CatBoost 通过引入 排序提升 解决了梯度提升决策树(GBDT)算法中常见的 预测偏移问题&#x…...

python: postgreSQL using psycopg2 or psycopg
psycopg2 # encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 許可資訊查看:言語成了邀功的功臣,還需要行爲每日來值班嗎? # 描述: pip install --upgrade pip PostgreSQL database adapter for Python # pip install…...

从 MySQL 5.7 到 8.0:理解 GROUP BY 的新规则与实战优化20241112
🎯 从 MySQL 5.7 到 8.0:理解 GROUP BY 的新规则与实战优化 🔎 引言 随着 MySQL 的不断升级,从 5.7 到 8.0,不仅性能得到提升,其对 SQL 标准的严格执行也显著提高。GROUP BY 的行为变化就是一个典型例子。…...

npm完整发包流程(亲测可验证)
1. 准备工作 (1) 在npm官网上注册一个账号 (2) 注册成功之后,npm会发送一封邮件给你,点击邮件里面的链接,做确认关联操作(必需) 2. 创建自己的npm包 (…...

学习threejs,使用JSON格式保存和加载模型
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE toJSON()方法 二、&a…...

中国首部《能源法》正式问世,它的亮点有哪些呢?
2024年11月8日,《中华人民共和国能源法》经十四届全国人大常委会第十二次会议审议通过,正式出台,将于明年1月1日起施行。 中国首部《能源法》正式问世,它的亮点有哪些呢? 一、填补立法空白,完善能源法律体…...

【外包】软件行业的原始形态,项目外包与独立开发者
【外包】互联网软件行业的原始形态,项目外包与独立开发者 本科期间写的一些东西,最近整理东西看到了,大致整理一下放出来,部分内容来自其他文章,均已引用。 文章目录 1、互联网软件行业的原始形态2、项目订单ÿ…...

工程数学线性代数(同济第七版)附册课后习题答案PDF
《线性代数附册 学习辅导与习题全解》是与同济大学数学科学学院编《工程数学 线性代数》第七版教材配套的教学辅导书,由同济大学作者团队根据教材内容和要求编写而成。本书在《工程数学 线性代数》第六版附册(即辅导书)的基础上修改而成。全书…...

【Ubuntu24.04】部署服务(基础)
目录 0 背景1 设置静态IP2 连接服务器3 部署服务3.1 安装JDK3.2 下载并安装MySQL8.43.2.1 从官网下载 APT Repository 配置文件3.2.2 安装 MySQL8.43.2.3 配置远程连接 3.3 下载并配置Redis3.4 上传jar包并部署应用3.5 开放端口 4 总结 0 背景 在成功安装了Ubuntu24.04操作系统…...

Linux符号使用记录
~ 账户 home 目录,如果是 root 账户就是 /root . 当前目录 .. 上层目录 | 管道符 & 后台工作,放在完整指令列的最后端,表示将该指令列放入后台中工作。 > 输出重定向,重新…...

初阶C++之C++入门基础
大家好!欢迎来到C篇学习,这篇文章的内容不会很难,为c的引入,c的重点内容将在第二篇的文章中讲解,届时难度会陡然上升,请做好准备! 我们先看网络上的一个梗:21天内⾃学精通C 好了&am…...

ODOO学习笔记(7):模块化架构(按需安装)
一、Odoo模块化架构概述 Odoo是一个功能强大的企业资源规划(ERP)系统,其模块化架构是它的核心优势之一。这种架构允许系统通过添加、移除或修改不同的模块来灵活地适应企业的各种业务需求。 核心模块与自定义模块: Odoo本身带有一…...