ISP流程--去马赛克详解
前言
本期我们将深入讨论ISP流程中的去马赛克处理。我们熟知,彩色图像由一个个像元组成,每个像元又由红、绿、蓝(RGB)三通道构成。而相机传感器只能感知光的强度,无法直接感知光谱信息,即只有亮暗而没有颜色。因此,相机厂商通常在传感器前面加上滤色器来透过不同波段的光。想要得到彩色图像,理论上需要给每个像元加上RGB三个通道对应波段的滤色器。厂商们为了节约成本,通常采用颜色滤波器阵列CFA(Color Filter Array)给不同的像元按照阵列排序加上不同波段的滤色器。有了CFA,每个像元只记录对应波段的信息,为了获得完整彩色图像,我们在ISP流程中通过去马赛克处理给图像恢复色彩。因此,我们可以称去马赛克处理为灰色图像融合为彩色图像的神来之笔。
对于不同的CFA类型,成像器件像素单元接收的光强信号不同,相应的去马赛克方法也不一样,因此去马赛克方法与CFA的类型高度相关。
颜色滤波器阵列:
接下来,小彩将针对几个有代表性的CFA进行具体讨论。
RGGB:
RGGB型CFA也被称为Bayer阵列,是一种最典型、最成熟的CFA,可以透过红、绿、蓝三种光线。RGGB型CFA以2×2像元为基本单元,其中包括1个红光滤色器、1个蓝光滤色器和2个绿光滤色器。这样设计的传感器有50%的空间用于接收绿光,符合人眼对绿色更敏感的事实。虽说利用该CFA可以从绿色通道图像中获得较好的视觉细节,但是整体透光量不足,色彩信息损失较大,所以在暗光环境下拍摄表现较差。
RGBW:
RGBW型CFA由柯达公司于2007年提出,2012 年索尼便将其应用于自家图像传感器产品线中,2015 年华为 P8 相机也是采用索尼的 RGBW 传感器 IMX278。
RGBW型CFA取消了2×2基本单元中第二排的绿光滤色器,这使得所有光线都可以透过这个无滤色器的像元(称之为W像元)。这样设计的好处是可以增大透光量,增强暗光拍摄能力。同时,其缺点也较为明显,由于减少了一个滤色器,色彩信息损失较大,导致拍摄出来的图像色彩普遍较为寡淡,而且因为W像元透光量大而易于导致过曝。
RYYB:
2014年安森美公司提出RYYB型CFA,随后在2019年华为和索尼联合发布了RYYB产品。该CFA的2×2基本单元中的绿光滤色器被替换成黄光滤色器。由于黄光波峰介于绿光与红光之间,Y像元能同时接收红光与绿光的能量,从而使整体感光能力提升40%。
这样的设计在保持原有色彩信息的同时也能增大透光量,能适应各种拍摄场景。其缺点是在2×2基本单元中,两个黄光滤色器捕获的光能量远超红光和蓝光滤色器,而单个像元可接收的最大能量又是有限的 ,导致在一些光线强烈的场景,如果优先考虑 R、B 像元的可接收最大能量,那么 Y 像元接收的光能量就可能会溢出,造成过曝;如果优先满足 Y 像元的可接收最大能量,那么 R、B 像元就可能欠曝光,最终导致大光比环境下宽容度不够高。此外,RYYB型CFA需要对捕获的黄光进行红、绿分离,而这一步骤依赖于ISP流程中的校色算法,容易对最终图像产生偏色影响。
Others:
除了上面提到的三种类型,还存在如Diagonal Stripe,CYGM,Hirakaw,Lukac & Plataniotis等其它形式的CFA,这里不再赘述。
无论是哪种类型的CFA,都无法完美地解决目前摄影行业中的图像记录颜色信息问题。因此,CFA设计固然重要,而与之搭配的去马赛克算法也是图像记录颜色的重要环节。
传统去马赛克算法:
去马赛克的传统方法通常指插值法。早期研究人员利用最近邻插值、双线性插值、双三次插值和三次B样条插值等方法简单地预测图像像元中缺失的通道值。
这样简单地对缺省值做插值算法忽略了图像边缘结构与三个通道之间的相关性,这可能会导致生成的图像存在拉链效应、伪彩与图像模糊等问题。
后来,研究人员针对这个问题提出了基于色差一致性的插值算法,即在同一个图像中,两个相邻像素间对应通道的像素值差近似相等。色差插值算法可视为以色差一致性为约束条件的双线性插值。该算法虽从理论分析上更严谨,实际结果也更优秀,但仍存在着在图像高频部分表现不足的问题。
与色差插值法类似的色比插值法,是以“两个相邻像素间对应通道的像素值比近似相等”为约束条件,但该算法在像素值为0时无法使用。
色差插值法没有考虑到图像纹理方向,而是无差别使用邻域色差,故其效果在高频区的效果一般。为此,HA算法(Hamilton & Adams插值算法)于1997年被提出,其在色差插值法的基础上利用像元间的梯度来判断纹理方向(梯度小的地方被认为是纹理方向),进而使用这个方向的色差进行插值。该算法改进了普通色差插值法的缺点,在实际测试中取得了更高的PSNR。
2010年,Pekkucuksen和 Altunbasak进一步改进了色差插值法,提出基于梯度的无阈值算法(gradient based threshold free,GBTF) 。该方法利用色差梯度计算每个方向的权重,然后根据每个方向的权重,结合来自各个方向的估计对图像像素值进行插值。
2013年,Kiku等人在GBTF的框架上提出了残差插值(residual interpolation,RI)。该算法将GBTF法中的色差插值替换为残差插值(残差为最初采样到的像素值与初步估计值之间的差值),为广大学者提供了新的去马赛克思路。之后其他学者基于此方法提出了更多有建设性的去马赛克算法,例如最小化拉普拉斯残差插值算法(MLRI)、迭代残差算法(IRI)、自适应残差插值算法(ARI)等。
AI去马赛克算法:
目前,相关研究者提出了基于AI的ISP概念,即在传统的ISP流程中加入AI,而去马赛克、去噪等模块融入AI算法往往会有较好的效果提升。
自人们发现卷积神经网络在提取图像特征方面有良好表现后,众多研究人员尝试利用该类网络进行去马赛克处理。目前,热门的方法可以分为三类,即分段式去马赛克、端到端去马赛克和联合其它任务的去马赛克算法。
分段式去马赛克算法遵循传统去马赛克流程,通常是对Bayer阵列进行去马赛克处理。该类型算法先恢复采样率较高的G通道,并以此为先验信息,再推导出R、B通道的值。
端到端去马赛克算法指的是输入马赛克图像并直接输出重建后图像的算法。该类算法凭借其重建效率高、泛化能力强的优点获得众多研究人员的青睐。最早Syu等人根据董超提出的超分辨率卷积网络,提出了应用于去马赛克操作的DMCNN(Demosaicing-CNN)与DMCNN-VD(DMCNN-very deep)算法,不但可以轻松应对Bayer阵列,并且对于其它任何类型CFA也有优秀的图像重建效果。
除了利用简单卷积堆叠,研究人员还提出了采用残差网络、密集连接网络、U-Net网络与生成对抗网络等完成去马赛克处理的方法。
除上述的分段式去马赛克算法与端到端去马赛克算法外,考虑到通过CFA采集到的图像存在噪声大、采样率低的问题,还有相关研究人员提出了将去马赛克、去噪、超分辨等任务联合处理的方法。
小结:
去马赛克是ISP流程中的一项卓越技术,通过巧妙的插值和处理技巧,能够高效而准确地还原图像中缺失的彩色细节,为用户呈现出真实自然的色彩效果。
目前,去马赛克算法取得了长足的进展,无论是传统插值算法还是深度学习法,都有优秀的重建效果。在未来,可以进一步改进去马赛克算法的自适应能力,使其能够更好地适应不同的拍摄场景和光照条件。除此之外,我们还可以优化算法以提高实时性能,确保用户在拍摄和预览中能够获得高质量的彩色图像。
相关文章:
ISP流程--去马赛克详解
前言 本期我们将深入讨论ISP流程中的去马赛克处理。我们熟知,彩色图像由一个个像元组成,每个像元又由红、绿、蓝(RGB)三通道构成。而相机传感器只能感知光的强度,无法直接感知光谱信息,即只有亮暗而没有颜色…...
Objective-C语言的软件工程
Objective-C语言的软件工程探讨 引言 在软件工程的领域中,编程语言的选择是至关重要的。Objective-C,作为一种为苹果公司的macOS和iOS操作系统而开发的编程语言,凭借其灵活性和强大的功能被广泛应用于应用开发。然而,随着Swift等…...
Objective-C语言的语法糖
Objective-C语言的语法糖探秘 在编程语言的发展历程中,语法糖(Syntactic Sugar)是一个颇具趣味性和重要性的概念。它让编程的表达更加简洁直观,同时提高了代码的可读性和可维护性。Objective-C 作为一种面向对象的编程语言&#…...
设计模式中的代理模式
在Java中,代理模式(Proxy Pattern)可以通过静态代理和动态代理两种主要方式实现。 一、静态代理模式 在编译时就已经确定了代理类和被代理类的关系。 代理类和目标对象通常实现相同的接口或继承相同父类。 缺点是对于每个需要代理的目标对象…...
15个学习Python 的编程游戏网站
从小很多人都会在想,那些枯燥的教学课程要是全部变成游戏就好了,这样的话那期末成绩不得立即起飞了嘛?那对于编程很多人也有这样的想法,边玩边学就好了 这不已经有很多程序员开发了多款边玩边学的编程游戏供大家使用,…...
微信小程序实现拖拽盒子效果
要实现一个当前盒子高度由里面的盒子进行支配高度拖拽的效果 // wxml<view class"exmation-item" wx:elif"{{type4}}"> <view class"exmation-item-drag-box" id"drag-box"> <!-- 内容 --><view class"exm…...
Linux-蓝牙协议
SPP (Serial Port Profile): 串口协议(SPP)是一个蓝牙配置文件,允许设备通过蓝牙模拟传统的串行端口通信。它通常用于无线串口连接,允许设备如计算机和外设(例如打印机或条形码扫描器)之间进行数据传输。A…...
moviepy 将mp4视频文件提取音频mp3 - python 实现
DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” -------------------------------------------------------------…...
imageio 图片转mp4 保存mp4
目录 安装: imageio 图片转mp4 numpy 保存mp4 安装: FFMPEG: pip install imageio[ffmpeg] pyav: pip install imageio[pyav] imageio 图片转mp4 import glob import osimport cv2 import imageio from natsort import natsortedfrom PIL import …...
Postman接口测试04|批量运行测试用例、参数化、Mock Server、Cookie鉴权、Newman生成测试报告
目录 十一、Postman批量运行测试用例 十二、实现数据驱动(也称参数化) 1、csv文件 1️⃣编辑csv文件 2️⃣更新参数的值 3️⃣修改测试脚本和断言 5️⃣批量运行测试用例 2、Json文件 1️⃣编辑Json文件 2️⃣其他操作和处理csv文件相同 十三、…...
学技术学英语:http状态码 401 Unauthorized vs 403 Forbidden
📢📢📢:先看关键单词,再看英文,最后看中文总结,再回头看一遍英文原文,效果更佳!! 关键词 unauthorized未授权的/ˌʌnˈɔːθəraɪzd/authentication认证/…...
@LocalBuilder装饰器: 维持组件父子关系
一、前言 当开发者使用Builder做引用数据传递时,会考虑组件的父子关系,使用了bind(this)之后,组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题,引入LocalBuilder装饰器。…...
React(二)——Admin主页/Orders页面/Category页面
文章目录 项目地址一、侧边栏1.1 具体实现 二、Header2.1 实现 三、Orders页面3.1 分页和搜索3.2 点击箭头显示商家所有订单3.3 页码按钮以及分页 四、Category页面4.1 左侧商品添加栏目4.2 右侧商品上传栏 五、Sellers页面六、Payment Request 页面(百万数据加载&a…...
移动端屏幕分辨率rem,less
谷歌模拟器:能直接看到移动端效果 屏幕分辨率 右键电脑桌面 ,点击显示设置 PC端是逻辑分辨率,移动端代码也是参考逻辑分辨率 网页端宽度和逻辑分辨率尺寸相同 手机屏幕尺寸不同,网页宽度均为 100% 所以就需要添加视口标签&#x…...
Docker Desktop 构建java8基础镜像jdk安装配置失效解决
Docker Desktop 构建java8基础镜像jdk安装配置失效解决 文章目录 1.问题2.解决方法3.总结 1.问题 之前的好几篇文章中分享了在Linux(centOs上)和windows10上使用docker和docker Desktop环境构建java8的最小jre基础镜像,前几天我使用Docker Desktop环境重新构建了一个…...
数据结构:栈(Stack)和队列(Queue)—面试题(一)
目录 1、括号匹配 2、逆波兰表达式求值 3、栈的压入、弹出序列 4、最小栈 1、括号匹配 习题链接https://leetcode.cn/problems/valid-parentheses/description/ 描述: 给定一个只包括 (,),{,},[,] …...
AR 眼镜之-拍照/录像动效切换-实现方案
目录 📂 前言 AR 眼镜系统版本 拍照/录像动效切换 1. 🔱 技术方案 1.1 技术方案概述 1.2 实现方案 1)第一阶段动效 2)第二阶段动效 2. 💠 默认代码配置 2.1 XML 初始布局 2.2 监听滑动对 View 改变 3. ⚛️…...
2025年中科院分区大类划分公布!新增8155本
2025年中科院分区表变更情况 扩大收录范围 2025年的期刊分区表在原有的自然科学(SCIE)、社会科学(SSCI)和人文科学(AHCI)的基础上,增加了ESCI期刊的收录,并根据这些期刊的数据进行…...
S变换matlab实现
S变换函数 function [st,t,f] st(timeseries,minfreq,maxfreq,samplingrate,freqsamplingrate) % S变换 % Code by huasir Beijing 2025.1.10 % Reference is "Localization of the Complex Spectrum: The S Transform" % from IEEE Transactions on Signal Proc…...
Springboot——钉钉(站内)实现登录第三方应用
文章目录 前言准备1、创建钉钉应用,并开放网页应用2、配置网页应用各项参数发布版本 前端改造后端逻辑1、获取应用免登录 Access_token2、通过免登录 Access_token 和 Auth_Code 获取对应登录人信息 注意事项 前言 PC端的钉钉中工作台,增加第三方应用&a…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
