NASA ICER算法从论文到代码:icer_compression实现原理深度解读

发布时间:2026/8/20 20:19:34

NASA ICER算法从论文到代码:icer_compression实现原理深度解读
NASA ICER算法从论文到代码icer_compression实现原理深度解读【免费下载链接】icer_compressionProgressive, error tolerant, wavelet-based image compression algorithm项目地址: https://gitcode.com/gh_mirrors/ic/icer_compressionNASA ICER算法是喷气推进实验室JPL为深空探测量身打造的一款渐进式、基于小波变换的容错图像压缩算法曾用于火星探测漫游车任务的图像回传。而icer_compression项目正是这份NASA论文Progress Report 42-155的完整C语言开源实现。本文不贴大段代码只带新手从论文思想出发一步步看懂这个经典图像压缩算法在代码里到底是怎么落地的。一句话总结icer_compression 整数小波变换 位平面渐进编码 上下文建模熵编码 错误包容分段 CRC32校验全链路只使用整数运算、零动态内存分配天生为嵌入式与不可靠信道而生。什么是NASA ICER算法它为什么特殊ICERImage Compression Engine for Space诞生于深空通信场景火星探测器与地球之间的链路带宽极低、误码率高图像数据一旦损坏传统JPEG会导致整幅图花屏。ICER的设计目标因此非常硬核渐进式Progressive压缩数据按重要性排序输出接收端拿到任意截断的数据流都能解出低质量但完整的图像数据越多画质越高容错Error Tolerant把图像切成多个独立编码的段segment一段损坏只影响局部其余部分照常解码无损/有损通吃位平面全部传输即可无损重建纯整数运算不用浮点在缺乏FPU的航天级处理器上也能跑。这些特性与给普通用户看的JPEG截然不同也让ICER在遥感、卫星通信、无人机图传等对可靠性敏感的领域至今仍有参考价值。icer_compression 把论文里每一个公式都变成了可编译、可运行、可测试的C代码。从论文到代码先看懂项目结构克隆仓库后核心代码全部集中在lib_icer/目录下每个文件正好对应ICER论文中的一个模块这种一模块一文件的划分非常适合按图索骥源码文件对应论文模块职责lib_icer/src/icer_wavelet.c小波变换2D可分离整数小波分解与重构lib_icer/src/icer_compress.c压缩主流程生成packet、按优先级排序、组装输出流lib_icer/src/icer_context_modeller.c上下文建模16个上下文的状态机、符号预测lib_icer/src/icer_encoding.c熵编码器概率估计、bin划分、Golomb编码lib_icer/src/icer_decoding.c熵解码器与编码器完全对称的解码lib_icer/src/icer_partition.c分段把子带切成多个错误包容段lib_icer/src/icer_config.c配置表滤波器系数、上下文查表、bin概率阈值lib_icer/src/icer_color.c彩色扩展YUV三通道压缩lib_icer/src/crc32.c校验段级CRC32保护公共接口统一在lib_icer/inc/icer.h中声明示例程序在example/src/下如example_encode.c、example_decode_color.c命令行工具icer_util的源码是lib_icer/src/icer_util.c。核心原理一整数小波变换把图像拆成轮廓细节ICER的第一步是多级2D小波分解。代码里icer_wavelet_transform_stages_uint8做的事情很直观对每一级先对每行做一维小波变换再对每列做一维小波变换可分离变换得到四个子带LL低频近似相当于缩略图下一级继续对它分解HL / LH水平/垂直方向的高频细节HH对角方向的高频细节。多级分解后图像被组织成一个金字塔左上角是越来越小的LL缩略图周围包裹着各级细节子带。细节系数大多接近0这正是后面能大幅压缩的根本原因。与JPEG2000等使用浮点小波不同ICER全部使用整数提升小波滤波器系数写死在icer_config.c的icer_wavelet_filter_parameters表里共7种A、B、C、D、E、F、Q分母统一为16变换用位移和整数除法完成杜绝浮点误差、方便硬件实现。这段逻辑对应icer_wavelet_transform_2d_uint8与icer_wavelet_transform_1d_uint8。核心原理二位平面编码与渐进式压缩的精髓小波变换只是整形真正的渐进式来自位平面bitplane编码。代码的思路非常清晰对最深层LL子带先减去其均值DC偏移把能量集中在0附近把整幅系数转为符号-幅值表示对每个子带、每个分解层级从最高位平面到最低位平面逐层编码低位平面丢了只是画质略降高位平面丢了才会影响轮廓。在icer_compress.c中每个子带 × 层级 × 位平面 × 分段组合被封装成一个packet结构体icer_packet_context并计算一个priority优先级分解层级越浅、位平面越高优先级越高。所有packet经qsort排序后依次压缩写入输出流——接收端按顺序解码就能实现先轮廓、后细节的渐进重建。这也是ICER支持**字节配额byte quota**的原因-t 100000表示只允许输出10万字节编码器压缩到配额即停剩下的packet直接丢弃解码端自然得到对应质量的图像。核心原理三上下文建模 熵编码榨干最后一比特位平面只是一堆0/1直接存仍然很浪费。ICER用上下文建模为每个比特挑选最合适的概率模型再用自适应熵编码压缩。这部分代码在icer_context_modeller.c根据当前像素8个邻域的显著性该位以上是否已出现1统计出水平h、垂直v、对角d三个方向的邻居状态查表得到16个上下文编号之一查表定义在icer_config.c的icer_context_table_ll_lh_hl、icer_context_table_hh首次出现的符号位还利用邻域做符号预测只编码预测对不对的一致位进一步省比特每个上下文维护zero_count与total_count动态估计出现0的概率计数达到上限时整体减半ICER_CONTEXT_RESCALING_CAP 500让模型始终跟踪图像局部统计特性。熵编码器icer_encoding.c把这些概率映射到17个binICER_ENCODER_BIN_MAX 16概率高确定性高的bin用定长非前缀码概率低接近0.5、信息量大的bin用Golomb码概率0.5左右的直接裸编码。这种按概率分箱、各自最优化编码的手法本质是算术编码的简化近似换来的是极低的计算复杂度——非常适合没有乘除法加速的航天级MCU。核心原理四错误包容分段机制毁一段不毁全图这是ICER最招牌的能力代码实现在icer_partition.c。每级每个子带都会被切成若干error containment segments默认最多32段icer_generate_partition_parameters负责计算如何把一块矩形子带划分成尽量方正的segment块。每个segment独立完成上下文建模 熵编码全流程输出时带上完整包头结构体icer_image_segment_typedef前导码0x605BICER_PACKET_PREAMBLE用于在字节流中定位包层级、子带类型、段号、位平面号、图像宽高等元数据双CRC32校验数据区一个CRCdata_crc32包头一个CRCcrc32。解码端icer_find_packet_in_bytestream逐包扫描校验CRC通过才解码校验失败直接跳过该段。所以传输过程中哪怕丢了几个包图像也只是对应区域出现瑕疵其余全部正常——这正是深空通信最需要的鲁棒性。彩色图像支持YUV三通道各自压缩灰度之外icer_compression 还实现了论文没有的彩色扩展代码在icer_color.c。思路简单有效先把RGB转到YUV色彩空间Y亮度、U/V色度然后对三个通道分别执行完全相同的小波变换位平面编码流水线Y通道在打包优先级上还会被加权亮度更重要。对外接口是icer_compress_image_yuv_uint8/icer_decompress_image_yuv_uint8示例见example_encode_color.c与example_decode_color.c。快速上手编译、压缩、解压一条龙项目用CMake构建三步编译mkdir build cd build cmake -DCMAKE_BUILD_TYPERelease .. make会生成灰度/彩色的示例程序以及独立的命令行工具icer_util最简用法# 压缩默认参数 ./icer_util compress input.jpg output.bin # 解压必须指定彩色或灰度 ./icer_util decompress output.bin output.bmp --color # 指定分段数、分解级数、滤波器与字节配额 ./icer_util compress input.png output.bin --stages 5 --filter B --segments 10 -t 150000想在自有工程里集成只需在包含lib_icer/inc/icer.h前用宏选择编译范围USE_ENCODE_FUNCTIONS/USE_DECODE_FUNCTIONS/USE_UINT8_FUNCTIONS/USE_UINT16_FUNCTIONS然后调用icer_init()初始化查表再调用icer_compress_image_uint8或icer_decompress_image_uint8即可。支持8位和16位像素深度输入格式涵盖JPEG/PNG/BMP/TGA借助STB库输出为BMP。写在最后一份可以跑起来的论文读完这篇解读再回看 icer_compression 的源码你会发现NASA论文里的每个概念——整数小波、渐进位平面、上下文建模、错误包容、字节配额——都对应着lib_icer/src/下某段清晰可读的C代码。对想学习图像压缩原理的新手它是一份极佳的教科书级参考实现对做嵌入式或卫星通信的工程师它的纯整数、零动态分配设计也极具移植价值。论文是死的代码是活的这正是开源的意义所在。【免费下载链接】icer_compressionProgressive, error tolerant, wavelet-based image compression algorithm项目地址: https://gitcode.com/gh_mirrors/ic/icer_compression创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AI工程师手册进阶:状态管理与多段落研究报告流水线,规模化你的研究 Agent

AI工程师手册进阶:状态管理与多段落研究报告流水线,规模化你的研究 Agent

2026/8/20 20:09:34

AI工程师手册进阶:状态管理与多段落研究报告流水线,规模化你的研究 Agent 【免费下载链接】ai-angineers-handbook 项目地址: https://gitcode.com/gh_mirrors/ai/ai-angineers-handbook 当你还在用单个 Prompt 让 AI 写"研究报告"时&…

flipperzero-rs架构剖析:四层crate设计与FFI绑定原理深度解析

flipperzero-rs架构剖析:四层crate设计与FFI绑定原理深度解析

2026/8/20 20:09:34

flipperzero-rs架构剖析:四层crate设计与FFI绑定原理深度解析 【免费下载链接】flipperzero-rs Rust on the Flipper Zero 项目地址: https://gitcode.com/gh_mirrors/flipp/flipperzero-rs flipperzero-rs 是一个用 Rust 为 Flipper Zero 开发应用程序的开源…

meta-glasses-api 语音回复指南:用 OpenAI、ElevenLabs、Minimax 让 AI 开口说话

meta-glasses-api 语音回复指南:用 OpenAI、ElevenLabs、Minimax 让 AI 开口说话

2026/8/20 20:09:34

meta-glasses-api 语音回复指南:用 OpenAI、ElevenLabs、Minimax 让 AI 开口说话 【免费下载链接】meta-glasses-api "Hey Meta send a message to ChatGPT" Mai: A Hacky Messenger browser extension & pseudo API for the Meta Glasses :eyeglass…

通关Rust Koans之后怎么走?5条进阶路线与官方学习资源推荐

通关Rust Koans之后怎么走?5条进阶路线与官方学习资源推荐

2026/8/20 21:19:40

通关Rust Koans之后怎么走?5条进阶路线与官方学习资源推荐 【免费下载链接】rust-koans Koans for the Rust programming language 项目地址: https://gitcode.com/gh_mirrors/ru/rust-koans Rust Koans 是一套以"禅宗公案"方式设计的 Rust 语言练…

Rust Koans 是什么?用禅宗公案式学习法10倍速入门Rust编程的完整指南

Rust Koans 是什么?用禅宗公案式学习法10倍速入门Rust编程的完整指南

2026/8/20 21:19:40

Rust Koans 是什么?用禅宗公案式学习法10倍速入门Rust编程的完整指南 【免费下载链接】rust-koans Koans for the Rust programming language 项目地址: https://gitcode.com/gh_mirrors/ru/rust-koans 想入门 Rust 编程,却觉得官方文档太厚、语法…

基于SpringBoot+Vue.js的图书馆综合服务平台设计与实现(源代码+文档+PPT+调试+讲解)

基于SpringBoot+Vue.js的图书馆综合服务平台设计与实现(源代码+文档+PPT+调试+讲解)

2026/8/20 21:19:40

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

磁盘空间告急怎么办?免费开源Czkawka的14个清理工具,帮你找出重复文件、相似图片和空文件夹

磁盘空间告急怎么办?免费开源Czkawka的14个清理工具,帮你找出重复文件、相似图片和空文件夹

2026/8/20 21:19:40

磁盘空间告急怎么办?免费开源Czkawka的14个清理工具,帮你找出重复文件、相似图片和空文件夹 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/…

零基础AI入门完整指南:12周24课免费课程,把人工智能从概念到实战一次学明白

零基础AI入门完整指南:12周24课免费课程,把人工智能从概念到实战一次学明白

2026/8/20 21:19:40

零基础AI入门完整指南:12周24课免费课程,把人工智能从概念到实战一次学明白 【免费下载链接】AI-For-Beginners 12 Weeks, 24 Lessons, AI for All! 项目地址: https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners 零基础学人工智能最怕什么…

兼容IDA 6.6到7.4+:IdaRef多版本适配的代码设计智慧

兼容IDA 6.6到7.4+:IdaRef多版本适配的代码设计智慧

2026/8/20 21:09:39

兼容IDA 6.6到7.4:IdaRef多版本适配的代码设计智慧 【免费下载链接】idaref IDA Pro Instruction Reference Plugin 项目地址: https://gitcode.com/gh_mirrors/id/idaref IdaRef 是一款开源的 IDA Pro 指令参考插件,它把"光标指到哪条指令、…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/19 3:36:59

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/20 21:07:35

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/19 8:02:16

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换

2026/8/20 0:08:45

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com…

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒

2026/8/20 0:08:45

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 判断你是否…

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印

2026/8/20 0:08:45

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 按 3MF 官方规范的字面意思,一…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/18 12:20:24

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…