视频监控图像处理

上传人:每**** 文档编号:47347262 上传时间:2021-12-20 格式:DOCX 页数:63 大小:5.39MB
收藏 版权申诉 举报 下载
视频监控图像处理_第1页
第1页 / 共63页
视频监控图像处理_第2页
第2页 / 共63页
视频监控图像处理_第3页
第3页 / 共63页
资源描述:

《视频监控图像处理》由会员分享,可在线阅读,更多相关《视频监控图像处理(63页珍藏版)》请在装配图网上搜索。

1、视频监控及视频图像分析基础知识1 视频监控的定义利用视频技术探测、监视设防区域,实时显示、记录现场图像,检索和显示历史图像的电子系统或网络系统n 视频监控系统是安全技术防范的一个子系统n 视频监控技术是安全防范技术的一部分它包括模拟视频监控系统、网络视频监控系统。1.1 模拟视频监控图1 模拟视频监控的基本结构请预览后下载!1.2 网络视频监控图2 网络视频监控的基本结构n 技术:主要是视频编解码技术、嵌入式技术n 组成:硬盘录像机、摄像机、监视器等n 功能:监视(监听)、控制、录像、回放、对讲等n 线缆:视频电缆、 485控制线n 主要应用:金融、楼宇、小区等1.2.1 网络视频监控优点n

2、可通过网络组建低成本跨区域监控系统n 一机多路,使用大容量硬盘可长期存储n 数字信号长期保存信号不失真n 采用智能检索,检索与录像可同时进行n 循环录像方式,节约人力2 基本概念n 图像(Image)n 像素(Pixel)n 分辨率(Resolution)p 水平:Widthp 垂直:Heightn 视频(Video)p 时间上连续的图像组成视频:ImageVideop 视频中的某一幅图像称为一帧(Frame)p 帧率(Frame Rate)FPS 每秒的帧数请预览后下载!n 码流(Bit Stream)p 将图像压缩后形成的数据p 码率(Bit Rate)bps/Bps 对码流进行量化p 码

3、率类型:定码率(CBR)、变码率(VBR)p 码流类型:视频流、音频流、复合流2.1 扫描方式隔行扫描(Interlaced)和逐行扫描(Progressive)都是在显示设备表示运动图像的方法,隔行扫描方式是每一帧被分割为两场画面交替显示,逐行扫描方式是将每帧的所有画面同时显示。通常的液晶电视显示画面的扫描方法都是从左到右从上到下,每秒钟扫描固定的帧数。2.1.1 隔行扫描(Interlacing)隔行扫描就是每一帧被分割为两场,每一场包含了一帧中所有的奇数扫描行或者偶数扫描行,通常是先扫描奇数行得到第一场,然后扫描偶数行得到第二场。由于视觉暂留效应,人眼将会看到平滑的运动而不是闪动的半帧半

4、帧的图像。但是这时会有几乎不会被注意到的闪烁出现,使得人眼容易疲劳。当屏幕的内容是横条纹时,这种闪烁特别容易被注意到。请预览后下载!2.1.2 逐行扫描(Progressive)逐行扫描每次显示整个扫描帧,如果逐行扫描的帧率和隔行扫描的场率相同,人眼将看到比隔行扫描更平滑的图像,相对于隔行扫描来说闪烁较小。2.2 视频制式n PAL( Phase Alternating Line):p 供电频率为50Hz、场频为每秒50场、帧频为每秒25帧、扫描线为625行 p 图像彩色误差较小,与黑白电视的兼容也好 p 中国、德国n NTSC (National Television System Comm

5、ittee):p 供电频率为60Hz,场频为每秒60场,帧频为每秒30帧,扫描线为525行 p 美国、日本n SECAM(Sequentiel Couleur A Memoire ):p 按顺序传送彩色与存储 p 俄罗斯、法国、埃及2.3 分辨率分辨率可以从显示分辨率与图像分辨率两个方向来分类。显示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少。由于屏幕上的点、线和面都是由像素组成的,显示器可显示的像素越多,画面就越精细,同样的屏幕区域内能显示的信息也越多,所以分辨率是个非常重要的性能指标之一。可以把整个图像想象成是一个大型的棋盘,而分辨率的表示方式就是所有经线和纬线交

6、叉点的数目。显示分辨率一定的情况下,显示屏越小图像越清晰,反之,显示屏大小固定时,显示分辨率越高图像越清晰。请预览后下载!图像分辨率则是单位英寸中所包含的像素点数,其定义更趋近于分辨率本身的定义分辨率制式WD1D14CIF112CIF1 1/2DCIF3/4 2/3CIF1/2 1/2QCIF1/4 1/4PAL960576720576704576704288528384352288176144NTSC9604807204807044807042405283203522401761202.3.1 高清分辨率分辨率大于等于720p称为高清3 数码监控的基础技术:编码和压缩一路4CIF分辨率的图像

7、,进行A/D转换后未经压缩的数据量是(RGB):一帧:7045763字节1216512字节(不包括文件头大小)一秒:请预览后下载!1216512字节/帧25帧/秒30412800字节/秒29MB/秒一小时:29MB/秒3600秒/小时101.9GB/小时一天:101.9GB/小时24小时2.4TB/天3.1 压缩基本原理 安防监控中的视频数据有极强的相关性,有大量的冗余信息 冗余信息分为空域冗余信息和时域冗余信息 压缩技术就是将数据中的冗余信息去掉 压缩技术包括帧内压缩技术、帧间压缩技术和熵编码压缩技术请预览后下载!3.2 压缩标准监控中主要采用MJPEG、MPEG1/2、MPEG4(SP/A

8、SP)、H.264/AVC等几种视频编码技术Chronological Progression of ITU and MPEG3.2.1 H264概述3.2.2 H264基本原理H264压缩技术主要采用了以下几种方法对视频数据进行压缩。包括: 帧内预测压缩,解决的是空域数据冗余问题。 帧间预测压缩(运动估计与补偿),解决的是时域数据冗余问题。 整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化。 CABAC压缩。经过压缩后的帧分为:I帧,P帧和B帧:请预览后下载! I帧:关键帧,采用帧内压缩技术。 P帧:向前参考帧,在压缩时,只参考前面已经处理的帧。采用帧音压缩技术。

9、 B帧:双向参考帧,在压缩时,它即参考前而的帧,又参考它后面的帧。采用帧间压缩技术。除了I/P/B帧外,还有图像序列GOP。 GOP:两个I帧之间是一个图像序列,在一个图像序列中只有一个I帧。如下图所示:下面我们就来详细描述一下H264压缩技术。3.2.3 H264压缩技术H264的基本原理其实非常简单,下我们就简单的描述一下H264压缩数据的过程。通过摄像头采集到的视频帧(按每秒 30 帧算),被送到 H264 编码器的缓冲区中。编码器先要为每一幅图片划分宏块。以下面这张图为例:请预览后下载!3.2.3.1 划分宏块H264默认是使用 16X16 大小的区域作为一个宏块,也可以划分成 8X8

10、 大小。划分好宏块后,计算宏块的象素值。请预览后下载!以此类推,计算一幅图像中每个宏块的像素值,所有宏块都处理完后如下面的样子。请预览后下载!3.2.3.2 划分子块H264对比较平坦的图像使用 16X16 大小的宏块。但为了更高的压缩率,还可以在 16X16 的宏块上更划分出更小的子块。子块的大小可以是 8X16 16X8 8X8 4X8 8X4 4X4非常的灵活。上幅图中,红框内的 16X16 宏块中大部分是蓝色背景,而三只鹰的部分图像被划在了该宏块内,为了更好的处理三只鹰的部分图像,H264就在 16X16 的宏块内又划分出了多个子块。请预览后下载!这样再经过帧内压缩,可以得到更高效的数

11、据。下图是分别使用mpeg-2和H264对上面宏块进行压缩后的结果。其中左半部分为MPEG-2子块划分后压缩的结果,右半部分为H264的子块划压缩后的结果,可以看出H264的划分方法更具优势。宏块划分好后,就可以对H264编码器缓存中的所有图片进行分组了。请预览后下载!3.2.3.3 帧分组对于视频数据主要有两类数据冗余,一类是时间上的数据冗余,另一类是空间上的数据冗余。其中时间上的数据冗余是最大的。下面我们就先来说说视频数据时间上的冗余问题。为什么说时间上的冗余是最大的呢?假设摄像头每秒抓取30帧,这30帧的数据大部分情况下都是相关联的。也有可能不止30帧的的数据,可能几十帧,上百帧的数据都

12、是关联特别密切的。对于这些关联特别密切的帧,其实我们只需要保存一帧的数据,其它帧都可以通过这一帧再按某种规则预测出来,所以说视频数据在时间上的冗余是最多的。为了达到相关帧通过预测的方法来压缩数据,就需要将视频帧进行分组。那么如何判定某些帧关系密切,可以划为一组呢?我们来看一下例子,下面是捕获的一组运动的台球的视频帧,台球从右上角滚到了左下角。请预览后下载!H264编码器会按顺序,每次取出两幅相邻的帧进行宏块比较,计算两帧的相似度。如下图:请预览后下载!通过宏块扫描与宏块搜索可以发现这两个帧的关联度是非常高的。进而发现这一组帧的关联度都是非常高的。因此,上面这几帧就可以划分为一组。其算法是:在相

13、邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内,我们认为这样的图可以分到一组。在这样一组帧中,经过编码后,我们只保留第一帖的完整数据,其它帧都通过参考上一帧计算出来。我们称第一帧为IDRI帧,其它帧我们称为PB帧,这样编码后的数据帧组我们称为GOP。3.2.3.4 运动估计与补偿在H264编码器中将帧分组后,就要计算帧组内物体的运动矢量了。还以上面运动的台球视频帧为例,我们来看一下它是如何计算运动矢量的。H264编码器首先按顺序从缓冲区头部取出两帧视频数据,然后进行宏块扫描。当发现其中一幅图片中有物体时,就在另一幅图的邻近位置(搜索窗

14、口中)进行搜索。如果此时在另一幅图中找到该物体,那么就可以计算出物体的运动矢量了。下面这幅图就是搜索后的台球移动的位置。请预览后下载!通过上图中台球位置相差,就可以计算出台图运行的方向和距离。H264依次把每一帧中球移动的距离和方向都记录下来就成了下面的样子。运动矢量计算出来后,将相同部分(也就是绿色部分)减去,就得到了补偿数据。我们最终只需要将补偿数据进行压缩保存,以后在解码时就可以恢复原图了。压缩补偿后的数据只需要记录很少的一点数据。如下所示:请预览后下载!我们把运动矢量与补偿称为帧间压缩技术,它解决的是视频帧在时间上的数据冗余。除了帧间压缩,帧内也要进行数据压缩,帧内数据压缩解决的是空间

15、上的数据冗余。下面我们就来介绍一下帧内压缩技术。3.2.3.5 帧内预测人眼对图象都有一个识别度,对低频的亮度很敏感,对高频的亮度不太敏感。所以基于一些研究,可以将一幅图像中人眼不敏感的数据去除掉。这样就提出了帧内预测技术。H264的帧内压缩与JPEG很相似。一幅图像被划分好宏块后,对每个宏块可以进行 9 种模式的预测。找出与原图最接近的一种预测模式。请预览后下载!下面这幅图是对整幅图中的每个宏块进行预测的过程。帧内预测后的图像与原始图像的对比如下:请预览后下载!然后,将原始图像与帧内预测后的图像相减得残差值。再将我们之前得到的预测模式信息一起保存起来,这样我们就可以在解码时恢复原图了。效果如

16、下:请预览后下载!经过帧内与帧间的压缩后,虽然数据有大幅减少,但还有优化的空间。3.2.3.6 对残差数据做DCT可以将残差数据做整数离散余弦变换,去掉数据的相关性,进一步压缩数据。如下图所示,左侧为原数据的宏块,右侧为计算出的残差数据的宏块。将残差数据宏块数字化后如下图所示:请预览后下载!将残差数据宏块进行 DCT 转换。去掉相关联的数据后,我们可以看出数据被进一步压缩了。请预览后下载!做完 DCT 后,还不够,还要进行 CABAC 进行无损压缩。3.2.3.7 CABAC上面的帧内压缩是属于有损压缩技术。也就是说图像被压缩后,无法完全复原。而CABAC属于无损压缩技术。无损压缩技术大家最熟

17、悉的可能就是哈夫曼编码了,给高频的词一个短码,给低频词一个长码从而达到数据压缩的目的。MPEG-2中使用的VLC就是这种算法,我们以 A-Z 作为例子,A属于高频数据,Z属于低频数据。看看它是如何做的。请预览后下载!CABAC也是给高频数据短码,给低频数据长码。同时还会根据上下文相关性进行压缩,这种方式又比VLC高效很多。其效果如下:现在将 A-Z 换成视频帧,它就成了下面的样子。请预览后下载!从上面这张图中明显可以看出采用 CACBA 的无损压缩方案要比 VLC 高效的多3.3 H.265与H264区别H.265标准全称为高效视频编码(High Efficiency Video Coding

18、),也即HEVC,相较于之前的H.264标准有了相当大的改善。H.265又何以让如此多的行业都青睐有加?故事开始还是需要从H.264说起,H.264也称作MPEG-4AVC(AdvancedVideoCodec,高级视频编码),因其可以得到比其他编码标准更高的视频质量和更低的码率,而得到了人们的认可,被广泛应用于网络流媒体数据、各种高清晰度电视广播以及卫星电视广播等领域。从编码框架上来说,H.265仍然沿用了H.264的混合编码框架,主要包含:帧内预测(intraprediction)、帧间预测(interprediction)、转换(transform)、量化(quantization)、去

19、区块滤波器(deblockingfilter)、熵编码(entropycoding)等模块。如今更高清发展愈演强烈,H.264也遇到了瓶颈。以编码单位来说,H.264中每个宏块(marcoblock,MB)大小都是固定的16x16像素。然而,在更高分辨率下,单个宏块所表示的图像内容信息大大减少,H.264所采用的宏块经过整数变换后,低频系数相似程度也大大提高,出现大量冗余,导致H.264编码对高清视频的压缩效率明显降低;其次,H.264算法宏块个数的爆发式增长,会导致每个编码宏块的预测模式、运动矢量、参考帧索引和量化级等宏块级参数信息占用更多码流资源,在有限带宽中,分配给真正描述图像内容的残差

20、系数信息的可用带宽明显减少了;再有,由于分辨率的提高,表示同一个运动的运动矢量幅值也将大大增加,H.264编码方式的特点是数值越大使用的比特数越请预览后下载!多,因此,随着运动矢量幅值的大幅增加,H.264中用来对运动矢量进行预测以及编码的压缩率也将逐渐降低。相比H.264,H.265提供了更多不同的工具来降低码率。H.265的编码单位可以选择从最小的8x8到最大的64x64。信息量不多的区域(颜色变化不明显,比如天空的灰色部分)划分的宏块较大,编码后的码字较少,而细节多的地方(细节变化较多,比如大楼部分)划分的宏块就相应的小和多一些,编码后的码字较多,这样就相当于对图像进行了有重点的编码,从

21、而降低了整体的码率,编码效率就相应提高了。这个过程有点像“感兴趣区域编码”,针对重要的更多关键细节的部分进行增强划块,无更多关键细节的部分进行简单划块,但是这个过程在H.265上可以自适应识别实现。4 摄像机基础知识4.1 模拟摄像机基本概念n 组成:主要由镜头、影像传感器(CCD/CMOS)、ISP(Image Signal Processor)及相关电路组成n 工作原理:被摄物体经镜头成像在影像传感器表面,形成微弱电荷并积累,在相关电路控制下,积累电荷逐点移出,经过滤波、放大后输入DSP进行图像信号处理,最后形成视频信号(CVBS)输出传感器ADCDSPDAC光图像码流模拟摄像机系统结构C

22、VBS4.2 网络摄像机基本概念n 组成:主要由镜头、影像传感器(CCD/CMOS)、ISP(Image Signal Processor)、DSP(Digital Signal Processor)及相关电路组成n 工作原理:被摄物体经镜头成像经过IR Filter滤波后在图像传感器表面,形成微弱电荷并积累,在相关电路控制下,积累电荷逐点移出,经过滤波、放大后输入DSP进行图像信号处理和编码压缩,(如果是球机,同时将控制信号发送给云台)最后形成数字信号输出.请预览后下载!DSP CCD/CMOSISPNET光图像码流网络摄像机系统结构DSP 4.3 Sensor工作原理每个感光元件对应图像传

23、感器中的一个像点,由于感光元件只能感应光的强度,无法捕获色彩信息,因此必须在感光元件上方覆盖彩色滤光片。在这方面,不同的传感器厂商有不同的解决方案,最常用的做法是覆盖RGB红绿蓝三色滤光片,以1:2:1的构成由四个像点构成一个彩色像素(即红蓝滤光片分别覆盖一个像点,剩下的两个像点都覆盖绿色滤光片),采取这种比例的原因是人眼对绿色较为敏感。而索尼的四色CCD技术则将其中的一个绿色滤光片换为翡翠绿色(英文Emerald,有些媒体称为E通道),由此组成新的R、G、B、E四色方案。不管是哪一种技术方案,都要四个像点才能够构成一个彩色像素,这一点大家务必要预先明确。 在接受光照之后,感光元件产生对应的电

24、流,电流大小与光强对应,因此感光元件直接输出的电信号是模拟的。在CCD传感器中,每一个感光元件都不对此作进一步的处理,而是将它直接输出到下一个感光元件的存储单元,结合该元件生成的模拟信号后再输出给第三个感光元件,依次类推,直到结合最后一个感光元件的信号才能形成统一的输出。由于感光元件生成的电信号实在太微弱了,无法直接进行模数转换工作,因此这些输出数据必须做统一的放大处理这项任务是由CCD传感器中的放大器专门负责,经放大器处理之后,每个像点的电信号强度都获得同样幅度的增大;但由于CCD本身无法将模拟信号直接转换为数字信号,因此还需要一个专门的模数转换芯片进行处理,最终以二进制数字图像矩阵的形式输

25、出给专门的DSP处理芯片。而对于CMOS传感器,上述工作流程就完全不适用了。CMOS传感器中每一个感光元件都直接整合了放大器和模数转换逻辑,当感光二极管接受光照、产生模拟的电信号之后,电信号首先被该感光元件中的放大器放大,然后直接转换成对应的数字信号。换句话说,在CMOS传感器中,每一个感光元件都可产生最终的数字输出,所得数字信号合并之后被直接送交DSP芯片处理问题恰恰是发生在这里,CMOS感光元件中的放大器属于模拟器件,无法保证每个像点的放大率都保持严格一致,致使放大后的图像数据无法代表拍摄物体的原貌体现在最终的输出结果上,就是图像中出现大量的噪声,品质明显低于CCD传感器(这几年随着半导体

26、制程工艺及加工工艺大幅度改进,CMOS良品率大大提升,品质上与CCD差别不大)。请预览后下载!4.4 ISP与DSPISP是Image Signal Processor 的简称,也就是图像信号处理器。而DSP是Digital Signal Processor 的缩写,也就是数字信号处理器。ISP一般用来处理Image Sensor(图像传感器)的输出数据,如做AEC(自动曝光控制)、AGC(自动增益控制)、AWB(自动白平衡)、色彩校正、Lens Shading、Gamma 校正、祛除坏点、Auto Black Level、Auto White Level 等等功能的处理。请预览后下载!而DS

27、P功能就比较多了,它可以做些拍照以及回显(JPEG的编解码)、录像以及回放(Video 的编解码)、H.264的编解码、还有很多其他方面的处理,总之是处理数字信号了。个人认为ISP是一类特殊的处理图像信号的DSPISP(Image Signal Processor)图像信号处理器的主要作用是对前端图像传感器输出的信号做后期的处理。不同的ISP用来匹配不同厂商的图像传感器。ISP的优异在整个摄像机产品中很重要,应当说它直接影响呈现给用户的影响画质的优劣。图像经过图像经过CCD或者CMOS的采集后,需要经过后期的处理才可以较好的适应不同的环境,在不同的光学条件下都能较好的还原出现场细节。在ISP中

28、它会完成我们常常提及的2A(AWB/AE,自动白平衡/自动曝光)或者3A(AWB/AE/AF,自动白平衡/自动曝光/自动聚焦)。传统模式下一般采用一颗DSP或者一颗FPGA来完成对图像的后期处理。有些摄像机产品支持的3D降噪功能、宽动态、慢快门、帧累积、强光抑制等功能也都是ISP来完成的。目前应用在高清摄像机产品中的ISP一般有以下几个来源:厂商自行研发:高清摄像机设备厂商为了更好的配合后端压缩、功能开发,自行研发ISP处理算法,将算法集成至FPGA或DSP芯片中,接驳前端图像传感器。第三方研发:2010年已经逐渐诞生了一批由非高清摄像机制造厂商推出的一些ISP解决方案,他们直接出售不同的IS

29、P芯片给摄像机厂商配合不同厂商的Sensor。套片模式:由Sensor厂商将自主开发的ISP结合自家Sensor形成图像采集处理解决方案推向客户,其中的图像处理算法及各种调试工作已经完成,摄像机厂商只需要做接口对接并后端压缩或转换成数字视频(HD-SDI)即可。这种模式我们称为Stand-Alone Devices或者Camera System Onchip。DSP芯片,也称数字信号处理器,是一种具有特殊结构的微处理器。DSP芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP 指令,可以用来快速地实现各种数字信号处理算法。下图是图像信号处理主要流

30、程:我们的眼中用来分辨颜色的锥状细胞的差异,锥状细胞通过对三原色的感知来识别万色万物,而机器中是怎么样识别的呢? 人眼把世界放进大脑也可简单分为三步:眼球感应到像(传感器采集并转换成数字信号)转成神经信号传到大脑(通过通讯系统将信号传到处理器)大脑处理并存放(处理器转化成屏幕可显示与存储的格式请预览后下载!)。图像信号处理大体也是以这种流程捕捉图像并进行分析和存储的。4.4.1 黑电平校正(暗电流校正) 暗电流指传感器在没有入射光的情况下。存在一定的信号输出,这是因为半导体的热运动造成的。它的大小和传感器结构及温度有关,大概每升高9 ,其暗电流会添加1 倍。因为每一个像素存在不平衡性,因此像素

31、间暗电流也会不一致,造成电流噪声。一般情况下,在传感器中,实际像素要比有效像素多,像素区最靠边的行和列为不感光区,一般用作自己主动黑电平校正,其平均值作为校正值。4.4.2 颜色插补我们知道,Sensor的感光原理是通过一个一个的感光点对光进行采样和量化,但在Sensor中,每一个感光点只能感光RGB中的一种颜色。所以,通常所说的请预览后下载!30万像素或130万像素等,指的是有30万或130万个感光点。每一个感光点只能感光一种颜色。原始像素仅仅包括一种颜色的信息(R 或G 或B),要重建色彩画面。就必须从相邻的像素中得到失去的信息组成RGB三种颜色。红色及蓝色插补一般遵循近期原则,进行平均处

32、理。作为本像素的色彩值,由插值原理知,相邻像素间存在依赖关系,结果造成画面锐度减少。4.4.3 坏点检测图像传感器输出的数据不等于就是图像的实际数据,模组测试时,就要写一个软件,完成数据采集(获得Raw data)彩色插值(目的是获得RGB格式,便于图像显示)图像显示;这样就可以发现整个模组是否正常,有无坏点,脏点的等,检测出不良品;(软件的处理过程当中,为了获得更好的图像质量,还需要白平衡,gamma校正,彩色校正)4.4.4 颜色校正 因为人类眼睛可见光的频谱响应度和半导体传感器频谱响应度之间存在区别,还有透镜等的影响,插补后得到的RGB 值颜色会存在偏差,因此必须对颜色进行校正,一般通过

33、颜色校正矩阵来实现。详细的彩色矫正參数。能够通过试验或从传感器供应商中获得,当然要得到不失真的还原是不可能的,仅仅能重复调试达到最佳。一般通过标准色卡进行校正。4.4.5 Gamma 校正 Gamma 校正主要根据色度学原理进行调整。色彩在不同显示设备中频谱响应度不一样,造成颜色失真。失真成幂指数关系。因此调节相对简单,分别对R、G、B 调节就可以。4.4.6 RGB、YUV、RAW DATA区别YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的。人眼对色度的敏感程度要低于对亮度的敏感程度。YUV,

34、分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,请预览后下载!YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。RGB: 传统的红绿蓝格式,比如RGB565,其16-bi

35、t数据格式为5-bit R + 6-bit G + 5-bit B。G多一位,原因是人眼对绿色比较敏感。RAW RGB: sensor的每一像素对应一个彩色滤光片,滤光片按Bayer pattern分布。将每一个像素的数据直接输出,即RAW RGB data4.4.6.1 RGB与 YUV格式互相转换本程序中的函数可以将RGB24格式的像素数据转换为YUV420P格式的像素数据。函数的代码如下所示。1. unsignedcharclip_value(unsignedcharx,unsignedcharmin_val,unsignedcharmax_val)2. if(xmax_val)3. r

36、eturnmax_val;4. elseif(xmin_val)5. returnmin_val;6. else7. returnx;8. 9. 10. 11. /RGBtoYUV42012. boolRGB24_TO_YUV420(unsignedchar*RgbBuf,intw,inth,unsignedchar*yuvBuf)13. 14. unsignedchar*ptrY,*ptrU,*ptrV,*ptrRGB;15. memset(yuvBuf,0,w*h*3/2);16. ptrY=yuvBuf;17. ptrU=yuvBuf+w*h;18. ptrV=ptrU+(w*h*1/4

37、);19. unsignedchary,u,v,r,g,b;20. for(intj=0;jh;j+)21. ptrRGB=RgbBuf+w*j*3;22. for(inti=0;i8)+16;28. u=(unsignedchar)(-38*r-74*g+112*b+128)8)+128;29. v=(unsignedchar)(112*r-94*g-18*b+128)8)+128;30. *(ptrY+)=clip_value(y,0,255);请预览后下载!31. if(j%2=0&i%2=0)32. *(ptrU+)=clip_value(u,0,255);33. 34. else35

38、. if(i%2=0)36. *(ptrV+)=clip_value(v,0,255);37. 38. 39. 40. 41. returntrue;42. 43. 44. /*45. *ConvertRGB24filetoYUV420Pfile46. *paramurl_inLocationofInputRGBfile.47. *paramwWidthofInputRGBfile.48. *paramhHeightofInputRGBfile.49. *paramnumNumberofframestoprocess.50. *paramurl_outLocationofOutputYUVfi

39、le.51. */52. intsimplest_rgb24_to_yuv420(char*url_in,intw,inth,intnum,char*url_out)53. FILE*fp=fopen(url_in,rb+);54. FILE*fp1=fopen(url_out,wb+);55. 56. unsignedchar*pic_rgb24=(unsignedchar*)malloc(w*h*3);57. unsignedchar*pic_yuv420=(unsignedchar*)malloc(w*h*3/2);58. 59. for(inti=0;inum;i+)60. fread

40、(pic_rgb24,1,w*h*3,fp);61. RGB24_TO_YUV420(pic_rgb24,w,h,pic_yuv420);62. fwrite(pic_yuv420,1,w*h*3/2,fp1);63. 64. 65. free(pic_rgb24);66. free(pic_yuv420);67. fclose(fp);68. fclose(fp1);69. 70. return0;71. 72.调用上面函数的方法如下所示。请预览后下载!1. simplest_rgb24_to_yuv420(lena_256x256_rgb24.rgb,256,256,1,output_le

41、na.yuv);从源代码可以看出,本程序实现了RGB到YUV的转换公式:Y= 0.299*R+0.587*G+0.114*BU=-0.147*R-0.289*G+0.463*BV= 0.615*R-0.515*G-0.100*B在转换的过程中有以下几点需要注意:1)RGB24存储方式是Packed,YUV420P存储方式是Packed。2)U,V在水平和垂直方向的取样数是Y的一半转换前的RGB24格式像素数据lena_256x256_rgb24.rgb的内容如下所示。转换后的YUV420P格式的像素数据output_lena.yuv的内容如下所示。请预览后下载!4.4.6.1.1 基于FFmp

42、eg的实现利用FFmpeg中swscale实现YUV到RGB的转换,实现过程中,需要构造AVPicture结构,具体实现方法如下。bool YV12ToBGR24_FFmpeg(unsigned char* pYUV,unsigned char* pBGR24,int width,int height) if (width 1 | height 1 | pYUV = NULL | pBGR24 = NULL) return false; /int srcNumBytes,dstNumBytes; /uint8_t *pSrc,*pDst; AVPicture pFrameYUV,pFrameB

43、GR; /pFrameYUV = avpicture_alloc(); /srcNumBytes = avpicture_get_size(PIX_FMT_YUV420P,width,height); /pSrc = (uint8_t *)malloc(sizeof(uint8_t) * srcNumBytes); avpicture_fill(&pFrameYUV,pYUV,PIX_FMT_YUV420P,width,height); /U,V互换 uint8_t * ptmp=pFrameYUV.data1; pFrameYUV.data1=pFrameYUV.data2; pFrameY

44、UV.data 2=ptmp; /pFrameBGR = avcodec_alloc_frame(); /dstNumBytes = avpicture_get_size(PIX_FMT_BGR24,width,height); /pDst = (uint8_t *)malloc(sizeof(uint8_t) * dstNumBytes);请预览后下载! avpicture_fill(&pFrameBGR,pBGR24,PIX_FMT_BGR24,width,height); struct SwsContext* imgCtx = NULL; imgCtx = sws_getContext(

45、width,height,PIX_FMT_YUV420P,width,height,PIX_FMT_BGR24,SWS_BILINEAR,0,0,0); if (imgCtx != NULL) sws_scale(imgCtx,pFrameYUV.data,pFrameYUV.linesize,0,height,pFrameBGR.data,pFrameBGR.linesize); if(imgCtx) sws_freeContext(imgCtx); imgCtx = NULL; return true; else sws_freeContext(imgCtx); imgCtx = NULL

46、; return false; 这份代码的转换公式是YV12格式转化成RGB24格式的方法,公式如下:YUV(256 级别) 可以从8位 RGB 直接计算:Y = 0.299 R + 0.587 G + 0.114 BU = - 0.1687 R - 0.3313 G + 0.5 B + 128V = 0.5 R - 0.4187 G - 0.0813 B + 128反过来,RGB 也可以直接从YUV (256级别) 计算:R = Y + 1.402 (Cr-128)G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128)B = Y + 1.772 (Cb-128

47、)请预览后下载!4.4.6.2 YUV420P和H264数据流做视频采集与处理,自然少不了要学会分析YUV数据。因为从采集的角度来说,一般的视频采集芯片输出的码流一般都是YUV数据流的形式,而从视频处理(例如H.264、MPEG视频编解码)的角度来说,也是在原始YUV码流进行编码和解析。视频码流在视频播放器中的位置如下所示。 本文中的程序是一个H.264码流解析程序。该程序可以从H.264码流中分析得到它的基本单元NALU,并且可以简单解析NALU首部的字段。通过修改该程序可以实现不同的H.264码流处理功能。4.4.6.2.1 原理H.264原始码流(又称为“裸流”)是由一个一个的NALU组

48、成的。他们的结构如下图所示。其中每个NALU之间通过startcode(起始码)进行分隔,起始码分成两种:0x000001(3Byte)或者0x00000001(4Byte)。如果NALU对应的Slice为一帧的开始就用0x00000001,否则就用0x000001。请预览后下载!H.264码流解析的步骤就是首先从码流中搜索0x000001和0x00000001,分离出NALU;然后再分析NALU的各个字段。本文的程序即实现了上述的两个步骤。4.4.6.2.2 代码整个程序位于simplest_h264_parser()函数中,如下所示。cppview plaincopy/*最简单的视音频数据

49、处理示例*SimplestMediaDataTest*雷霄骅LeiXiaohua*leixiaohua1020*中国传媒大学/数字电视技术*CommunicationUniversityofChina/DigitalTVTechnology*本项目包含如下几种视音频测试示例:*(1)像素数据处理程序。包含RGB和YUV像素格式处理的函数。*(2)音频采样数据处理程序。包含PCM音频采样格式处理的函数。*(3)H.264码流分析程序。可以分离并解析NALU。*(4)AAC码流分析程序。可以分离并解析ADTS帧。*(5)FLV封装格式分析程序。可以将FLV中的MP3音频码流分离出来。*(6)UDP

50、-RTP协议分析程序。可以将分析UDP/RTP/MPEG-TS数据包。*Thisprojectcontainsfollowingsamplestohandlingmultimediadata:*(1)Videopixeldatahandlingprogram.ItcontainsseveralexamplestohandleRGBandYUVdata.*(2)Audiosampledatahandlingprogram.ItcontainsseveralexamplestohandlePCMdata.*(3)H.264streamanalysisprogram.ItcanparseH.264b

51、itstreamandanalysisNALUofstream.*(4)AACstreamanalysisprogram.ItcanparseAACbitstreamandanalysisADTSframeofstream.*(5)FLVformatanalysisprogram.ItcananalysisFLVfileandextractMP3audiostream.*(6)UDP-RTPprotocolanalysisprogram.ItcananalysisUDP/RTP/MPEG-TSPacket.*/#include#include#includetypedefenumNALU_TY

52、PE_SLICE=1,请预览后下载!NALU_TYPE_DPA=2,NALU_TYPE_DPB=3,NALU_TYPE_DPC=4,NALU_TYPE_IDR=5,NALU_TYPE_SEI=6,NALU_TYPE_SPS=7,NALU_TYPE_PPS=8,NALU_TYPE_AUD=9,NALU_TYPE_EOSEQ=10,NALU_TYPE_EOSTREAM=11,NALU_TYPE_FILL=12,NaluType;typedefenumNALU_PRIORITY_DISPOSABLE=0,NALU_PRIRITY_LOW=1,NALU_PRIORITY_HIGH=2,NALU_PRI

53、ORITY_HIGHEST=3NaluPriority;typedefstructintstartcodeprefix_len;/!4forparametersetsandfirstsliceinpicture,3foreverythingelse(suggested)unsignedlen;/!LengthoftheNALunit(Excludingthestartcode,whichdoesnotbelongtotheNALU)unsignedmax_size;/!NalUnitBuffersizeintforbidden_bit;/!shouldbealwaysFALSEintnal_reference_idc;/!NALU_PRIORITY_xxxxintnal_unit_type;/!NALU_TYPE_xxxxchar*buf;/!containsthefirstbytefollowedbytheEBSPNALU_t;FILE*h264bitstream=NULL;/!max_size,sizeof(char)=NULL)printf(GetAnnexbNALU:CouldnotallocateBufmemoryn);nalu-startcodeprefix_len=3;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!