PNG Encoder - Добавить собственную реализацию фильтра - PullRequest
2 голосов
/ 14 апреля 2011

В настоящее время я работаю над собственной реализацией фильтра PNG. Я использую нейронную сеть, чтобы попытаться создать лучший прогноз, чем существующие существующие фильтры PNG:

  • 0 - нет
  • 1 - Sub
  • 2 - Вверх
  • 3 - Средний
  • 4 - Паэт
  • 5 - Моя реализация (с предсказанием нейронной сети)

Для получения дополнительной информации: http://www.w3.org/TR/PNG/#9Filters

Я уже посмотрел несколько библиотек:

  • pngcrush (реализовано в c ..)
  • Keypoint - PngEncoder (мой любимый на данный момент)
  • ObjectPlanet - PngEncoder (Я должен заплатить 1000 $ за источник ..: P)

Есть еще несколько. Но теперь у меня вопрос: знаете ли вы другие PNG-кодеры (написанные на Java) , где легко добавить собственную реализацию фильтра или есть другие возможности использовать мой собственный фильтр?

Большое спасибо за ваши ответы!

Ответы [ 2 ]

8 голосов
/ 15 апреля 2011

Некоторое время назад я создал небольшую чистую библиотеку PNG на Java (кодировщик-декодер)
http://code.google.com/p/pngj/

Это небольшой, довольно полный (не полностью), он не зависит от сторонних библиотек, и код доступен (и, я надеюсь, легко понять). Вы можете копать там, если вы хотите реализовать пользовательский фильтр. Если вам нужна помощь, вы можете спросить меня.

Но имейте в виду, что (как указано в другом ответе) стандарт PNG не поддерживает пользовательские фильтры, только вы сможете читать закодированные изображения.

2 голосов
/ 14 апреля 2011

Это не ответ на вопрос, а скорее "это не сработает".

Раздел Спецификация PNG , который вы связали, определяет метод Filter 0 и список типов фильтров (функций) для этого метода. Этот список исправлен:

Метод фильтра 0 определяет именно этот набор из пяти типов фильтров, и это не должно быть продлен. Это гарантирует, что декодерам не нужно распаковывать данные, чтобы определить, он содержит неподдерживаемые типы фильтров: достаточно проверить метод фильтра в IHDR.

Итак, вы не можете просто добавить свой прогноз нейронной сети здесь.

То, что вы могли бы сделать, - это создать новый метод Filter (метод 1 или тому подобное - но см. Раздел 4.9 ), который затем может включать ваш тип фильтра нейронной сети.

Но проблема в том, что тогда каждое программное обеспечение, которое хотело бы считывать PNG, произведенные вашим программным обеспечением, должно было бы также поддерживать этот новый метод фильтрации. Так что, если вы не хотите делать это просто для внутреннего хранилища изображений, это бесполезно.


Где вы на самом деле могли бы использовать свою нейронную сеть, это для выбора правильного типа фильтра (из пяти указанных) для каждой линии сканирования, чтобы результирующий сжатый поток данных был как можно меньшим (или эффективным, или ...) .

...