Вернуться к разделу "Проект BookScanLib".


Реализация проекта BookScanLib

(Страница будет постоянно дорабатываться)

Эта страница является основной рабочей страницей проекта. Здесь будет отображаться общий ход и основные этапы развития проекта BookScanLib. Эта страница будет обновляться наиболее часто (по сравнению с другими).

Форум реализации

Обсуждение проекта начато на форуме Исходники.RU здесь:

1. Проект BookScanLib: http://forum.sources.ru/index.php?showtopic=160748
Это - основной топик проекта. Здесь обсуждаем всё "только по делу" - алгоритмы, их работу, литературу по теме, Интернет-ссылки на материалы по теме и т.п.
2. Обсуждение проекта BookScanLib: http://forum.sources.ru/index.php?showtopic=161275
Это - вспомогательный топик проекта. Так сказать, "деловой флейм". Здесь можно обсудить все общие аспекты проекта, не относящиеся напрямую к его программной реализации - ход развития проекта, его общую стратегию и философию, организационные подходы и т.п.

Перед тем, как писать что-либо в данном топике, обязательно прочитайте его особые Правила.

Конечно, подобное разделение обсуждения на 2 топика довольно условно - иногда бывает действительно сложно выбрать между ними. Однако следует по-возможности придерживаться такого разделения - во избежание "информационного хаоса".

Если у Вас есть какие-то конкретные материалы по теме проекта - исходники соответствующих алгоритмов, Интернет-ссылки на них, или информация о статьях о программировании растровой графики - Вы можете зарегистрироваться на этом форуме и принять участие в обсуждении. (Не забудьте сначала прочитать местные Правила форума).

Если у Вас пока нет ничего подобного - пожалуйста, не регистрируйтесь на этом форуме "просто так" - иначе проект мгновенно "утонет" в массе пустых разговоров "ни о чём". То есть не надо регистрироваться на этом форуме только лишь для того, чтобы сказать нечто вроде: "Здраствуйте, мне нравится этот проект, я присоединяюсь" или "Сканировать книги - это хорошо и здорово" - это никому не нужно и не интересно. Интерес представляют только конкретные программистские материалы по теме проекта - алгоритмы и т.п. или деловые идеи (можно общие, не обязательно конкретные) для развития проекта.

Все заинтересовавшиеся могут также связаться со мною по электронной почте. Адрес - внизу страницы.


Этапы проекта

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

1. Знакомство с FreeImage. На первом этапе проекта BookScanLib мы создаём каркасное консольное Win32-приложение на базе FreeImage. Оно может быть использовано как для первого знакомства с библиотекой FreeImage, так и как отправная точка для всего проекта.

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

3. Памятка участникам проекта BookScanLib. Эта памятку я написал для всех тех, кто заинтересовался проектом BookScanLib, и хотел бы в нём как-либо поучаствовать, но не знает, с чего начать и что, собственно, делать.

4. Базовые понятия компьютерной графики. Для программной работы с компьютерной графикой программисту необходимо знать хотя бы самые базовые её понятия. Я составил небольшую табличку, куда вошли самые действительно простейшие и необходимые понятия. Более сложные понятия мы рассмотрим позже.

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

6. FreeImage-функции поворота растра. Функция поворота растра - одна из наиболее значимых для проекта BookScanLib. В библиотеке FreeImage уже реализованы 2 такие функции: FreeImage_RotateClassic, FreeImage_RotateEx. Рассмотрим эти функции более подробно.

7. Улучшенный алгоритм RotateClassic. Как уже говорилось в пункте 6. FreeImage-функции поворота растра, функция поворота растра FreeImage_RotateClassic обладает некоторыми недостатками, из-за которых она непригодна к прямому использованию в проекте BookScanLib. Я подкорректировал функцию FreeImage_RotateClassic с целью устранения этих недостатков.

8. Программная реализация алгоритма Deskew. При сканировании книга обычно кладётся на предметное стекло сканера по сути дела с небольшим перекосом относительно сторон сканера. Алгоритм Deskew ("de-skew" - от англ. "skew" - наклон, склон, скос, уклон) автоматически устраняет подобный перекос страниц. Рассмотрим пример программной реализации данного алгоритма на базе библиотеки FreeImage.

9. Программная реализация базового алгоритма Despeckle. При сканировании книг изображения страниц текста практически всегда получаются "зашумленными" многочисленными мелкими крапинками - за счёт микронеровностей бумаги, локальных перепадов яркости при преобразовании из серого в чёрно-белое и т.п. Для удаления этих крапинок существуют различные алгоритмы Despeckle ("de-speckle" от англ. "speckle" - крапинка, пятнышко).

10. Программная реализация алгоритма Normal Despeckle. В прошлом пункте мы создали канонический алгоритм Despeckle на базе медианного фильтра. Однако, он оказался слишком медленным. В этом пункте мы сделаем более "быструю" реализацию алгоритма Despeckle.

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

12. Морфологические фильтры. Под морфологическими фильтрами в данном случае понимаются следующие алгоритмы: 1. Расширение (Erosion) 2. Сжатие (Dilation). 3. Нахождение расширенного контура (Erosion Contour). 4. Нахождение сжатого контура (Dilated Contour).

13. Фильтр Unsharp Mask (на базе Gaussian Blur). Фильтр Unsharp Mask (Нерезкое Маскирование) - это качественное средство для придания резкости обрабатываемому изображению.

14. Фильтр Selective Gaussian Blur. Фильтр Selective Gaussian Blur (избирательное гауссово размытие) предназначен для размытия изображения с сохранением деталей.

15. Простейший фильтр Adaptive Smoothing. Фильтр Adaptive Smoothing (адаптивное сглаживание) предназначен для контурного сглаживания символов. Данная реализация является простейшей (и, к сожалению, она довольно некачественна).

16. Простейший фильтр Illuminance Correction. Фильтр Illuminance Correction (коррекция освещённости) предназначен для выравнивания неравномерностей освещённости скана и приведению её вариаций к среднему значению.

17. Простой Bicubic Resize. Алгоритм Простой Bicubic Resize (изменение размера с бикубическим сглаживанием) применяется для произвольного изменения размера растровой картинки. Этот алгоритм является однопроходным.

18. Простой Bilinear Resize. Алгоритм Простой Bilinear Resize (изменение размера с билинеарным сглаживанием) применяется для произвольного изменения размера растровой картинки. Этот алгоритм является однопроходным.

19. Nearest Neighbor Resize. Алгоритм Nearest Neighbor Resize (изменение размера по ближайшему пикселю) применяется для произвольного изменения размера растровой картинки.Этот алгоритм является однопроходным.

20. Bicubic Rotate. Алгоритм Bicubic Rotate (поворот с бикубическим сглаживанием) применяется для поворота растровой картинки на произвольный угол.

21. Bilinear Rotate. Алгоритм Bilinear Rotate (поворот с билинеарным сглаживанием) применяется для поворота растровой картинки на произвольный угол.

22. Nearest Neighbor Rotate. Алгоритм Nearest Neighbor Rotate (поворот по ближайшему пикселю) применяется для поворота растровой картинки на произвольный угол.

23. Бинаризация Otsu Thresholding. Бинаризация Otsu Thresholding (Оцу-бинаризация) применяется для преобразования серой (8-битной) растровой картинки в чёрно-белую (1-битная).

24. Бинаризация Sauvola Thresholding из OCRopus. Бинаризация Sauvola из проекта OCRopus применяется для преобразования серой (8-битной) растровой картинки в чёрно-белую (1-битная).

25. Бинаризация Sauvola Thresholding. Бинаризация Sauvola применяется для преобразования серой (8-битной) растровой картинки в чёрно-белую (1-битная).

26. Бинаризация Maximum Entropy Thresholding. Бинаризация Maximum Entropy Thresholding применяется для преобразования серой (8-битной) растровой картинки в чёрно-белую (1-битная).

27. Бинаризация Mixture Modeling Thresholding. Бинаризация Mixture Modeling Thresholding применяется для преобразования серой (8-битной) растровой картинки в чёрно-белую (1-битная).

28. Бинаризация Niblack Thresholding. Бинаризация Niblack Thresholding применяется для преобразования серой (8-битной) растровой картинки в чёрно-белую (1-битная).

29. Фильтр Adaptive Wiener. Фильтр Adaptive Wiener применяется для размытия фона (подавления шума) серой (8-битной) растровой картинки перед бинаризацией.

30. Бинаризация Gatos Thresholding. Бинаризация Gatos Thresholding применяется для преобразования серой (8-битной) растровой картинки в чёрно-белую (1-битная).

31. Бинаризация White Rohrer Thresholding. Бинаризация White Rohrer Thresholding применяется для преобразования серой (8-битной) растровой картинки в чёрно-белую (1-битная).

32. Бинаризация Abutaleb Thresholding. Бинаризация Abutaleb Thresholding применяется для преобразования серой (8-битной) растровой картинки в чёрно-белую (1-битная).

33. Бинаризация Bernsen Thresholding. Бинаризация Bernsen Thresholding применяется для преобразования серой (8-битной) растровой картинки в чёрно-белую (1-битная).

34. Бинаризация DjVu Thresholding. Бинаризация DjVu Thresholding применяется для преобразования цветной (24-битной) растровой картинки в чёрно-белую (1-битная).

35. Бинаризация Tsai Moment Preserving Thresholding. Бинаризация Tsai Moment Preserving Thresholding применяется для преобразования серой (8-битной) растровой картинки в чёрно-белую (1-битная).

Следите за обновлениями этого раздела, все события проекта будут своевременно тут отображаться.


Автор: monday2000.

15 ноября 2006 г.

E-Mail  (monday2000 [at] yandex.ru)

Hosted by uCoz