热门标签 | 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的数据线只有数据


    推荐阅读
    • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
    • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
    • Android中高级面试必知必会,积累总结
      本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
    • [译]技术公司十年经验的职场生涯回顾
      本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
    • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
      本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
    • 《数据结构》学习笔记3——串匹配算法性能评估
      本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
    • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
      本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
    • [大整数乘法] java代码实现
      本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
    • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
      本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
    • PHP图片截取方法及应用实例
      本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
    • CSS3选择器的使用方法详解,提高Web开发效率和精准度
      本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
    • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
    • android listview OnItemClickListener失效原因
      最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
    • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
    • sklearn数据集库中的常用数据集类型介绍
      本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
    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社区 版权所有