在 Mojo 中解析 PNG 图像 - fnands

主要观点:作者尝试跟随 Mojo 的发展,在 Basalt 项目中研究纯 Mojo 的机器学习框架,决定从读取 CIFAR - 10 数据集的 PNG 图像开始。详细介绍了在 Mojo 中实现 PNG 解析的过程,包括读取文件、解析块(Chunk)、解压缩(DEFLATE)、去过滤(Unfilter)等步骤,最终将解析后的数据转换为 Tensor,并将相关逻辑封装在PNGImage结构体中。还提到了对 16 位图像处理的疑问以及将代码整理为库Mimage的计划。
关键信息

  • 以 PIL 库的测试图像为例,介绍 Mojo 中路径处理和文件读取。
  • 定义Chunk结构体和解析块的函数parse_next_chunk
  • 使用zlib通过 Mojo 的 FFI 实现 PNG 解压缩。
  • 实现多种去过滤函数undo_filter用于恢复像素值。
  • 编写函数将解析后的数据转换为 Tensor 并进行验证。
  • 介绍PNGImage结构体用于封装 PNG 图像的相关信息和操作。
    重要细节
  • Mojo 读取文件数据时将其视为有符号 8 位整数,有提案将其改为无符号 8 位整数。
  • PNG 图像的块结构包括长度、类型、数据和 CRC 校验。
  • 解压缩使用zlibuncompress函数,注意处理内存分配和错误。
  • 去过滤根据不同的过滤器类型进行相应的运算恢复像素值。
  • PNGImage结构体中包含图像的各种属性和处理方法,如判断文件类型、解析头部信息等。
阅读 9
0 条评论