Sensor+ISP专栏-Demosaic

news2024/9/27 7:26:54

Sensor+ISP专栏-Demosaic

1.what is raw

raw图指的是从cmos sensor直接输出的原始图像,它本身没有颜色分量。

在CMOS Sensor中使用彩色滤镜阵列(color filter array,CFA) 的方式捕获彩色图像,每个感光像素的上面覆盖一个语物理像素相同面积大小,但分别只让红,绿,蓝光线透过的滤镜,这样RGB的领域的RGB信息都得到了保留,如下图,以最常见的RGGB pattern为例:
在这里插入图片描述
不同CFA来通过不同波长的光,最终通过插值来还原当前的颜色信息,极大的降低成本。

2.how to make a raw image to rgb img?

demoasic,即解马赛克
由RGB的分量的能量以及量子效率不同,最终pixel输出的AD值也不一样,raw图使用Image J打开之后看起来像一张加了马赛克的图像,如下图所示:
在这里插入图片描述
为了将raw图还原成带有颜色信息的rgb图像,一般会使用差值的方法将当前pixel的rgb信息还原。opencv中默认已经内置demosic函数。
笔者使用gpu写了一个简单的插值kernel,如下:

template<class pixel_t>
__global__ void demosic(pixel_t* raw, pixel_t* r, pixel_t* g, pixel_t* b, cfa_e cfa, int iw, int ih)
{
	int idx = blockDim.x * blockIdx.x + threadIdx.x;
	int idy = blockDim.y * blockIdx.y + threadIdx.y;

	if (idx < 1 || idy < 1 || idx > (iw - 2) || idy > (ih - 2)) {
		return;
	}

	int id = idy * iw + idx;

	pixel_t p0 = raw[(idy - 1) * iw + idx - 1];
	pixel_t p1 = raw[(idy - 1) * iw + idx];
	pixel_t p2 = raw[(idy - 1) * iw + idx + 1];
	pixel_t p3 = raw[(idy    ) * iw + idx - 1];
	pixel_t p4 = raw[(idy    ) * iw + idx];
	pixel_t p5 = raw[(idy    ) * iw + idx + 1];
	pixel_t p6 = raw[(idy + 1) * iw + idx - 1];
	pixel_t p7 = raw[(idy + 1) * iw + idx];
	pixel_t p8 = raw[(idy + 1) * iw + idx + 1];

	switch (pixel_pattern_lut[(uint8_t)cfa][idx % 2][idy % 2])
	{
	case p_raw_e::R:
		b[id] = (p0 + p2 + p6 + p8) >> 2;
		g[id] = (p1 + p3 + p5 + p7) >> 2;
		r[id] = p4;
		break;
	case p_raw_e::GR:
		b[id] = (p1 + p7) >> 1; 
		g[id] = p4;
		r[id] = (p3 + p5) >> 1;
		break;
	case p_raw_e::GB:
		b[id] = (p3 + p5) >> 1;
		g[id] = p4;
		r[id] = (p1 + p7) >> 1;
		break;
	case p_raw_e::B:
		b[id] = p4;
		g[id] = (p1 + p3 + p5 + p7) >> 2;
		r[id] = (p0 + p2 + p6 + p8) >> 2;
		break;
	default:
		break;
	}
}

3. others

其实还写了其他gpu isp kernel,暂不开源~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/139996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenStack-Mitaka版本部署

1.环境准备 centos7.2相关文件 镜像&#xff1a;https://mirrors.aliyun.com/centos-vault/7.2.1511/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso?spma2c6h.25603864.0.0.5c565932JYniuU openstack-mitaka rpm包&#xff1a;https://mirrors.aliyun.com/centos-vault/7.2.15…

hadoop 3.x 案例7: hadoop大数据平台日志

文章目录一. Hadoop日志1.1 namenode日志1.2 datanode日志1.3 secondarynamenode日志1.4 yarn日志1.4.1 resourcemanger日志1.4.2 nodemanager日志1.5 historyServer日志二. Hive日志三. Spark日志四. Flink日志一. Hadoop日志 cd $HADOOP_HOME/logs日志分类: namenode日志 d…

【ROS】—— ROS通信机制进阶(七)

文章目录前言1. 常用API(C)1.1 初始化1.2 话题与服务相关对象1.3 回旋函数(重点)1.4 时间1.4.1 获取当前时刻and指定时刻1.4.2 持续时间1.4.3 时间运算1.4.4 设置运行频率1.4.5 定时器1.5 其他函数2. 常用API(python)2.1 初始化2.2 话题与服务相关对象2.3 回旋函数2.4 时间2.4.…

Bandit算法学习[网站优化]02——epsilon-Greedy 算法

Bandit算法学习[网站优化]02——epsilon-Greedy 算法 参考资料 White J. Bandit algorithms for website optimization[M]. " O’Reilly Media, Inc.", 2013.https://github.com/johnmyleswhite/BanditsBook 实验环境&#xff1a;jupyter python 3.7 项目地址&am…

twrp Xposed zip包脚本定制全解析

声明:本文不对印刷机导致的任何结果承担责任,请谨慎尝试 想要研究一个新技术,最好的办法就是read the fuck source code,读源码时最直接高效的方式,当然,这很难啃,所以通常也可以配合网上一些教程来理解,但是通常,值钱的技术一般人是不会在网上发布的,因为技术的价值就…

大厂必备Stream流、方法引用的使用

大厂必备Stream流、方法引用的使用 1 Stream的基本使用 1.1 思想 当需要对多个元素进行操作&#xff08;特别是多步操作&#xff09;的时候&#xff0c;考虑到性能及便利性&#xff0c;我们应该首先拼好一个“模型”步骤方案&#xff0c;然后再按照方案去执行它。【流水线】 …

spring源码-容器refresh

spring源码 铺垫 1.xml信息封装 我们可以预测的大致顺序 xml里的bean 封装成对象定义信息更容易进一步的 创建 注入 BeanDefinition的属性&#xff1a;可以看出是对xml里信息的封装 public interface BeanDefinitionReader 定义规范2.使用反射 为什么不用new创建对象&#x…

NXP EMDA学习(1):TCD寄存器详解

eDMA(Enhanced DMA)即增强型DMA&#xff0c;它是NXP芯片中独有的功能&#xff0c;其最重要的一个特性也是eDMA的核心就是TCD(Transfer Control Descriptor)即传输控制描述符。所以&#xff0c;我们就来看一下这个结构体中各个字段的内容的含义&#xff0c;对这些字段有一个基础…

位置检测有哪些传感器可以用?(带磁编码器AS5600代码)

常见的有三种 编码器、霍尔传感器、磁传感器。 编码器一般指AB相正交脉冲的增量器件&#xff0c;有的还会有一个Z相信号&#xff0c;用来指示零位&#xff1b; 霍尔传感器一般是指ABC三个成120度角度间隔排列的器件&#xff0c;这种传感器一般集成在电机内部&#xff0c;电机…

[Amazon]人工智能入门学习笔记---AI-机器学习-深度学习

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; (*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &a…

基于模型预测控制的波浪能转换器(WEC)研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Flink简介

Flink 系列教程传送门 第一章 Flink 简介 第二章 Flink 环境部署 第三章 Flink DataStream API 第四章 Flink 窗口和水位线 第五章 Flink Table API&SQL 第六章 新闻热搜实时分析系统 前言 流计算产品实时性有两个非常重要的实时性设计因素&#xff0c;一个是待计算…

基于 Docker 的 Neo4j 部署及数据备份与恢复

目录一、部署二、验证三、备份3.1 离线备份3.2 在线备份3.3 社区版备份一、部署 1、pull 镜像 docker pull neo4j:4.4.16-community2、创建目录 mkdir -p /home/data/neo4j/{data,logs,conf,import,db-backup}3、运行容器 docker run -itd \--name neo4j \--restart always…

openwrt-看门狗watchdog

一、硬件watchdog和软件watchdog Linux内核不仅为各种不同类型的watchdog硬件电路提供了驱动&#xff0c;还提供了一个基于定时器的纯软件watchdog驱动&#xff0c;软件watchdog基于内核的定时器实现&#xff0c;当内核或中断出现异常时&#xff0c;软件watchdog是无法复位系统…

二叉树17:路径总和

主要是我自己刷题的一些记录过程。如果有错可以指出哦&#xff0c;大家一起进步。 转载代码随想录 原文链接&#xff1a; 代码随想录 leetcode链接&#xff1a;112. 路径总和 112. 路径总和 题目&#xff1a; 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判…

判断图中有没有证件图片

整体解决思路: 前提:拍摄场景光线稳定,证件没有放在图像边缘;且图片使用的证件阅读器拍摄的红外图片,采用了开灯和关灯各拍摄一张图片,图像相减,进行了背景去除; 1)使用二值化和膨胀腐蚀以及sobel算子等进行图像的预处理; 2)进行凸包计算,通过角度,进行证件区域…

缓存穿透,缓存雪崩,缓存击穿的超详解

文章目录1、缓存穿透问题的解决思路2、缓存雪崩问题及解决思路3、缓存击穿问题及解决思路1、缓存穿透问题的解决思路 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库&#xff0c;失去了缓存的意…

pytorch数据dataset的三种读取方式

文章目录1.自带的datasets2.ImageFolder3.自己创建的dataset&#xff08;用的多&#xff09;1.自带的datasets pytorch自带的数据集 具体数据集如下&#xff1a; 用法&#xff1a; 可以用的功能 2.ImageFolder 文件形式如下时用此&#xff1a;&#xff08;一个文件下只…

MyBatis框架 入门案例

二刷复习简介MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;Plain Old Jav…

磨金石教育科技摄影技能干货分享|艺术摄影的本源是创作,核心是表达

艺术类的作品一直都有一个风格&#xff0c;那就是抽象。特别是摄影领域&#xff0c;一幅作品如果缺乏创意&#xff0c;只是展现现实的景物&#xff0c;那么很容易就变成了纪实摄影或者风光摄影。因此&#xff0c;要想让作品突出艺术性&#xff0c;就要再原有的画面上&#xff0…