基于Android的MJPEG网络摄像机设计

时间:2012-03-23来源:网络

DCT(Discrete Cosine Transform)变换,又称离散余弦变换是可逆的、离散的正交变换。它将原始图像色彩空问域转换为频谱域。由于相邻两点像素色彩很多是接近的,压缩这些不需要的数据必须利用图像信号的频谱特性。JPEG压缩原理的理论依据是图像信号频谱线大都分布在0~6 MHz范围内,而且一幅图像内大多数为低频频谱线,而高频的谱线只占图像比例很低的图像边缘或者细微纹理细节的信号时才出现。根据这一特性,在做数字图像处理时对包含信息量大的低频谱区域分配较多的比特数,相反的对于包含信息量低的高频谱区域分配较少的比特数,达到图像压缩的目的,而图像质量并没有肉眼可察觉的降低。除了DCT变换,常用的变化算法还有:Walsh-Hadamard沃尔什哈达玛变换、哈尔变换、傅氏变换等。
DCT变换公式为:
f.JPG
当u=v≠0时C(u)=1,C(v)=1。f(i,j)经过DCT变换之后,F(0,0)是直流系数,其他参数时为交流系数。经过DCT变换后一幅图像的DCT系数块集中在8×8矩阵的左上方,这里直流DC系数幅度最大,这一矩阵区域集中了图像的大部分低频频谱分量,离矩阵左上角越远的高频频谱几乎不含图像信息。变换过程本身虽然并不产生压缩作用,但是变换后的频率系数却非常有利于码率压缩。
量化是对DCT系数的一个优化过程,利用了肉眼的高频不敏感特性对数据进行大幅压缩。整个过程是简易的把频率域的每个成份除以对应的常数,并对结果四舍五入取整,整个流程的目的是减少非零的系数以及增加零值系数数目。量化是有损运算,是图像质量下降的主要因素。对于人眼对亮度与色差的敏感性不一致,分别使用亮度量化表与色度量化表。对量化后的数据采用zigzag蛇形编码,这是因为交流分量中含有大量的零值,zigzag编码可以产生更多连续的零值,对下一步使用行程编码非常有利。
行程编码(Run Length Coding)是一种根据相同数据连续重复多次的情况简化表示的算法。例如,5555333333999按照行程编码表示为(5,4)(3,6)(9,3)可以对数据,尤其是大量的零值压缩数据长度。
编码后的数据还须通过Huffman编码来压缩,Huffman编码的最大特点是使出现频率较高的数字小于8位,而出现频率低的数字大于8位,这使得数据大幅压缩。
到此数据的压缩过程结束,对压缩后的数据按照JPEG文件格式要求进行保存,加上文件开始标记Start Of Image=FFD8,文件结束标记End Of Image =FFD9,量化表标记Deftne Quanttzation Table=FFDB,霍夫曼编码表标记Ddfine Huffman Table=FFC4,帧开始标记Star Of Frame=FFC0等标记,再加上图片识别信息字节标记就最终形成完整的可用于传输或存储的JPEG帧图像,通过套接字接口不间断地发送JPEG图像即形成MJPEG视频流。
为提高CPU效率,减少进程间切换产生的开销,将压缩算法函数集成到单一线程里。JPEG核心压缩编码函数MCUcode实现如下:
g.JPG
其中Y1、Y2、Y3、Y4对应水平排列的4像素亮度值,CB、CR是水平排列以2像素为1单位像素的色度值。

3 Android客户端设计
Android是Google公司推出的针对移动设备的操作系统,底层采用Linux内核,应用程序采用类Java语言编写,并运行于类JVM虚拟机的Dalvik虚拟机之上。该系统具有开放源码免费授权的优势,功能完善和成熟,已获得厂商的广泛支持和大量市场份额。eclipse IDE开发环境友善,因此选用Android系统作为物联网摄像机客户端开发平台。
1 2 3 4

关键词: 摄像机 设计 网络 MJPEG Android 基于

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版