zoukankan      html  css  js  c++  java
  • Bayer图像处理

      http://www.cnblogs.com/lin1270/archive/2010/12/01/1893647.html

      Bayer是相机内部的原始图片, 一般后缀名为.raw. 很多软件都可以查看, 比如PS.

      我们相机拍照下来存储在存储卡上的.jpeg或其它格式的图片, 都是从.raw格式转化过来的. .

      raw格式内部的存储方式有多种, 但不管如何, 都是前两行的排列不同. 其格式可能如下:

      G R G R G R G R

      B G B G B G B G

      G R G R G R G R

      B G B G B G B G

      横为2的倍数, 竖为4的倍数, 它们构成了分辨率. 如, 上面则代表了 8 * 4 分辨率的Bayer图.

      我们要知道的是, G = 2 * R 及 G = 2 * B, 即绿色值为红色值或蓝色值的两倍, 因

      为人眼对绿色更敏感, 所以绿色的分量更重.

      下面说一下从bayer转换成rgb图的算法, RGB图, 即为三色图, 一个像素点就由RGB

      三种颜色构成的混合色, 而bayer图一个像素就只有一个颜色, 或R或G或B. 因为bayer

      一个像素点只有一种颜色, 需要借助这个像素点周围的颜色对它进行插值(填充)另外的

      两种颜色, 它本身的颜色就不用插了. 一般的算法是:

      对于插入R和B,

      Rx = ( R1 + R2 ) / 2; 或-------------取上边和下边的平均值, 或是左边和右边的平均值

      Rx = ( R1 + R2 + R3 + R4 ) / 4;----取四个边的平均值

      B同理. 如:

      G B G

      R G R

      G B G

      对于中间的G, 它缺少 R和B, 用上下和左右的平均值进行求值.

      对于

      B G B

      G R G

      B G B

      这个图呢, 中间点R, 缺少G和B, G暂时没讨论, 那么 B, 就是从R的四个B角进行求平均值.

      ==============================================

      如果插入G, 稍有些复杂.

      不过一般的算法与R和B一样, 复杂的算法, 其复杂程度也提升一倍, 不过精度更高, 如果对于

      视频监测系统来说, 精度相对来说不必要求太高, 用R或B的解法即可. 下面说复杂的:

      对于图:

                R1

                G1

       R4 G4 R G2 R2

                G3

                R3

      对于中间点R, 它需要插入G和B, B不讨论, 主要讨论G, 它周围有四个点G1, G2, G3, G4.

                ( G1 + G3 ) / 2--------------如果 |R1-R3| < |R2-R4|

      G(R) = ( G2 + G4 ) / 2-------------如果 |R1-R3| > |R2-R4|

                ( G1 + G2 + G3 + G4 ) / 4--如果 |R1-R3| = |R2-R4|

      如果周围出现的像素点颜色为B, 就应该比较|B1-B3|与|B2-B4|的值.

      ====================================================

      还有关于将RGB格式转换为YUV格式的算法, 这里不想讨论了.

      这里要注意的是, bayer每个像素的值是8位的. 但是有的相机的bayer格式却有10位, 12位

      以及14位, 16位的, 那么如何将这些高于8位的数据转换为8位数据呢?. 拿12位数据来说, 有的

      人是取高8位或是低8位, 那么这样就会出现一个问题, 这张图像会有一个斜度, 不是偏亮就是偏

      暗, 或是出现其它乱七八糟的问题, 颜色问题总是不能令人满意. 这个时候就要去较正它, 无疑是

      浪费了时间.

      另一种算法是使用log映射, 据老外说, 这种转换法具有较高的精度. 拿12位来说, 一般转换算法:

      f(in) = 2 ^ ( log(in) * 8 / 12 )

      转换图为:

      |8                                        .

      |                      .   

      |        .

      |_______________________12

      因为log256 = 8, log4096 = 12, 对了log是以2为底哦.

      做得更好一点的算法, 可能根据提供的曝光等其它因素不同, 而将算法进行调整, 这样当一些意外

      事件发生时, 产生的图片也不会失真严重.

  • 相关阅读:
    从客户端(&)中检测到有潜在危险的 Request.Path 值。
    对访问修饰关键字public, protected, internal and private的说明
    C#综合揭秘——细说多线程(下)
    iis下配置:php+mysql
    工厂模式(Factory Patter)
    HDU 1040 As Easy As A+B [补]
    HDU 1020 Encoding
    HDU 1076 An Easy Task
    UVA 100 The 3n + 1 problem
    民大OJ 1668 追杀系列第二发
  • 原文地址:https://www.cnblogs.com/agllero/p/4489874.html
Copyright © 2011-2022 走看看