![]() |
|
![]() ![]() ![]() |
|
Y-Vladimir |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 16.7.2004 Где: Казань Репутация: 1 Всего: 6 |
Задача в следующем: есть отсканированное бинарное изображение страницы, на которой есть текст с рисунками. Необходимо выделить области с текстом и области с изображениями подобно тому, как это делает FineReader на этапе анализа макета страницы. Т.е. необходим некоторый критерий определения текст или рисунок содержится в данном фрагменте. Я пока придумал следующий подход:
Изображение равномерно разбивается на квадратные сегменты с условием, чтобы в сегменте помещалось 2-5 строк текста. Вот 3 признака того, что в данном сегменте содержится текст: 1). Доля черных пикселей от 0.1 до 0.4 2). В пределах сегмента все элементы (точки, линии) примерно равной толщины 3). Есть пустые (или почти пустые) горизонтальные полосы — это типа междустрочья Все это я реализовал, результаты есть, но пока далеко от идеала. Что можете порекомендовать по сабжу? |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
хм... а не связан ли обычно этот этап с самим распознаванием символов?
грубо говоря, там , где не получается распознать, там и картинка (ну, скорее всего распознавание не полное, а какое-нибудь "оценочное" - получитсяч/не получится) -------------------- qqq |
|||
|
||||
Y-Vladimir |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 16.7.2004 Где: Казань Репутация: 1 Всего: 6 |
Например FineReader анализ макета страницы и выделение блоков с текстом и рисунками делает до этапа распознавания. Потом блоки, помеченные как текст передаются на распознавание.
|
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
можно попробовать померять самые разнообразные статистические показатели
например, автокорреляционную функцию построить для текста и посмотреть... Это сообщение отредактировал(а) maxim1000 - 16.1.2007, 19:24 -------------------- qqq |
|||
|
||||
Y-Vladimir |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 16.7.2004 Где: Казань Репутация: 1 Всего: 6 |
Двумерную автокорреляционную функцию? Проблема еще в том, что изображение бинарное... Поэтому применять какие-либо функции затруднительно. Вторая загвоздка в том, что буквы могут быть разного размера в пикселях. Как выбрать критерий, инвариантный к размеру букв и типу шрифта - основная трудность. |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Рассматривать изображение страницы как "шум" и попытаться выделить "кластеры" на этом изображении. Т.к. рисунок - это почти всегда обособленная область, отджеленная пустым пространством от блоков текста.
Только не спрашивай алгоритм, сам не знаю ![]() |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
ну ничего не мешает заменить false на 0, а true на 1 и получить тем самым обычное серое изображение (ну и что, что только два значения используются) а, например, для оптимизации это вообще не проблема, а, скорее, возможность... кстати, вполне можно надеяться на то, что для букв вертикальная составляющая АКФ даст какие-то более высокие значения, чем, например, для диагональных (впрочем, это при условии приблизительно горизонтальных строк) к тому же, АКФ - всего лишь одна из возможных статистических характеристик можно, например, выискивать часто встречающиеся паттерны... -------------------- qqq |
|||
|
||||
Y-Vladimir |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 16.7.2004 Где: Казань Репутация: 1 Всего: 6 |
Выложил прогу: http://old-book.ksu.ru/page_analizer.rar (470 кб)
На интерфейс просьба не ругаться — чисто технологическая программа для отработки алгоритма ![]() Работать следующим образом: 1). "Открыть" — выбираем файл с изображением 2). Подвигать ползунок порога бинаризации пока не получится приемлемый бинарный вид 3). "Анализ" — ждем пару секунд, результат в нижнем окошке. Зеленые сегменты — текст, красные — изображение. Если поставить галочку "Гистограммы", то отобразятся гистограммы каждого блока в горизонтальном направлении. Необходимо еще сделать доводку границ найденных блоков, т.к. пока пока границы определяются слишком грубо. |
|||
|
||||
VictorTsaregorodtsev |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 274 Регистрация: 28.7.2006 Репутация: 3 Всего: 8 |
Y-Vladimir, Еще можно посмотреть на формат djvu - он при компрессии сканированной страницы разделяет области текста и графики и каждую из них жмет своим алгоритмом. Каков при этом разделении баланс между строгой математикой и эмпирикой - фиг знает, надо спецификации формата смотреть (где-нибудь на djvuzone.org)
|
|||
|
||||
Y-Vladimir |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 16.7.2004 Где: Казань Репутация: 1 Всего: 6 |
VictorTsaregorodtsev, про этот формат я знаю - он разделяет текст от фона. Текст сжимает алгоритмом без потерь типа LZW, фон - вейвлетами. Я уже сделал нечто подобное, только для других целей - очистка изображение. Можете глянуть, как это работает здесь: http://old-book.ksu.ru/restoration/index.php
|
|||
|
||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 4 Всего: 27 |
Люди, а вы не пробовали использовать нейросеть Хопфилда (или Хопвилда, не помню точно), а лучше Хемминга. На них же FineReader работает. Заполнили базу символов, расчитали (очень просто) веса сети, а дальше всё, что похоже на, скажем, букву А будет распознано как буква А (во как сказанул...). А сеть Хемминга просто выдаст номер распознанной буквы в базе.
Добавлено @ 02:36 ![]() Добавлено @ 02:39 Хотя... может можно использовать для эталонов сети не буквы, а куски текста областью 50х50, например? |
|||
|
||||
Y-Vladimir |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 16.7.2004 Где: Казань Репутация: 1 Всего: 6 |
FineReader, судя по http://ocrai.narod.ru/fr.html работает немного на другом принципе. Нейронку он конечно использует, но на вход ей подается не растровое изображение, а набор признаков.
Тогда нейронка будет слишком чувствительна к типу шрифта и размерам букв. Как уже сказал, перед подачей на вход нейронки, нужно провести предобработку и/или преобразование исходного изображения. |
||||
|
|||||
Bitter |
|
|||
![]() Опытный лентяй ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1209 Регистрация: 15.8.2004 Где: Харьков, Ukraine Репутация: 4 Всего: 27 |
Y-Vladimir, народ.ру весьма сомнительный портал. Так как там и 10-ти летний может написать всё, что хочет. Хотя я сам не уверен в том, какие сети использует FineReader.
не будет, если использовать сеть Хопфилда, так как она распознаёт всё, что похоже на запомненные ею эталоны. А так как все шрифты друг на друга похожи, то соответственно сеть их распознАет. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |