bayer插值算法(1):邻近插值算法

目录

前言

插值算法

Bayer阵列类别

邻近插值算法

代码示例


前言

相机生成的图像一般是bayer阵列的raw图,这时候如果转换成我们需要的rgb图像,就需要对应的bayer插值算法将丢失的rgb信息通过算法补齐

插值算法

常见的插值算法一般有如下几种

  • 邻近插值算法
  • 双线性插值算法
  • 高质量线性插值算法
  • 边缘感应算法
  • VNG算法(这里暂不介绍)
  • AHD算法(这里暂不介绍)

Bayer阵列类别

Bayer以2*2的方式排列,其排列方式有如下4种情况

  • RGGB

bayer插值算法(1):邻近插值算法_第1张图片

BGGR

bayer插值算法(1):邻近插值算法_第2张图片

GBRG

bayer插值算法(1):邻近插值算法_第3张图片

GRBG

bayer插值算法(1):邻近插值算法_第4张图片

邻近插值算法

在bayer阵列中,将三基色图片插值成彩色图片最为简单的方法就是临近插值法。由于各个基色整个图片中,大部分是缓慢均匀的变化,则我们将某个像素中缺少的基色用其周边对应此基色的像素值代替从而达到插值效果,插值方法如下(这里以RGGB举例):

bayer插值算法(1):邻近插值算法_第5张图片

这里拿图像的第一个像素举例

bayer插值算法(1):邻近插值算法_第6张图片

以当前像素为开头,取2*2的方框

当前像素的R值就是当前方框红色区域的值, G值为像素上下最接近的绿色方块的值, B值为当前蓝色区域的值, 后续也以此类推, 最后一列和最后一行就给0值

但临近插值只是一个简单的赋值过程,没有考虑各个像素之间的相关性,固在插值处理过程中,会使图片马赛克化,尤其图片中存在一些非平滑度过区域时,更为严重。

代码示例

int raw_bayer_nearest(raw_color_filter_t colorFilter, uint8_t *bayer, uint8_t *rgb888, int width, int height)
{
	int i,j; 
	int bayerlineWidth = width; 
	int rgblineWidth = width * 3; 
	int rgbSize = width * height * 3; 
	int isStartGreen = (colorFilter == RAW_COLOR_FILTER_GBRG || colorFilter == RAW_COLOR_FILTER_GRBG) ? 1 : 0;
	int isRedFirst = (colorFilter == RAW_COLOR_FILTER_RGGB || colorFilter == RAW_COLOR_FILTER_GRBG) ? 1 : 0;
	//add black border  
	
	//left
	for(i = (rgblineWidth-3); i

你可能感兴趣的:(编解码,算法,视频编解码,图像处理)