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

ISP流程--去马赛克详解

前言

      本期我们将深入讨论ISP流程中的去马赛克处理。我们熟知,彩色图像由一个个像元组成,每个像元又由红、绿、蓝(RGB)三通道构成。而相机传感器只能感知光的强度,无法直接感知光谱信息,即只有亮暗而没有颜色。因此,相机厂商通常在传感器前面加上滤色器来透过不同波段的光。想要得到彩色图像,理论上需要给每个像元加上RGB三个通道对应波段的滤色器。厂商们为了节约成本,通常采用颜色滤波器阵列CFA(Color Filter Array)给不同的像元按照阵列排序加上不同波段的滤色器。有了CFA,每个像元只记录对应波段的信息,为了获得完整彩色图像,我们在ISP流程中通过去马赛克处理给图像恢复色彩。因此,我们可以称去马赛克处理为灰色图像融合为彩色图像的神来之笔。

图片
▲传感器感光示意图

      对于不同的CFA类型,成像器件像素单元接收的光强信号不同,相应的去马赛克方法也不一样,因此去马赛克方法与CFA的类型高度相关。

颜色滤波器阵列:

      接下来,小彩将针对几个有代表性的CFA进行具体讨论。

RGGB:

图片
▲RGGB型CFA

      RGGB型CFA也被称为Bayer阵列,是一种最典型、最成熟的CFA,可以透过红、绿、蓝三种光线。RGGB型CFA以2×2像元为基本单元,其中包括1个红光滤色器、1个蓝光滤色器和2个绿光滤色器。这样设计的传感器有50%的空间用于接收绿光,符合人眼对绿色更敏感的事实。虽说利用该CFA可以从绿色通道图像中获得较好的视觉细节,但是整体透光量不足,色彩信息损失较大,所以在暗光环境下拍摄表现较差。

RGBW:

图片
▲RGBW型CFA

     RGBW型CFA由柯达公司于2007年提出,2012 年索尼便将其应用于自家图像传感器产品线中,2015 年华为 P8 相机也是采用索尼的 RGBW 传感器 IMX278。

      RGBW型CFA取消了2×2基本单元中第二排的绿光滤色器,这使得所有光线都可以透过这个无滤色器的像元(称之为W像元)。这样设计的好处是可以增大透光量,增强暗光拍摄能力。同时,其缺点也较为明显,由于减少了一个滤色器,色彩信息损失较大,导致拍摄出来的图像色彩普遍较为寡淡,而且因为W像元透光量大而易于导致过曝。

RYYB:

图片
▲RYYB型CFA

     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,这里不再赘述。

图片
▲Diagonal stripe,CYGM,Hirakawa,DMCNN-VD-Pa设计的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)等。

图片
▲GBTF(左)与RI(右)算法框架

AI去马赛克算法:

       目前,相关研究者提出了基于AI的ISP概念,即在传统的ISP流程中加入AI,而去马赛克、去噪等模块融入AI算法往往会有较好的效果提升。

       自人们发现卷积神经网络在提取图像特征方面有良好表现后,众多研究人员尝试利用该类网络进行去马赛克处理。目前,热门的方法可以分为三类,即分段式去马赛克、端到端去马赛克和联合其它任务的去马赛克算法。

      分段式去马赛克算法遵循传统去马赛克流程,通常是对Bayer阵列进行去马赛克处理。该类型算法先恢复采样率较高的G通道,并以此为先验信息,再推导出R、B通道的值。

图片
▲二段式去马赛克算法 CDM-CNN

       端到端去马赛克算法指的是输入马赛克图像并直接输出重建后图像的算法。该类算法凭借其重建效率高、泛化能力强的优点获得众多研究人员的青睐。最早Syu等人根据董超提出的超分辨率卷积网络,提出了应用于去马赛克操作的DMCNN(Demosaicing-CNN)与DMCNN-VD(DMCNN-very deep)算法,不但可以轻松应对Bayer阵列,并且对于其它任何类型CFA也有优秀的图像重建效果。

图片
▲端到端去马赛克算法 DMCNN(蓝色层为卷积层)

      除了利用简单卷积堆叠,研究人员还提出了采用残差网络、密集连接网络、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): 串口协议&#xff08;SPP&#xff09;是一个蓝牙配置文件&#xff0c;允许设备通过蓝牙模拟传统的串行端口通信。它通常用于无线串口连接&#xff0c;允许设备如计算机和外设&#xff08;例如打印机或条形码扫描器&#xff09;之间进行数据传输。A…...

moviepy 将mp4视频文件提取音频mp3 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…...

imageio 图片转mp4 保存mp4

目录 安装&#xff1a; imageio 图片转mp4 numpy 保存mp4 安装&#xff1a; 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批量运行测试用例 十二、实现数据驱动&#xff08;也称参数化&#xff09; 1、csv文件 1️⃣编辑csv文件 2️⃣更新参数的值 3️⃣修改测试脚本和断言 5️⃣批量运行测试用例 2、Json文件 1️⃣编辑Json文件 2️⃣其他操作和处理csv文件相同 十三、…...

学技术学英语:http状态码 401 Unauthorized vs 403 Forbidden

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#xff1a;先看关键单词&#xff0c;再看英文&#xff0c;最后看中文总结&#xff0c;再回头看一遍英文原文&#xff0c;效果更佳&#xff01;&#xff01; 关键词 unauthorized未授权的/ˌʌnˈɔːθəraɪzd/authentication认证/…...

@LocalBuilder装饰器: 维持组件父子关系

一、前言 当开发者使用Builder做引用数据传递时&#xff0c;会考虑组件的父子关系&#xff0c;使用了bind(this)之后&#xff0c;组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题&#xff0c;引入LocalBuilder装饰器。…...

React(二)——Admin主页/Orders页面/Category页面

文章目录 项目地址一、侧边栏1.1 具体实现 二、Header2.1 实现 三、Orders页面3.1 分页和搜索3.2 点击箭头显示商家所有订单3.3 页码按钮以及分页 四、Category页面4.1 左侧商品添加栏目4.2 右侧商品上传栏 五、Sellers页面六、Payment Request 页面&#xff08;百万数据加载&a…...

移动端屏幕分辨率rem,less

谷歌模拟器&#xff1a;能直接看到移动端效果 屏幕分辨率 右键电脑桌面 &#xff0c;点击显示设置 PC端是逻辑分辨率&#xff0c;移动端代码也是参考逻辑分辨率 网页端宽度和逻辑分辨率尺寸相同 手机屏幕尺寸不同&#xff0c;网页宽度均为 100% 所以就需要添加视口标签&#x…...

Docker Desktop 构建java8基础镜像jdk安装配置失效解决

Docker Desktop 构建java8基础镜像jdk安装配置失效解决 文章目录 1.问题2.解决方法3.总结 1.问题 之前的好几篇文章中分享了在Linux(centOs上)和windows10上使用docker和docker Desktop环境构建java8的最小jre基础镜像&#xff0c;前几天我使用Docker Desktop环境重新构建了一个…...

数据结构:栈(Stack)和队列(Queue)—面试题(一)

目录 1、括号匹配 2、逆波兰表达式求值 3、栈的压入、弹出序列 4、最小栈 1、括号匹配 习题链接https://leetcode.cn/problems/valid-parentheses/description/ 描述&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] …...

AR 眼镜之-拍照/录像动效切换-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 拍照/录像动效切换 1. &#x1f531; 技术方案 1.1 技术方案概述 1.2 实现方案 1&#xff09;第一阶段动效 2&#xff09;第二阶段动效 2. &#x1f4a0; 默认代码配置 2.1 XML 初始布局 2.2 监听滑动对 View 改变 3. ⚛️…...

2025年中科院分区大类划分公布!新增8155本

2025年中科院分区表变更情况 扩大收录范围 2025年的期刊分区表在原有的自然科学&#xff08;SCIE&#xff09;、社会科学&#xff08;SSCI&#xff09;和人文科学&#xff08;AHCI&#xff09;的基础上&#xff0c;增加了ESCI期刊的收录&#xff0c;并根据这些期刊的数据进行…...

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、创建钉钉应用&#xff0c;并开放网页应用2、配置网页应用各项参数发布版本 前端改造后端逻辑1、获取应用免登录 Access_token2、通过免登录 Access_token 和 Auth_Code 获取对应登录人信息 注意事项 前言 PC端的钉钉中工作台&#xff0c;增加第三方应用&a…...

基于深度学习算法的AI图像视觉检测

基于人工智能和深度学习方法的现代计算机视觉技术在过去10年里取得了显著进展。如今&#xff0c;它被广泛用于图像分类、人脸识别、图像中物体的识别等。那么什么是深度学习&#xff1f;深度学习是如何应用在视觉检测上的呢&#xff1f; 什么是深度学习&#xff1f; 深度学习是…...

cJson——序列化格式json和protobuf对比

cJson——序列化格式json和protobuf对比 1. 更小的消息体积2. 更快的序列化与反序列化速度3. 类型安全4. 向后和向前兼容性5. 更低的带宽消耗6. 高效的编码方式7. 易于跨语言支持8. 支持复杂的数据结构9. 更好的支持大型数据交换总结 Protocol Buffers (Protobuf) 和 JSON 都是…...

搭建一个fastapi的项目,调用ollama服务

1. 项目结构 my_project/ │ ├── app/ │ ├── main.py # FastAPI应用的入口 │ ├── services/ # 包含服务逻辑 │ │ └── ollama_service.py │ ├── models/ # 定义数据模型 │ │ └── response.py │ ├─…...

Wireshark编译手册(Windows)

以下是对 Wireshark 官方文档中“Windows 平台的设置和构建说明”部分的翻译和总结&#xff1a; 2.2. Windows 平台 本节提供了在 Windows 上进行 Wireshark 开发的快速设置指南&#xff0c;包含推荐的配置。 2.2.1. 使用 Microsoft Visual Studio 注意&#xff1a;除非您非…...

在高德地图上加载3DTilesLayer图层模型/天地瓦片

1. 引入必要的库 Three.js&#xff1a;一个用于创建和显示3D图形的JavaScript库。vuemap/three-layer&#xff1a;一个Vue插件&#xff0c;它允许你在高德地图中添加Three.js图层。vuemap/layer-3dtiles&#xff1a;一个用于处理3D Tiles格式数据的Vue插件&#xff0c;可以用来…...

深入浅出负载均衡:理解其原理并选择最适合你的实现方式

负载均衡是一种在多个计算资源&#xff08;如服务器、CPU核心、网络链接等&#xff09;之间分配工作负载的技术&#xff0c;旨在优化资源利用率、提高系统吞吐量和降低响应时间。负载均衡的实现方式多种多样&#xff0c;以下是几种常见的实现方式&#xff1a; 1. 硬件负载均衡&…...

STM32的存储结构

STM32F103 芯片是基于 ARM Cortex-M3 内核的微控制器&#xff0c;它集成了多种类型的存储器&#xff0c;每种存储器都有其特定的作用和存储对象。以下是关于 STM32F103 中 Flash、ROM 和 SRAM 的详细介绍&#xff1a; 1. Flash Memory (闪存) 作用&#xff1a;Flash 是非易失性…...

@SneakyThrows 注解详解

SneakyThrows 注解详解 1. 基本介绍 SneakyThrows 是 Lombok 提供的注解&#xff0c;用于简化异常处理&#xff0c;自动生成 try-catch 代码块&#xff0c;将检查型异常转换为非检查型异常。 2. 使用对比 2.1 传统写法 public String readFile(String path) {try {return …...

js监测页面可见性

监测切换页面 检测页面的可见性状态document.visibilityState:document.hiddenvisibilitychange 事件 js 检测页面切换至别的应用 检测页面的可见性状态 在JavaScript中&#xff0c;你可以使用Page Visibility API来检测页面的可见性状态。这个API提供了一组接口&#xff0c;允…...

Android wifi常见问题及分析

参考 Android Network/WiFi 那些事儿 前言 本文将讨论几个有意思的网络问题&#xff0c;同时介绍 Android 上常见WiFi 问题的分析思路。 网络基础Q & A 一. 网络分层缘由 分层想必大家很熟悉&#xff0c;是否想过为何需要这样分层&#xff1f; 网上大多都是介绍每一层…...

傻瓜式做网站程序/百度客服人工电话24小时

异步 HTTP 客户端Tornado 包含了两种非阻塞式 HTTP 客户端实现&#xff1a;SimpleAsyncHTTPClient 和 CurlAsyncHTTPClient。前者是直接基于 IOLoop 实现的&#xff0c;因此无需外部依赖关系。 后者作为 Curl 客户端&#xff0c;需要安装 libcurl 和 pycurl 后才能正常工作&…...

上海的网站建设公司/广州seo优化外包服务

[1,2,3].map(String) > [‘1’,‘2’,‘3’] [‘1’,‘2’,‘3’].map(Number) // [1,2,3] 0.toString() 数字传字符串 ‘0’ Number(n5)字符串转数字...

霍山县网站建设公司/软文有哪些

【示例一】回家过春节 原理 使用继承&#xff0c;子类中不需要实现那些重复的订票和庆祝团圆的代码了&#xff0c;避免了代码的重复&#xff1b;子类实现了不同方式的回家方法&#xff0c;把它栓入&#xff08;hook&#xff09;到父类中去&#xff0c;实现了完整的回家过年的逻…...

wordpress设置文件大小/百度地图在线使用

ASP.NET MVC的页面跳转 当我们在使用ASP.NET MVC实现页面跳转的时候&#xff0c;常用的应该是&#xff1a; RedirectRedirectToActionRedirectToRoute或者在前台使用脚本跳转。 但这几种跳转方式都是基于Get请求的&#xff0c;在某些特定场景下可能并不适用。例如需要传递大数据…...

平面设计套用模板网站/十大最靠谱培训机构

IDEA 字体设置 file ->setting...

汽车网站建设公司哪家好/竞价推广哪家公司好

得到这个后就简单了 用矩阵快速幂即可 递推...