• 嵌入式视频处理基础(四)


    引言:

    作为消费者,我们对于各种形式的视频系统都已经非常熟悉了。但是从嵌入式开发人员的角度来看,视频就好像是一张纷繁复杂的网络,里面充满了各种不同的分辨率、格式、标准与显示等。


     视频源

    1、模拟视频源

    一个视频解码器芯片可以将模拟视频信号(例如NTSC、PAL、CVBS、S-Video)转换为数字视频信号(一般为ITU-R BT.601/656 YcbCr 或RGB格式及其变种)。这是一个非常复杂的、多级处理的过程,其中涉及的操作有:从输入数据中提取定时信息,分离亮度和色度信号,将色度信息分离为Cr和Cb分量,采样输出数据,以及为数据分配适当的格式等。通过一些串行接口,例如SPI和I2C,可以对解码器的操作参数进行配置。下图是常见的解码器框图。

    视频解码方框图


    数字视频源:

    CCD和CMOS传感器   当今视频信号源基本上都是以电荷耦合器件(CDD)和CMOS技术为基础的。这两种技术都可以将光线转换为电信号,但是两者的具体转换机理有所不同。

    在CCD器件中,传感器的表面覆盖着一层光敏材料,由数百万个感光像素点构成一个感光阵列。在光线下暴露之后,整个CCD像素整列上积累的电荷被读出到器件的一端,然后通过模拟前端(Analog Front End,AFE)芯片或者CCD处理器进行数字化转换。而CMOS传感器则可以直接将每一个像素点上暴露的光线强度进行数字化转换。

    CCD与CMOS原理

    CCD与CMOS传感器

    一般来说,CCD具有更高的成像质量和更高的噪声性能,但比计耗电。而CMOS传感器则更容易制造,并且具有更低的耗能,但是成像质量不太高。部分原因是每一个像素点上的晶体管会阻塞一部分光线。不过,目前的CMOS技术已经开始在成像质量上和CCD技术非常接近了,现在,越来越多的中档相机传感器都是基于CMOS技术的。

    不管采用什么样的技术,传感器阵列上的所有光感点都是对灰度级敏感的,灰度级从最暗(黑色)到最亮(白色)。这些感光点对灰度级敏感到何种程度被称为”位深度”。因此,8比特的像素可以分辨出28即256个渐变的灰度,而12比特的像素则可以分辨出4096个渐变的灰度。整个感光阵列上面有几层色彩过滤材料,将每一个像素的感光点分为几个对颜色敏感的”子像素”。这种安排方式允许对每一个像素感光点测量不同的颜色强度。这样,每一个像素感光点上的颜色就可以看作该点的红色、绿色和蓝色通道透光量的叠加和。位深度越大,则可以产生的RGB空间内的颜色也就越多。例如,24位颜色(RGB各占8位)可以产生224即大约1 670万种颜色。

    部分24位颜色编码


    Bayer pattern  为了恰当的描绘彩色的图像,传感器需要每个像素位置有3个颜色样本——最常见的是红、绿和蓝。但是,如果在每个相机里面放置3个独立的传感器,在成本方面又是无法接受的(尽管后来这种技术越来越实用化)。更重要的是,当传感器的分辨率增加到5~10百万像素时,就越加有必要利用某种图像压缩算法来避免在每个像素位置输出3字节(或者更坏的情况,对于更高分辨的传感器,可能要输出3个12比特的字)。

    不过别担心,因为一些相机制造商已经发明了一些很聪明的方法来减少需要的颜色样本数量。最常用的方法是使用颜色过滤阵列(Color Filter Array,CFA),这个阵列仅仅测量像素点的一个颜色分量。然后,通过图像处理器进行插值得到其他颜色分量的值,看起来好像是每个像素点测量了3中颜色。

    Bayer pattern图像传感排列

    当今最流行的CFA是Bayer pattern,如上图,这种方法是由柯达(Kodak)公司发明的,利用人眼对绿色的分辨率要高于对红色和蓝色的分辨率这一现象。因此,在Bayer颜色过滤阵列里,绿色的过滤点是蓝色或红色过滤点的两倍。这就产生了一种输出格式,通俗的讲,就是”4:2:2 RGB”格式,即每发送两个红色和蓝色像素值就要发送4个绿色像素值。


    连接图像传感器

     CMOS 传感器通常会输出一个并行的像素数据流,格式一般为YCbCr或RGB,同时还有水平和垂直同步信号以及一个像素时钟。有时候,也可以由外部时钟信号以及同步信号来控制图像的数据从传感器中输出。

    另一方面,CCD一般要搭配一个AFE芯片(如AD9948)。该类芯片负责处理模拟输出信号,将其数字化,并产生适当的时序去扫描CCD成像阵列。处理器为AFE芯片提供同步信号,而AFE芯片则用这些控制信号去管理CCD成像阵列。从AFE芯片输出的数字化后的并行输出数据流可能是每像素10比特或12比特的分辨率。

     LVDS(Low-Voltage Differential Signaling,低电压差分信号)已经成为并行数据总线的一种重要替代方案。LVDS 是一种低成本、低引脚数、高速串口借口,比标准的并行接口具有更好的抗干扰性能和更低的功耗。这是很重要的特性,尤其是随着传感器分辨率和颜色深度的不断提高,以及便携式多媒体应用日益广泛。


      • 图像流水线    

    当然,拍照的过程并不是在传感器处结束了,正相反,它才刚刚开始。我们来看看,一幅原始图像在变成显示器上的一幅漂亮的图片之前要经历哪些步骤。有时候,这些是在传感器电子模块内部完成的(尤其是用CMOS传感器时),而有些时候这些步骤则必须由媒体处理器来执行。在数码相机中,这一系列处理阶段被称作”图像处理流水线”,简称为”图像流水线”。

    图像处理流水线举例

      • 机械反馈控制   

    在松开快门之前,对焦和曝光系统连同其他机械相机组件一起根据场景的特征控制镜头位置。自动曝光算法测量各个区域的亮度,然后通过控制快门速度和光圈大小对过度曝光或者曝光不足的区域进行补偿。这里的目标是保持图像中不同的区域内具有一定的对比度,并达到一个目标平均亮度。

      • 自动对焦  

    自动对焦算法分为两类。主动方法利用红外线或超声波发射器/接收器来估计相机和要拍的对象之间的距离。被动方法则是根据相机接收图像做出对焦决策。

    在这两个子系统中,媒体处理器通过PWM输出信号控制各个镜头和快门马达。对于自动曝光控制,也要调整传感器自动增益控制(Automatic Gain Control ,AGC)电路。

    自动对焦

      • 预处理   

    正如我们前面讨论的,传感器的输出需要经过伽马校正才能用于显示,同时也对传感器的采集响应进行补偿。

    由于传感器通常都会有一些有缺陷的像素点,因此一种常用的预处理技术是通过中位数滤波消除这些缺陷,原理就是像素与像素之间出现急剧的变化是不正常的,因为光学处理过程稍微模糊了图像。

      • 滤波与图像补偿   

    这组算法考虑了镜头的物理特性,也就是镜头会在一定程度上歪曲用户看到的实际景象。不同的镜头可能引起不同的失真,例如广角镜头会产生”桶状”或”膨胀”效应,而长焦镜头则会产生”收缩”效应。镜头的阴影失真降低了周围图像的亮度。色差会引起周围出现条纹。为了纠正这些天真,媒体处理器需要运用数学变换来处理图像。

    曝光补偿

    预处理的另一个用处是图像的稳定性补偿,或者称为防抖动。这时,处理器会根据接收图像的平移运动调整,当然这常常要借助于外部传感器,也就是实时感知传感器的运动。 

    高斯低通滤波

      • 白平衡    

    预处理的另一个阶段是白平衡。当我们看见一个场景时,不管光照条件如何,我们的眼睛总是会把眼睛看到的一切调整到同一组自然颜色下的状态。例如,不管我们是在室内荧光灯下,还是在室外阳光底下,一个深红色的苹果,我们看来都是深红色。但是,图像传感器对颜色的”感知”却极大地依赖于光照条件,所以我们必须将传感器获得的图像映射为”与光照无关”才能最终输出。这种映射处理可以手动也可以自动完成。

    在手动系统中,你可以用相机指定要进行”白平衡”的对象,然后相机将调节整幅图像的”色温”以满足这种映射。另一方面,自动白平衡(Automayic White Balance,AWB)利用图像传感器的输入和额外的一个白平衡传感器共同决定应该将图像中哪一部分作为”真正的白色”。这实际上是调整了图像中R、G、和B通道之间的相对增益。很显然,AWB要比手动方法多一些图像处理的过程,这也是厂商专属算法的另一个目标。

    白平衡

      • 拜耳(Bayer)插值   

    对拜耳数据插值,可能是图像处理流水线中最重要的、数值计算最多的操作。每一个相机制造商一般都有自己独特”秘方”,不过一般来讲这些方法最终可以分为主要的算法大类。

     非自适应算法,例如双线性插值或者双三次插值,是其中实现最简单的方法,在图像的平滑区域内这些算法工作的很好。但是,边缘和纹理较多的区域则对这些直接实现的方法提出了巨大的挑战。自适应算法,可以根据图像局部的特征自动改变行为,其结果会更好。

    自适应算法的一个例子是边缘指导重构(edge-directed reconstruction)。该算法会分析某个像素周围的区域,然后在决定在哪个方向插值。如果算法发现附近有一个边缘,则会沿着边缘进行插值,而不会穿越这个边缘。另一种自适应算法则假定一个完整的物体具有恒定的颜色,这样可以防止在当个物体内颜色出现突变。

    除此之外,还有很多的插值方法,其中有些涉及频域分析、贝叶斯(Bayesian)概率估计,甚至还与神经网络有关。

      • 颜色变换

    在这个阶段,插值后的RGB被转换到目标颜色空间(如果还不是在正确的颜色空间中)。为了压缩或者在电视上显示,通常还会涉及一个RGB -YcbCr的矩阵转换,另外还需要一个伽马校正阶段来适应目标显示。在这个阶段,也可能将YCbCr输出数据进行色度下采样形成标准的4:2:2格式,以较小的视觉损失达到减小带宽的目的。

      • 后处理       

    在这个阶段,通过各种滤波操作使图像更加完美,然后就可以发送到显示器或者储介质上。例如,边缘增强、像素的阈值降噪、人工颜色移除等在这个阶段都是非常普遍的。

      • 显示/压缩/存储     

    一旦图像处理完毕,图像处理流水线将分为两个不同的分支。首先,经过后处理的图像会输出到显示器件上,一般是LCD屏幕(但有时候也有可能是NTSC或PAL电视显示器,当然这是在特定的相机模拟下)。第二,图像被发送到媒体处理器中进行压缩处理,在图像存储到本地的存储介质(一般是非易失性闪存卡)中之前,先用工业标准的压缩技术(例如JPEG)进行处理。


     

    版权所有权归卿萃科技,转载请注明出处  

    作者:卿萃科技ALIFPGA  

    原文地址:卿萃科技FPGA极客空间 微信公众号 


     

    扫描二维码关注卿萃科技FPGA极客空间


     

  • 相关阅读:
    数据存储大小端验证
    Python之路【第二十三篇】爬虫
    Python之路【第二十篇】Tornado框架
    Python之路【第二十二篇】CMDB项目
    Python之路【第二十一篇】Django ORM详解
    Python之路【第二十篇】其他WEB框架
    Python之路【第十九篇】自定义分页实现(模块化)
    Python之路【第十八篇】Django小项目webQQ实现
    Python之路【第十八篇】Django小项目简单BBS论坛部分内容知识点
    Python之路【第十七篇】Django进阶篇
  • 原文地址:https://www.cnblogs.com/alifpga/p/7643880.html
Copyright © 2020-2023  润新知