热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Sensor信号输出YUV、RGB、RAWDATA、JPEG4种方式区别---转

FROM:http:blog.chinaunix.netuid-27134408-id-4145092.html目录[-]YUV、RGB、RAWDATA、JPEG4种方式YUV、RGB、RA

FROM:http://blog.chinaunix.net/uid-27134408-id-4145092.html

目录[-]

  • YUV、RGB、RAW DATA、JPEG 4种方式
  • YUV、RGB、RAW DATA、JPEG 4种方式区别
  • RAW和JPEG的区别 
  • 为何要拍摄RAW?
  • JPEG格式有什么优点?
  • 我该拍摄RAW还是JPEG?
  • 后记
  • 摄像头数据格式
  • 数字视频CCIR 601编码标准
  • CCIR601和CCIR656标准的区别
  • YUV、RGB、RAW DATA、JPEG 4种方式

    简单来说,

    • YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的
    • RGB: 传统的红绿蓝格式,比如RGB565,其16-bit数据格式为5-bit R + 6-bit G + 5-bit B。G多一位,原因是人眼对绿色比较敏感。
    • RAW RGB: sensor的每一像素对应一个彩色滤光片,滤光片按Bayer pattern分布。将每一个像素的数据直接输出,即RAW RGB data
    • JPEG: 有些sensor,特别是低分辨率的,其自带JPEG engine,可以直接输出压缩后的jpg格式的数据


    对于这几种输出格式,几个疑问:

    1. 有些手机基带芯片只能支持2M以下的YUV sensor,3M以上只能使用JPEG sensor,这里说明YUV输出格式对基带芯片有一定的要求, 那么到底YUV sensor对基带芯片有怎样的要求呢?
    2. 如果直接输出RGB,对于LCD的显示是最方便的,那么为何大多数基带芯片都是要求输出为YUV格式的数据再进行处理呢?
    • YUV一个像素占2B,如果像素太高在高时钟下基带芯片处理不过来,JPEG数据量就要小的多,所以不是YUV对基带芯片有要求而是基带芯片对输出数据速率有要求。
    • RGB565一般用在很低端的基带芯片上,直接往屏上刷。YUV输出亮度信号没有任何损失,而色偏信号人眼并不是特别敏感,RGB565输出格式是R5G3 G3B5会丢掉很多原始信息,所以YUV图像质量和稳定性要比RGB565好的多
    • RAW数据每个像素就1B,数据量要少很多,一般5M以上sensor就只输出RAW数据以保证比较快的输出速度,后端挂一个DSP来处理输出的数据。

    --------------------------------------------------------------------------------

    YUV、RGB、RAW DATA、JPEG 4种方式区别

    RAW和JPEG的区别 


    RAW格式文件基本上是一个没有经任何图像处理的源文件, 它能原原本本地记录相机拍摄到的信息,没有因为图像处理(如锐化、增加色彩对比)和压缩而造成的信息丢失,但需要用特别的软件来打开这些文件。 另一种常用的格式便是JPEG,相机会先根据使用者的设定来做一定的图像处理,然后经过压缩 (程度因相机内设定的照片质量而定)和保存照片。

    为何要拍摄RAW? 

    RAW是一种专业摄影师常用的格式,因为它能原原本本地保存信息,让用户能大幅度对照片进行 后期制作,如调整白平衡、曝光程度、颜色对比等设定,也特别适合新手补救拍摄失败的照片,而且无论在后期制作上有什么改动,相片也能无损地回复到最初状态,不怕因意外储存而损失照片。 RAW还有一个好处,例如佳能DPP软件可以修正镜头失光、变形等。

    JPEG格式有什么优点?

    JPEG格式为一种非常普及的照片格式,差不多所有现代数码相机都能使用这个格式,绝大部分的计算机上也能打开JPEG文件,使用者也可以随意设定压缩程度来保留画质(最佳的JPEG画质跟RAW 的非常接近),是一种十分方便的格式。

    我该拍摄RAW还是JPEG? 

    在讨论这个问题之前,让我们看看RAW格式有什么缺点:

    1. 因为RAW文件需要保留所有细节和信息,所以文件比JPEG大很多,这样储存照片或把照片传输到计算机的时间便更长更久,需要的储存容量也更大; 
    2. RAW文件需要使用特别的软件来打开,一旦计算机没有安装软件便没法打开文件; 
    3. 承上,一旦10年后那套特定的软件没法安装,之前拍摄的照片便没有办法打开; 
    4. 软件打开RAW的时间比较长,快的需要8、9s,慢的可能要用上20s也说不定; 
    5. 不同的软件有不同的方式去“演译”RAW文件,所以一个RAW文件在Photoshop 和Nikon Capture NX看可能会有所差别; 
    6. 厂商卖的专用软件价钱不低。(佳能DPP可以免费下载,尼康NX则需另购) 

    清楚RAW的缺点以后,我们便可以看看哪种情况应该选择RAW或JPEG:

    如果你需要拍摄大量的照片,应该考虑使用JPEG,因为其容量需求比较少和可以保留后制及把照片转换为JPEG的时间;

    如果你用作商业拍摄或喜欢后期制作,应该使用RAW,因为后制空间较大;

    如果你正进行旅行摄影,可以考虑使用RAW或者RAW+JPEG,因为旅行的地方可能没法常去,使用RAW让你一旦拍摄失败也有较大的机会补救。

    后记

    其实,现在Photoshop的功能很强大,对于JPEG文件也能通过level或curve来调较曝光、白平衡、 色彩对比等,当然如果需要做大幅度的调整还是RAW文件比较适合的。

    摄像头数据格式

    摄像头的数据输出格式一般分为CCIR601、CCIR656、RAW RGB等格式,此处说的RGB格式应该就是CCIR601或CCIR656格式。而RAW RGB格式与一般的RGB格式是有区别的。

    我们知道,Sensor的感光原理是通过一个一个的感光点对光进行采样和量化,但在Sensor中,每一个感光点只能感光RGB中的一种颜色。所以,通常所说的30万像素或130万像素等,指的是有30万或130万个感光点。每一个感光点只能感光一种颜色。

    但是,要还原一个真正图像,需要每一个点都有RGB三种颜色,所以,对于CCIR601或656的格式,在Sensor模组的内部会有一个ISP模块,会将Sensor采集到的数据进行插值和特效处理,例如:如果一个感光点感应的颜色是R,那么,ISP模块就会根据这个感光点周围的G、B感光点的数值来计算出此点的G、B值,那么,这一点的RGB值就被还原了,然后在编码成601或656的格式传送给Host。

    而RAW RGB格式的Sensor则是将没个感光点感应到的RGB数值直接传送给Host,由Host来进行插值和特效处理。

    • Raw RGB 每个像素只有一种颜色(R、G、B中的一种); 
    • RGB 每个像素都有三种颜色,每一个的值在0~255之间; 
    • 在手机摄像头的测试过程中,由sensor输出的数据就是Raw data(Raw RGB),经过彩色插值就变成RGB

     sensor输出的数据格式,主要分两种:YUV(比较流行),RGB,这就是sonsor的数据输出;这其中的GRB就是Raw RGB,是sensor的bayer阵列获取的数据(每种传感器获得对应的颜色亮度); 
    但是输出的数据不等于就是图像的实际数据,模组测试时,就要写一个软件,完成数据采集(获得Raw data)->彩色插值(目的是获得RGB格式,便于图像显示)->图像显示;这样就可以发现整个模组是否正常,有无坏点,脏点的等,检测出不良品;(软件的处理过程当中,为了获得更好的图像质量,还需要白平衡,gamma校正,彩色校正) 

    而在手机的应用中,手机根据相机模组的数据格式,提供一个ISP(主要用于RGB格式的),配合软件,使照相功能得到应用;

    对于SENSOR来说,Bayer RGB和RGB Raw两者的图象结构都是BG/GR的(Bayer pattern说的是COLOR FILTER的结构,分为两种:STD Bayer pattern 与Pair pattern,其中STD Bayer pattern的结构是BG/GR的,而Pair Pattern顾名思义是指BGBG/GRGR的结构,即以四行为一个单位,前两行是BG的结构,后两行是GR的结构,这种结构是美光专门为此申请了专利 的,主要是在输出TV模式(NTSC/PAL制)时用到),由于后端应用时,对RAW DATA图像的 解码是按默认的结构来解码的 ,如BG/GR,因此 Bayer RGB和RGB Raw两者的图象结构必须都是BG/GR的,而如果输出图像结构是BGBG/GRGR,则不可以直接显示和解码的。

    Bayer RGB与RGB Raw的主要区别在于两者输出前经过的处理不同,Bayer RGB从ADC输出,只经过了LENS SHADING CORRECTION,GAMMA等模块处理而后就直接输出,而RGB Raw则经过了整个ISP模块的处理,最终是经过YUV422的数据转化而来的。

      很多人对YUV数据格式不清楚,以至于在做视频的时候出现了一些不可预知的错误(比如说图像带有点、颜色不对等)。今晚是周末放假,我就抽点时间来给大家介绍一下。

           提示: 读下面的文字时,希望大家结合图片看,这样更易理解
           在YUV420中,一个像素点对应一个Y,一个2X2的小方块对应一个U和V。对于所有YUV420图像,它们的Y值排列是完全相同的,因为只有Y的图像就是灰度图像。YUV420sp与YUV420p的数据格式它们的UV排列在原理上是完全不同的。420p它是先把U存放完后,再存放V,也就是说UV它们是连续的。而420sp它是UV、UV这样交替存放的。(见下图)
    有了上面的理论,我就可以准确的计算出一个YUV420在内存中存放的大小。
    width * hight =Y(总和)
    U = Y / 4  
    V = Y / 4


    所以YUV420 数据在内存中的长度是 width * hight * 3 / 2,

    假设一个分辨率为8X4的YUV图像,它们的格式如下图:


                                       YUV420sp格式如下图                                                                    YUV420p数据格式如下图

                             


    有了上边的理论,我们可以对Android摄像头采集的YUV420sp数据做很多的转换,下面我写一个旋转90度的算法。

    代码如下:


    [java] view plaincopy
    1. public static void rotateYUV240SP(byte[] src,byte[] des,int width,int height)  
    2.     {  
    3.          
    4.         int wh = width * height;  
    5.         //旋转Y  
    6.         int k = 0;  
    7.         for(int i=0;i
    8.             for(int j=0;j
    9.             {  
    10.                   des[k] = src[width*j + i];              
    11.                   k++;  
    12.             }  
    13.         }  
    14.           
    15.         for(int i=0;i2) {  
    16.             for(int j=0;j2;j++)   
    17.             {     
    18.                   des[k] = src[wh+ width*j + i];      
    19.                   des[k+1]=src[wh + width*j + i+1];  
    20.                   k+=2;  
    21.             }  
    22.         }  
    23.           
    24.           
    25.     }  



    结合上面的旋转算法,我在Android平台写了一个测试项目。

    运行结果效果如下:

    上边视频是摄像头的预览数据(预览数据的图像截图看不见,郁闷啊),所以我为了能让大家看到效果,专门拍了一张照片。

                                                                                       




    如需要Android平台测试源码的,请留下邮箱。


    数字视频CCIR 601编码标准

    一、采样频率:为了保证信号的同步,采样频率必须是电视信号行频的倍数。CCIR为NTSC、PAL和SECAM制式制定的共同的电视图像采样标准:
    fs=13.5MHz
    这个采样频率正好是PAL、SECAM制行频的864倍,NTSC制行频的858倍,可以保证采样时采样时钟与行同步信号同步。对于4:2:2的采样格式,亮度信号用fs频率采样,两个色差信号分别用fs/2=6.75MHz的频率采样。由此可推出色度分量的最小采样率是3.375MHz。

    二、分辨率:根据采样频率,可算出对于PAL和SECAM制式,每一扫描行采样864个样本点;对于NTSC制则是858个样本点。由于电视信号中每一行 都包括一定的同步信号和回扫信号,故有效的图像信号样本点并没有那么多,CCIR 601规定对所有的制式,其每一行的有效样本点数为720点。由于不同的制式其每帧的有效行数不同(PAL和SECAM制为576行,NTSC制为484 行),CCIR定义720×484为高清晰度电视HDTV(High Definition TV)的基本标准。实际计算机显示数字视频时,通常采用下表的参数:

    电视制式    分辨率      帧 率
    NTSC        640×480     30
    PAL           768×576      25

    三、数据量:CCIR 601规定,每个样本点都按8位数字化,也即有256个等级。但实际上亮度信号占220级,色度信号占225级,其它位作同步、编码等控制用。如果按fs的采样率、4:2:2的格式采样,则数字视频的数据量为:
    13.5(MHz)×8(bit)+2×6.75(MHz)×8(bit) = 27Mbyte / s

    同样可以算出,如果按4:4:4的方式采样,数字视频的数据量为每秒40兆字节!按每秒27兆字节的数据率计算,一段10秒钟的数字视频要占用270兆字 节的存储空间。按此数据率,一张680兆字节容量的光盘只能记录约25秒的数字视频数据信息,而且即使目前高倍速的光驱,其数据传输率也远远达不到每秒 27兆字节的传输要求,视频数据将无法实时回放。这种未压缩的数字视频数据量对于目前的计算机和网络来说无论是存储或传输都是不现实的,因此,在多媒体中应用数字视频的关键问题是数字视频的压缩技术。

    CCIR601和CCIR656标准的区别

    关于这两种信号的区别:
    ITU-R BT 601:16位数据传输;21芯;Y、U、V信号同时传输。
    ITU-R BT 656:9芯,不需要同步信号;8位数据传输;串行视频传输;传输速率是601的2倍;先传Y,后传UV。

    CCIR601要通过行、场同步两根信号线来传递行、场同步信息;
    CCIR656不需要这两根信号线,它只通过8位数据线实现“软”同步。CCIR656=CCIR601+HSYNC+VSYNC
    656输出的是串行数据,行场同步信号嵌入在数据流中;

    601是传输的是并行数据,行场同步有单独输出;
    656只是数据传输接口而已,可以说是作为601的一个传输方式。

    简单的说ITU-R BT.601是“演播室数字电视编码参数” 标准,而ITU-R BT.656则是ITU-R BT.601附件A中的数字接口标准,用于主要数字视频设备(包括芯片)之间采用27Mhz/s并口或243Mb/s串行接口的数字传输接口标准。

    CCIR601号建议的制定,是向着数字电视广播系统参数统一化、标准化迈出的第一步。在该建议中,规定了625和525行系统电视中心演播室数字编码的基本参数值。

    601号建议单独规定了电视演播室的编码标准。它对彩色电视信号的编码方式、取样频率、取样结构都作了明确的规定。它规定彩色电视信号采用分量编码。所谓分量编码就是彩色全电视信号在转换成数字形式之前,先被分离成亮度信号和色差信号,然后对它们分别进行编码。分量信号(Y、B -- Y、R -- Y)被分别编码后,再合成数字信号。 它规定了取样频率与取样结构。

    例如:在4:2:2等级的编码中,规定亮度信号和色差信号的取样频率分别为13.5MHZ和6.75MHZ,取样结构为正交结构,即按行、场、帧重复,每 行中的R-Y和B-Y取样与奇次(1,3,5……)Y的取样同位置,即取样结构是固定的,取样点在电视屏幕上的相对位置不变。 它规定了编码方式。对亮度信号和两个色差信号进行线性PCM编码,每个取样点取8比特量化。同时,规定在数字编码时,不使用A/D转换的整个动态范围,只 给亮度信号分配220个量化级,黑电平对应于量化级16,白电平对应于量化级235。为每个色差信号分配224个量化级,色差信号的零电平对应于量化级 128。

    综上所述,我们知道,分量信号的编码数据流是很高的。以4:2:2编码标准为例,其比特流为:13.5×8+6.75×8×2=216Mb/S。若采用4:4:4编码方式,即对复合信号直接编码,其抽样频率取为13.3×8=106.4 Mb/S。

    PS:我们可以认为CCIR601即“ITU-R BT.601-5”,“ITU-R BT.656-4"即CCIR601。

    656只有8位DATA+CLK,601有8位DATA+CLK+HSYNC+VSYNC,还有16位DATA+CLK+HSYNC+VSYNC。
    656把HSYNC、VSYNC插到数据中,601的数据线只有数据


    推荐阅读
    • 解决Bootstrap DataTable Ajax请求重复问题
      在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
    • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
    • 微软推出Windows Terminal Preview v0.10
      微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
    • 深入解析 Lifecycle 的实现原理
      本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
    • 本文介绍了如何在AX2012中通过自定义查询在数据网格视图中显示所有记录的方法。 ... [详细]
    • 第二十五天接口、多态
      1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
    • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
      在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
    • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
    • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
    • 装饰者模式(Decorator):一种灵活的对象结构设计模式
      装饰者模式(Decorator)是一种灵活的对象结构设计模式,旨在为单个对象动态地添加功能,而无需修改原有类的结构。通过封装对象并提供额外的行为,装饰者模式比传统的继承方式更加灵活和可扩展。例如,可以在运行时为特定对象添加边框或滚动条等特性,而不会影响其他对象。这种模式特别适用于需要在不同情况下动态组合功能的场景。 ... [详细]
    • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
      本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
    • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
      在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
    • 本文探讨了如何通过编程手段在Linux系统中禁用硬件预取功能。基于Intel® Core™微架构的应用性能优化需求,文章详细介绍了相关配置方法和代码实现,旨在帮助开发人员有效控制硬件预取行为,提升应用程序的运行效率。 ... [详细]
    • 最详尽的4K技术科普
      什么是4K?4K是一个分辨率的范畴,即40962160的像素分辨率,一般用于专业设备居多,目前家庭用的设备,如 ... [详细]
    • 两个条件,组合控制#if($query_string~*modviewthread&t(&extra(.*)))?$)#{#set$itid$1;#rewrite^ ... [详细]
    author-avatar
    2012我的语言
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有