您的位置:首页 > 其它

插值算法将摄像头采集RAW数据保存位RGB24

2017-10-31 11:19 176 查看
插值算法,需要填补缺失的2个色彩,我们使用的是线性插值补偿算法R 和B通过线性







就是RB分别不变,一个像素点的RGB 三个分量,通过固定其中的一个点的值,取临域的

的颜色分量的平均值,作为这个像素点的颜色分量值,因为绿色颜色分量数量在GRB模式的时候最多,所以对于G颜色分量的时候需要做两次的运算

R如果固定的是红色分量的时候即R在中间,为第三张图,固定R的颜色分量,上下左右的G相加除以4,还有临近的B相加除以4,代码实现是:

这边是一格格的寻找插值,只是我们的算法对边缘没有做处理,所以需要-1

For(i=0;i<width-1;i++)

{

For(j=0;j<height-1;j++)

{

         Int seq=j*width+i;//定义的绘出IMAGE区域用于指向首地址

If(1==i%2&&0==j%2)//因为R 的分量在GRGB的格式中只会出现在奇数的列和偶数的行所以这样判断

{

         Pixel.red = *(inbuf+seq);

         Pixel.greed=(*(inbuf+seq+1)+*(inbuf+seq-1)+*(inbuf+seq+width)+*(inbuf+seq-width))>>2;//取临近的绿色分量的平均值用于填充像素点

Pixel.blue=(*(inbuf+Seq+1+width)+*(inbuf+seq-width)+*(inbuf+seq+width+1)+*(inbuf+seq+width-1))>>2;//取临近的蓝色分量的临近值用于插值

}

//固定绿色分量,因为绿色分量只在偶数行偶数列或者奇数行技术列出现所以如下

//绿色是上下左右的红与绿相加除2

If(i%2==1&&j%2==1)

{

         Pixel.green = *(inbuf+seq);

         Pixel.red=(*(inbuf+Seq+width)+*(inbuf+seq-width))>>1;

         Pixel.blue=(*(inbuf+seq+1)+*(inbuf+seq-1))>>1;

         Bmp->pixels[i][j]=pixel;

}

//第二种情况

If(0==i%2&&0==j%2){

         Pixel.green=*(inbuf+Seq);

         Pixel.red=(*(inbuf+seq+1)+*(inbuf+seq-1))>>1;

         Pixel.blue==(*(inbuf+Seq+width)+*(inbuf+seq-width))>>1;

         Bmp->pixels[i][j]=pixles;

}

Else

{

Pixel.blue=(*(inBuf+seq-1-width)+*(inBuf+seq+1-width)+*(inBuf+seq-1+width)+*(inBuf+seq+1+width))>>2;

Pixel.green= (*(inbuf+seq+width)+*(inbuf+seq-width)+*(inbuf+seq+1)+*(inbuf+seq-1))>>2;

Pixel.red=

}

bmp->pixels[i][j]= pixel;

}

}

如上可以将原始的RAW数据在新的内存中将像素点颜色比例重新配置绘出彩图,就是颜色会有点偏绿

 

参考博客地址:http://www.cnblogs.com/qiqibaby/p/5267566.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  图像处理