ARM与摄像头接口设计 - 基于ARM与CPLD的无线内窥系统设计(3)
- UID
- 1029342
- 性别
- 男
|
ARM与摄像头接口设计 - 基于ARM与CPLD的无线内窥系统设计(3)
4.1 JPEG-LS工作原理简介 如图5所示,JPEG-LS的编码过程主要包括预测、上下文建模和熵编码。核心算法LOCO-I采用邻域非线性预测和Golomb熵编码。
上下文建模是JPEG-LS编码的基础,使用的建模方法是基于对上下文的认识。上下文首先根据图5中a、b、c、d处像素值决定对x处像素足采用常规模式编码还是采用游程模式编码。当从上下文估计的连续像素在近似无失真编码要求的容限内几乎完全相同时,选择游程模式;否则,选择常规模式。
常规模式下首先完成预测。预测器对位于a、b、c等3个邻近像素的重建组值Ra、Rb、Rc进行综合,形成x像素的预测值Px,即:
预测误差是x像索的实际值和预测值的差分。通过一个与上下文有关的项对预测误差进行修正,以补偿预测中的系统偏移。如果采用近无损编码,则要对预测误差进行量化,所允许的最大误差用一个“NEAR“参数表示。对已修正的预测误差进行Golomb编码。Golomb编码相当于几何分布下的Huffman编码。它依赖于上下文,而前面编码的预测误差也是以相同的上下文为基础。
为进一步提高数据压缩效率,JPEG-LS引入了游程模式。此时编码过程直接跳过预测和误差编码程序:编码器从x处开始对像素值和a处像素重建值相同的一系列连续像素进行计数,即统计游程的长度。当遇到一个具有不同值的像素或当前行的行尾时,游程终止。该游程长度经过一个专门的性能更好、更适用的Golomb编码扩展程序来编码。
4.2 JPEG-LS的移植问题
本系统使用HP实验室提供的开源JPEG-LS开发包。完整的JPEG-LS开发包支持多种颜色模型,如多平面压缩、逐行或者逐点等压缩方式。本系统考虑到ARM系统资源的限制,只裁减了其中的逐行单文件压缩方式。原始开发包运行在Linux或者Windows平台上,移植过程最主要的工作包括3点。
①裁减不必要的功能,如原始开发包中对多图像编码的支持。
②针对系统设计移植后的接口,如本模块移植后,只提供以下几个接口:
jls_global_init,全局初始化函数,计算查询表等,只需要启动时调用一次;
jls_image_init,每帧图像开始压缩时都要调用一次的初始化;
jls_encode_one_line,压缩一行图像。
③对原开发包中使用的动态内存分配需要移植,解决的方案有2个:
开发一个简单的内存管理模块;
手动分配内存。
考虑到源码包中使用的动态内存不多,系统采用第2种方案。在移植过程中,建议先在PC上分配好一大块内存,然后,给开发包中需要分配的地方手动分配。在PC上调试通过之后,就可以直接在ARM上面使用了。
5 调试及优化方法
5.1调试方法
嵌入式系统的调试是一个很繁琐而复杂的过程。在调试之前划分好模块,可以大大提高调试效率;另外为了调试,还需要添加一些计划项目之外的调试工具。
本系统的调试工作分为3个部分。
(1)蓝牙无线链路层调试
蓝牙无线链路层的调试可以直接借助PC上很多现有的串口工具来实现。
(2)CMOS摄像头调试
CMOS摄像头的调试有两个部分:SCCB配置时序、RGB图像数据时序。
一般的处理器都不带SCCB接口,因此要用处理器的口线模拟SCCB时序。此时的调试一般都是通过示波器观察模拟的时序,看足否符合芯片手册上的要求。为了验证是否正确,一般可先读一个指定的寄存器(这些寄存器都有出厂默认值);然后写一个数据,读取出来验证是否吻合。
RGB图像数据时序由CPLD产生,此时的调试需要ARM来配合。本系统在调试时,在PC上编写了一个简单的串口接收程序,ARM把SRAM中的图像数据通过串口发送给该PC,PC上的程序把这些原始的RGB数据插值并显示出来,从而可以得知CPLD的时序是否正确。当然,调试时序时,示波器仍然是必不可少的工具。
(3)JPEG-LS算法调试
JPEG-LS算法的调试分为两个步骤:PC上的算法验证和目标板上的调试。
PC上的算法验证使用VC6.O模拟目标板上的运行环境,测试目标板上的各个功能接口。本部分的验证代码可供下载。
目标板上调试时,还是要借助串口,把压缩的图像和原始图像通过串口发送至PC。Pc上的JPEG-LS解码程序解码压缩图像,然后与原始图像对比,从而找出算法中的错误。 |
|
|
|
|
|