zoukankan      html  css  js  c++  java
  • Bayer Pattern

    在刚加入工作的时候,听到最多的就是RGGB Bayer Pattern。在之前的接触中,一直默认一张图片的每个像素点有RGB三个分量,那“RGGB Bayer Pattern”究竟是什么意思。在网上查找资料以后发现这其实也是非常简单的概念。以下内容大部分为翻译,结合“CCD工作原理教程(V1.2)”。

    1. 硬件上

    私以为对CCD的原理有大致了解可以帮助我们对Beyer Pattern有更好的了解。我们知道镜CCD(Charge-coupled Device)通过滤镜将普通的入射光分为红绿蓝RGB三个分量。很容易联想到普通的图片每个像素点都包含RGB三个分量的信息,这很容易误导我们认为CCD也接收了每个像素点的三个通道的信息。然而并不是,原理图如下,每一个像素点CCD都只接收了RGB三个分量中的一个分量。一般而言是按照“RG/GB”的方式排列(对照图可以了解RG/GB其实是一个正方形的两行这么排列的)。

    这里写图片描述

    这里写图片描述

    2. 算法上

    Bayer彩色滤波阵列是当前最为流行的彩色图像数字获取形式。三个颜色滤波的形式如下:

    这里写图片描述

    一半的像素点为绿色(G),四分之一的像素点分别是红色(R)和蓝色(B)。

    为了获得色彩信息,彩色图像传感器覆盖有红色、绿色或者蓝色的滤镜,这种滤镜以相同的模式重复出现(上图中为RG/GB,也可以看做GR/BG)。滤镜的排列模式可以不一样,但是普遍使用的Bayer Pattern是2*2的阵列。

    3. Bayer format to RGB

    将Bayer Pattern的格式转换为RGB,那就需要通过插值的方式将每个像素点中丢失的两个颜色找回来。有几种插值的方式可以使用,但是最常用的方法是线性插值的修正调节版本。

    对红色(R)和蓝色(B)分量进行插值。

    这里写图片描述

    当一个绿色(G)的像素点上缺失蓝色(B)和红色(R)时,我们将这个像素点周围最近的两个相同的颜色做平均。如上图的第一张和第二张。中心像素点的红色(R)和蓝色(B)由周围最近的两个红色(R)和蓝色(B)求平均得到。 
    如果是求一个红色(R)像素点上的蓝色(B)分量,上图中第三张。我们用最近的4个蓝色求平均得到。 
    如果是求一个蓝色(B)像素点上的红色(R)分量,上图中第四张。我们用最近的4个红色求平均得到。 
    求红色(R)和蓝色(B)像素点上的绿色(G)分量:

    这里写图片描述

    G(R) = (G1 + G3) / 2 if abs(R1 – R3) < abs(R2 – R4) 
    G(R) = (G2 + G4) / 2 if abs(R1 – R3) > abs(R2 – R4) 
    G(R) = (G1 + G2 + G3+ G4) / 4 if abs(R1 – R3) = abs(R2 – R4)

    G(B) = (G1 + G3) / 2 if abs(B1 – B3) < abs(B2 – B4) 
    G(B) = (G2 + G4) / 2 if abs(B1 – B3) > abs(B2 – B4) 
    G(B) = (G1 + G2 + G3+ G4) / 4 if abs(B1 – B3) = abs(B2 – B4)

    如果觉得这样执行速度的很慢的话,就简单的吧G1-4全都加起来求平均好了!

  • 相关阅读:
    TUN/TAP区别
    从日志文件解决ArcGIS Server性能低下问题的步骤(1)
    java异常
    Maven
    前车之鉴-web篇
    图论复习总结
    奇(qi)谋(ji)巧(yin)计(qiao)
    莫比乌斯反演呓语
    学习后缀数组笔记
    浅读叶青学长竞赛学习知识目录
  • 原文地址:https://www.cnblogs.com/yzl050819/p/8506507.html
Copyright © 2011-2022 走看看