☰
Demosaic 和 Remosaic
2026/10/29 19:47:22 网站建设 项目流程

理论 + 伪代码示例 + 手机影像算法集成场景
一、理论
1. Demosaic(去拜耳 / 解拜耳)
作用:Bayer RAW → RGB
Sensor输出Bayer阵列,每个像素只采集R/G/B其中一个通道。Demosaic通过邻域插值,给每个像素补齐另外两个缺失的颜色通道,输出每个像素都具备R、G、B三通道的图像。
输入:Bayer RAW(RGGB/BGGR等)
输出:Full RGB图像
位置:ISP Pipeline,RAW降噪之后,RGB域处理之前
插值会引入伪色、拉链效应,是RAW域图像处理的重点难点。
2. Remosaic(重拜耳)
作用:RGB → Bayer RAW,和Demosaic反向操作。
把已经插值完成的Full RGB图像,按照Bayer CFA排列规则,重新采样回拜耳阵列格式。
输入:Full RGB
输出:Bayer RAW
核心:只保留对应位置的通道,丢弃另外两个通道信息,还原Bayer的像素排布。
注意:Remosaic不是无损还原原始Sensor RAW。原始RAW是Sensor真实光电采样;Remosaic是从插值后的RGB反向采样,会带入Demosaic插值带来的噪声、伪色。
一句话区分
Demosaic:拜耳转RGB(拆)
Remosaic:RGB转回拜耳(拼回去)
二、代码示例(简化伪代码 BGGR)
// BGGR:偶数行 B G B G;奇数行 G R G R
// Demosaic 简化示意(仅逻辑演示,工程是复杂插值算法)
void demosaic(unsigned short* bayer_raw, unsigned short* rgb, int w, int h, int raw_stride)
{
for(int y = 0; y < h; y++)
{
unsigned short* raw_line = bayer_raw + y * raw_stride;
for(int x = 0; x < w; x++)
{
if(y%2 ==0)
{
if(x%2 ==0) {
rgb[y*w*3 + x*3 +0] = raw_line[x]; // B
// G/R 通过邻域插值估算
} else {
rgb[y*w*3 + x*3 +1] = raw_line[x]; // G
}
}
else
{
if(x%2 ==0) {
rgb[y*w*3 + x*3 +1] = raw_line[x]; // G
} else {
rgb[y*w*3 + x*3 +2] = raw_line[x]; // R
}
}
}
}
}

// Remosaic:RGB转回BGGR拜耳阵列
void remosaic(unsigned short* rgb, unsigned short* bayer_out, int w, int h, int out_stride)
{
for(int y = 0; y < h; y++)
{
unsigned short* bayer_line = bayer_out + y * out_stride;
for(int x = 0; x < w; x++)
{
int idx = y*w*3 + x*3;
if(y%2 ==0)
{
if(x%2 ==0) bayer_line[x] = rgb[idx+0]; // B
else bayer_line[x] = rgb[idx+1]; // G
}
else
{
if(x%2 ==0) bayer_line[x] = rgb[idx+1]; // G
else bayer_line[x] = rgb[idx+2]; // R
}
}
}
}
三、手机影像算法集成实际工作场景
Demosaic(日常高频)
ISP标准模块,RAW降噪之后执行,把Bayer RAW转为RGB,后续CCM、Gamma、锐化都在RGB域处理。
调试痛点:
弱光高增益下,Demosaic容易产生伪色(false color)、边缘拉链效应;
Demosaic算法有多种:双线性、VNG、自适应插值,不同算法效果和算力开销不同。
Remosaic(不是ISP原生模块,算法外挂场景才会用到)
什么时候需要Remosaic?
核心场景:在RGB域做处理,但是后续ISP链路仍然需要Bayer格式输入
举例:
多帧HDR融合:多帧RAW做Demosaic融合,融合完得到RGB图;但平台ISP只能接收Bayer RAW做后续处理,需要Remosaic转回Bayer再送入ISP。
外挂软件降噪:RGB域降噪处理完成,需要把图像重新打包回拜耳格式,送回硬件ISP继续跑后面流水线。
⚠️ Remosaic的工程坑(面试高频)
信息不可逆损失:Demosaic插值出来的RGB本身就有估算值,remosaic之后的Bayer,不等于Sensor原始RAW。不能拿remosaic结果当成原生RAW,黑电平、噪声特性会变化。
Bayer Pattern必须严格匹配:Remosaic输出的CFA排列,要和下游ISP配置完全一致(BGGR/RGGB),否则颜色错乱。
算力开销:Demosaic+Remosaic成对使用,两次图像转换,会增加功耗与内存占用,移动端影像尽量避免不必要的来回转换。
工程准则:能直接在Bayer域处理,就不要Demosaic+Remosaic来回转换,减少画质损失和性能开销。
✅ 精简版
Demosaic是将Sensor Bayer RAW插值转换成完整RGB图像,放在ISP RAW降噪之后;Remosaic是反向操作,把RGB图像按CFA规则重新采样生成Bayer阵列。
Demosaic是ISP标准流程;Remosaic多用于软件算法在RGB域处理后,需要重新送回Bayer输入的硬件ISP场景。
要注意,Remosaic生成的拜耳数据不是原始Sensor RAW,存在画质损失;Demosaic+Remosaic来回转换会增加功耗,影像项目尽量避免不必要的互转。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询