Tehada / bitcrasher

State-of-the-art image separator for djvulibre

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Bitcrasher

Алгоритм разделения текста и фона для pgm изображенияй.

Установка

Для работы потребуется opencv. Инструкция по установке библиотеки для ubuntu и os x. После установки opencv достаточно запустить Makefile, который создаст исполняемый файл bitcrasher.

Использование

./bitcrasher input.pgm output.pbm

Для тестирования можно запустить ./test_bitcrasher.sh, но перед этим нужно создать директорию test_bitcrasher в директории images, т.к. пустые директории Github не хранит.

Описание Bitcrasher

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

В djvu разделение основано на hierarchical clustering. Этот алгоритм изначально применяет k-means для больших блоков, чтобы получить цвет фона и текста, а уже затем для меньших блоков и потом предполагает, что эти же значения подходят для всех меньших блоков. Но в случае непрерывно изменяющегося фона такой метод не даёт качественного разделения. Также цвета фона и текста могут в некоторых местах пересекаться, что не обрабатывается этим алгоритмом.

Поэтому был разработан алгоритм, учитывающий это, который пытается подобрать линейную модель, описывающую фон. В основе лежит идея поиска линейных функций, которые смогут приближать фон. Рассматриваются блоки пикселей и оценивается их возможность принадлежать фону. Для этого используется метод наименьших моментов, который подбирает модель для блока пикселей. Реализация ADMM была взята отсюда

Описание

Алгоритм предназначен для отделения текста от гладкого фона. Предлагается использовать два базовых подхода. Оба основаны на том факте, что гладкий фон в каждом блоке можно представить линейной комбинацией небольшого количества базисных функций, в то время как текст образует резкие разрывы. Алгоритм в каждом блоке разделяет пиксели на фон и текст, пытаясь смоделировать фон гладкой функцией и использует для этого две техники. Первая основана на устойчивой регресси (ссылка), где внутренние пиксели относятся к фону, а всё остальное к тексту. Второй подход известнем как sparse decomposition суть его заключается в моделиовании фонового слоя с помощью гладких и разросанных компонент. Алгоритм предлагается использовать для улучшения степени сжатия сканированных изображений. Bitcrasher является улучшенным аналогом утилиты cpaldjvu, которая плохо справляется с неодноцветным фоном (может появиться на сканированном изображении в месте перегиба страницы, например).

Что дальше? Мы получили более качественное разделение на текст и фон => станет больше похожих символов, которые кодируются одним шаблоном => более высокая степень сжатия и меньше шума на документе.

Сравнение с аналогичными алгоритмами

В левом верхнем углу оригинальное изображение, далее по часовой стрелке: djvulibre, bitcrasher, simpledjvu.

В image собраны все тестовые результаты. Директория original содержит исходные изображения в формате pgm. В директории djvulibre результат работы утилиты cpaldjvu в формате pbm. В том же формате хранятся результаты работы simpledjvu и bitcrasher в simpledjvu и bitcrasher. В compare содержатся склеенные изображения пониженного качества, но небольшого размера.

Задачи на следующий месяц

(в порядке приоритета, уровень сложности указан в скобках)

  • научиться передавать полученное бинарное изображение в djvulibre (средний)
  • добавить разделение на основе RANSAC
  • ускорить обработку в несколько раз банальным запуском нескольких параллельных процессов, которые обрабатывают неависимо блоки (средний)
  • реализовать без использования тяжеловесной библиотеки opencv (средний)
  • добавить распознавание текста (средний)
  • добавить работу с изображениями любых размеров (сейчас Bitcrasher подгоняет размер под кратный 64) (высокий)
  • добавить парсер параметров (легкий)
  • провести более детальное исследование теоретической составляющей алгоритма (средний)

Ссылки

Папка с изображениями.

Полное писание алгоритма на английском можно найти здесь

Комментарии ментора

------------ Comments (A.S.) ---------

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

В общем, мне кажется, что итогом первого этапа могли бы быть

  1. собственные алгоритмы с помощью нейронной сети
  2. набор изображений разного качества и достаточно разнообразных, не только из DEBCO, но и вообще (потому что, скажем, печатные тексты сильно отличаются от ку
  3. обзор, какие алгоритмы существуют и
  4. сравнительные результаты тестирования.

Вопрос о встраивании этого в djvulibre и вообще тогда можно пока (ненадолго :-) отложить...

Программы Межирова: https://gitlab.com/alih/turbinarize.git

https://jwilk.net/software/didjvu

minidjvu (sourceforge)

Польские коллеги:

http://bc.klf.uw.edu.pl/298/6/JSBatal_Library-12s.pdf https://jwilk.net/software/didjvu и др.

About

State-of-the-art image separator for djvulibre


Languages

Language:C++ 95.4%Language:Shell 3.3%Language:Makefile 1.4%