Pull to refresh

Comments 30

Цены бы вам не было, если бы вы показали реализацию такой обработки на практике!
Ага, особенно на Leptonica.
Или сразу готовый патч для Tesseract =)
И где это посмотреть в действии?
Этот алгоритм с некоторыми доработками, возможно, будет встроен в ближайшие версии FineReader Professional, в текущей версии FineScanner (для iOS) в цветном режиме обработки используется похожий алгоритм, учитывающий особенности архитектуры GPU.
С удовольствием бы пользовался веб-сервисом который умеет так обрабатывать документы. Сканера нет, а с фотографий качество приходится муторно вытягивать.
Для Android есть приложение CamScanner, а так же приложение Google Drive умеет делать то же самое перед загрузкой фотографий документов на диск.
Алгоритм там несколько отличается от приведенного в силу особенностей архитектуры GPU.
Спасибо за наводку, драйв вполне устраивает. Десктопный/облачный это умеет?
Десктопным не пользовался, в браузерном не нашёл такого, может плохо искал.
Что, именно прям то же самое, в том же качестве? С пирамидальной картой порогов?
Естественно, я понятия не имею :). Кода-то не видел. Да, с фразой «то же самое», загнул. Скорее, нечто подобное.
Из алгоритмов адаптивного повышения яркости мне больше всего вот этот нравится: www.academic-journals.org/ojs2/index.php/ijecs/article/viewFile/1076/113 (Adaptive Smoothing
, там про него один раздел)
Конечно, он в первую очередь ориентирован на реальные изображения, но там не менее идея итеративного повышения яркости очень неплохо позволяет бороться с тенями.
Фотографии данный алгоритм все равно заметно портит.
В особенности лица (ИМХО для фотографий алгоритм динамического контраста не подходит, их нужно просто выделить и обработать отдельно):


Этот алгоритм (а вернее, представленная здесь его настройка) больше ориентирован на документы, для фотографий можно воспользоваться этой же идеей, только алгоритм придется настраивать по-другому. Общим у них является использование «изображений» локальных минимумов, максимумов и средних, а вот коэффициент контрастирования и количество уровней в пирамидальном разложении нужно подбирать по-другому.
Очень актуальная тема. Радует, что ею занялись профессионалы.
Простите, за возможно, глупый вопрос, но что есть «карта порогов»? И как с ее помощью можно получить изображение повышенной контрастности/бинарное изображение?
Карту порогов можно представить в виде полутонового изображения (2-х мерной матрицы чисел), содержащего вместо сигнала яркости значение порога бинаризации для каждой точки. Для бинаризации порог можно использовать так: значения пикселей исходного изображения выше порога заменяются белыми (максимальными), ниже — черными (минимальными). Для контрастирования мы просто берем разницу между значением яркости в каждой точке и значением порога, разность умножаем на коэффициент контрастирования k > 1, и прибавляем полученную величину с учетом знака обратно к значению порога. Получаем значение пикселя для изображения повышенной контрастности. В тексте есть формула: Y’ = k(Y – T) + T. Y и T здесь являются дискретными функциями от координат пикселей: Y(x,y) и T(x,y). Чтобы получить все изображение, нужно провести вычисления для всех пикселей изображения.
Большое спасибо, теперь все на своих местах.
Еще вопрос, а как вы оцениваете уровень шума на изображении?
Оценка дисперсии (второго момента) может производиться самыми разными способами. Можно попробовать разбить изображение на квадратные области заданного размера, скажем 32х32 пикселей, посчитать для каждого значения первого и второго моментов (среднего и дисперсии), и выбрать несколько с минимальной дисперсией из различных диапазонов среднего, т.е. яркости (их может быть порядка 10). Крайние диапазоны по яркости ненадежны, т.к. сигнал уходит в насыщение (тень или засветка), и измерения в них недостоверны. А вот по остальным можно даже получить зависимость дисперсии от яркости. Для большей надежности можно квадратные области делать пересекающимися или искать минимум для каждого диапазона яркости в скользящем окне (для всех диапазонов за один проход, конечно).
Можно даже собрать статистику для различных камер и их настроек (ISO, шумодав). Порог для шума следует выбирать пропорционально полученным значениям дисперсии, обычно коэффициент для порога лежит в диапазоне от 3 до 5 «сигм» для различных «типов» шума.
Это недостаток алгоритма, в этом месте немного не хватило коэффицента контрастирования, а делать его более высоким всегда — опасно. В цветном пятна не видно, т.к. вся область содержит насыщенный цвет и для неё мы снижаем коэффициент контрастирования практически до 0, в результате цвет выравнивается. Вообще, задача бинаризации документов со сложной версткой до сих пор не имеет однозначного решения для всех случаев. Но мы к этому стремимся. :)
UFO just landed and posted this here
Алгоритм там не знаю какой. Но в шопе это два фильтра. Про восстановление геометрии не говорю.
habrahabr.ru/post/218195/#comment_7465441

До habrastorage.org/getpro/habr/post_images/b60/175/687/b6017568773561bb6b176fd291870762.jpg
После habrastorage.org/getpro/habr/comment_images/ac9/ac1/bfb/ac9ac1bfb6a7692e8d40cf2cdbbe4eab.jpg
Извиняюсь за некропостинг, пост показали только недавно.

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

Если читать текст буквально, то кажется возможен странный эффект.

Предположим, в среднем документ довольно ярок, т.е. средний уровень предположим где-то около 0.7, а максимум и минимум — пусть 0.5 до 1.0. В этом случае, алгоритм перестанет делать локальные изменения порогов вообще — уровень порога, приходящий с верхнего уровня будет 0.7, разница между максимальным и минимальным не больше — 0.5, следовательно делать ничего не нужно на всех уровнях.

Казалось бы, хочется не такого поведения, а как раз вычесть среднее (0.7) и улучшать контраст в разных частях документа.

Поясните плз?
Там два порога: порог контрастирования, который мы уточняем, двигаясь по масштабам вверх, и шумовой порог, который является константой, зависящей от уровня шума в изображении. Обычно на реальных деталях изображений разница между локальным максимумом и минимумом составляет 0.3-0.7, а шум — не более 0.1. Поэтому происходит как раз то, что вы описали, порог уточняется для различных участков изображения до тех пор, пока там есть детали все более мелкого масштаба, превосходящие по контрасту шум.
Sign up to leave a comment.