正如由机器人完成的任务生成的数据非常宝贵,需要返回这些数据的通信带宽也是非常宝贵的。对于较小的图像,比如那些通过子图定位或者抽样操作,图片大小已经减少了,因此直接执行“下行”操作而不做压缩处理是可行的。更大的图像,比如全尺寸大小的ssI图像,“下行”操作会消耗很多带宽,因此在这种情况下,通常采用压缩方法来解决。ICS采用像素映射和扩展,提供了两种压缩和减少图像大小的方式。对于某个特定的图片,采用哪种压缩或减少图像大小方式,主要依赖于图像需要达到的保真程度,高保真被认为是图像的一个必要方面。在一些情况下,每个像素8位就足够了;而在其他一些情况下,JPEG压缩本身造成的图像保真损失是可以接受的;而对于一些情况,图像需要保持尽可能高的保真,则可以采用无损压缩的方式。在ICS内部,一台JPEG压缩器采用所有的整数算术计算和就地操作,提供所谓的“有损”压缩方式。JPEG被认为是有损的,因为其压缩过程丢失了部分图像数据。JPEG可以通过命令,对图像数据实现不同程度的压缩。最终代码是松散式地基于Mars’98使命的JPEG压缩器;虽然凤凰号火星着陆探测器的ICS的实现只采用了其部分原始代码。原始的JPEG压缩器使用的是浮点数乘以全尺寸大小的图像数组作为缓存,并采用动态内存分配方式。对于这种方式如何在飞行软件上正常工作,我仍然感到很困惑,不过它确实能够正常工作。在压缩代码中使用浮点数来表示像素数据,这也意味着对于每个图像,比起16位整数的原始图像表示方式,浮点数占用了其四倍的内存空间。第二种压缩方式,也称为Rice无损压缩(Rice Lossless)或者Rice压缩,采用了由Jet Propulsion实验室的Robert Rice开发的一种算法。该Rice算法可以对图像数据实现几乎2:1的压缩效果,且没有数据损失。而JPEG算法在压缩过程中丢失了部分数据。Rice压缩方法也是在图像槽中就地对图像进行压缩。两种无压缩的缩小图像大小技术或者采用查询表,把12位的像素值映射到8位的像素值,或者采用位缩小技术,对像素数据向右移动4位,生成一个每个像素8位的图像。JPEG和Rice压缩函数都接受12位或者8位的图像数据。
……
展开
——TimO'Reilly,O'ReillyMedia公司创始人兼CEO