Sensor+ISP专栏-Demosaic

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,暂不开源~~

### CMOS 图像传感器的工作流程解析 #### 1. 启动阶段 当电池供电相机通电后,电源管理模块会初始化整个系统的各个组件。此时,CMOS图像传感器作为核心部件之一被激活并进入待机状态[^1]。 #### 2. IRCUT 切换机制 为了适应不同的光照条件,在环境光线充足的情况下,红外截止滤光片 (IR CUT Filter) 将安装到位以阻挡不必要的红外线干扰;而在低照度环境下,则移除该滤镜允许更多光线通过从而提高灵敏度。这种切换通常由专门设计的机械装置或者电子控制完成,并且其动作受制于嵌入式固件指令调度。 #### 3. Sensor 数据采集过程 一旦准备就绪,CMOS 图像传感器开始按照预设帧率捕捉场景中的光学信号并将它们转换成电信号形式存储起来等待进一步处理。每一个像素单元负责记录对应位置上的亮度信息以及颜色分量数据(如果采用拜耳阵列模式)[^1]。 #### 4. 驱动层交互操作 在此期间,设备驱动程序扮演着桥梁角色连接硬件资源与操作系统之间通讯渠道畅通无阻的任务执行者身份出现——它不仅需要向底层发送命令来配置特定寄存器值实现功能定制化需求满足外 ,还要接收来自上位应用程序传递过来的各种请求参数以便调整当前运行状况使之更加贴合实际应用场合的要求 [^2]。 #### 5. ISP 处理环节概述 所获取原始影像资料随后会被送至集成信号处理器(ISP, Image Signal Processor),在这里经历一系列复杂运算步骤包括但不限于去马赛克算法还原真实色彩表现效果、白平衡校正消除偏色现象影响视觉体验质量水平提升等多个方面综合考量之后最终形成可供展示使用的高质量JPEG文件或者其他格式编码版本输出给显示屏呈现出来供用户查看欣赏成果作品价值所在之处体现得淋漓尽致[未提供具体引用但基于专业知识补充说明] ```c++ // 示例代码片段:简单的ISP伪码表示如何进行基本的颜色矫正和对比度增强 void processImage(uint8_t* raw_data, int width, int height){ uint8_t r,g,b; for(int y=0; y<height; ++y){ for(int x=0; x<width; ++x){ // 去马赛克逻辑省略... applyWhiteBalance(r,g,b); // 白平衡修正函数调用 enhanceContrast(&r,&g,&b); // 对比度增强方法应用 } } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值