2

我目前正在自己​​实现 PNG 过滤器。我正在使用神经网络来尝试创建比当前现有的 PNG 过滤器更好的预测:

  • 0 - 无
  • 1 - 子
  • 2 - 向上
  • 3 - 平均
  • 4 - 帕斯
  • 5 -我的实现(使用神经网络预测)

欲了解更多信息:http ://www.w3.org/TR/PNG/#9Filters

我已经看过几个图书馆:

  • pngcrush (在 c.. 中实现)
  • Keypoint - PngEncoder (是我目前最喜欢的)
  • ObjectPlanet - PngEncoder (我必须为 src 支付 1000 美元.. :P)

还有一些。但是我现在的问题是,您知道其他一些 PNG 编码器(用 Java 编写),可以很容易地添加自己的过滤器实现,或者是否有其他可能使用我自己的过滤器?

非常感谢您的回答!

4

2 回答 2

8

前段时间我做了一个小的纯Java PNG库(编码器-解码器)
http://code.google.com/p/pngj/

它很小,很完整(不完全),它不依赖第三方库,并且代码可用(并且,我希望,易于理解)。如果你想实现一个自定义过滤器,你可以在那里挖掘。如果你需要一些帮助,你可以问我。

但请记住(正如其他答案所指出的)PNG 标准不支持自定义过滤器,只有您才能读取编码图像。

于 2011-04-15T15:52:07.590 回答
2

这不是问题的答案,而是“它不会以这种方式工作”。

您链接的PNG 规范部分定义了Filter 方法 0,以及该方法的过滤器类型(函数)列表。这个列表是固定的:

过滤器方法 0 准确地指定了这组五种过滤器类型,不应扩展。这确保解码器无需解压缩数据以确定它是否包含不受支持的过滤器类型:检查 IHDR 中的过滤器方法就足够了。

因此,您不能简单地在此处添加您的神经网络预测。

您可以做的是创建一个新的过滤器方法(方法 1 等 - 但请参阅第 4.9 节),然后可以包含您的神经网络过滤器类型。

但问题是,每个想要读取您的软件生成的 PNG 的软件也都需要支持这种新的过滤器方法。因此,如果您不想仅仅为了您的内部图像存储而这样做,那么这不是什么有用的事情。


您实际上可以使用您的神经网络的地方是为每个扫描线选择正确的过滤器类型(给定的五个过滤器类型),以便生成的压缩数据流尽可能小(或高效或......)。

于 2011-04-14T00:05:34.887 回答