Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка изображений, Удаление аномальных пикселей и решеток 
:(
    Опции темы
Dmitrii
Дата 27.7.2010, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 27.7.2010

Репутация: нет
Всего: нет



Задача заключается в следующем. Есть изображения какого либо графика(отсканированное). Нужно написать алгоритм, который бы удалял из этого отсканированного изображения аномальные пиксели и другой шум(если он есть), а также удалял координатную решетку с графика(если она имеется), т.е. чтобы оставался только график и оси. Можете посоветовать какую литературу почитать для решения данной задачи, и в какую сторону вообще копать?
PM MAIL   Вверх
Earnest
Дата 27.7.2010, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 7
Всего: 183



Для начала нужно корректно поставить задачу: кто такие аномальные пикселы и "другой шум", а уж удалить-то их не проблема - замазал цветом фона и все. Аналогично с координатной сеткой. С ней, правда, попроще немного - она обычно регулярная, и если растр отсканирован не очень криво, вполне можно проследить... если, конечно, знать шаг и начало. И еще многое зависит от того, в одном ли цвете вся эта инфа или в разных.
В общем, нетривиальная задача, не на недельку. А насчет литературы - так ты правильно написал в заголовке - ищи материалы про обработку изображений.


--------------------
...
PM   Вверх
Dmitrii
Дата 27.7.2010, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 27.7.2010

Репутация: нет
Всего: нет



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

P.s. Знаю, что задачка не на недельку, просто думал что уже есть какие-нибудь алгоритмы для решения подобных задач.

Присоединённый файл ( Кол-во скачиваний: 34 )
Присоединённый файл  ______.png 79,41 Kb
PM MAIL   Вверх
Earnest
Дата 27.7.2010, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 7
Всего: 183



Цитата(Dmitrii @  27.7.2010,  17:46 Найти цитируемый пост)
 я думаю будет не особо криминальным бинаризировать график до поиска аномальных пикселей и "решетки", дабы нивелировать важность цвета.

Вот как раз нет! На твоем рисунке график и сетка имеют различные цвета. Полный бред не использовать эту информацию. Оси, правда, сливаются с сеткой, но можно их отделить по факту нахождения слева\внизу. А график выделить - элементарно по цвету.
А где там аномальные пикселы? Те, что разбросаны серыми точечками? Если да, можно, во-первых, отфильтровать тупой маской 3*3 (ну или побольше, если они больше чем 1 пиксел), или просто удалить все, что не синее (график), черное (надписи) и оси (серые линии слева и внизу).


--------------------
...
PM   Вверх
Pavia
Дата 27.7.2010, 19:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



Dmitrii,  Вроде задачка выглядит простой.  Хотя накрутить можно много.

1. Да бинаризация. Чтобы убрать шум от задней стороны листа. Надо воспользоваться адаптивной.  Я бы взял готовый вариант из какой нибудь распознавалки текста если конечно там не совсем тупой вариант. 
2.  Дальше бы мат морфологией подавил маленькие точки.
3. Поиск сетки. Вижу два алгоритма. 
 а) посчитать интегральные проекции и поиск пиков. Проблема в том что пики могут быть разных высот. И надо дополнять. 
 б) поиск перекрестков.  Берем патерн и двигаем его по всему изоброжению.
010 123
111 456
010 789
в позициях 2 4 5 6 8 должно быть больше черных пикселей чем в 1 3 7 9.
Позиция это некоторый квадрат, к примеру пиксель или 4 пикселя. Или квадрат со стороной 1.5 пикселя. И считать сумму или точнее интеграл. 
Найдя эти перекрестки будет понятно где именно сетка расположена.

4. Восстановление графиков там где график сливается с сеткой и был удален. Тоже применяем мат морфологию.
PM MAIL   Вверх
Dmitrii
Дата 27.7.2010, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 27.7.2010

Репутация: нет
Всего: нет



Цитата(Earnest @  27.7.2010,  18:44 Найти цитируемый пост)
Вот как раз нет! На твоем рисунке график и сетка имеют различные цвета. Полный бред не использовать эту информацию.

Если бы все графики были синими, задача как раз и заключается в том, чтобы написать такой алгоритм, который сможет удалять решетку с любых графиков. Синих, красных, черных и так далее. Т.е. алгоритм не имеет понятия какого цвета график, какого цвета решетка, и т.д.
Можно поподробнее про маску? Как я понял смысл в проходе по матрице и апроксимации цвета в каждом квадрате 3х3. Или как? Да, черные точки именно то, что я называл аномальными пикселами. Т.е. мелкие артефакты, которые могли возникнуть в результате сканирования. 
PM MAIL   Вверх
maxim1000
Дата 27.7.2010, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



всё-таки какие-то знания о свойствах графика использовать придётся
в приведённом примере график заметно толще шума, координатной сетки и чисел на осях
кроме того, он достаточно гладкий

а потому морфологией можно не только подавить шум, но и координатную сетку (нужно только выбрать соответствующие значения), конкретно здесь, скорее всего, пригодится эта операция: http://en.wikipedia.org/wiki/Erosion_(morphology)

если на других графиках толщина не является таким отличительным свойством, нужно искать другие...


--------------------
qqq
PM WWW   Вверх
Dmitrii
Дата 28.7.2010, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 27.7.2010

Репутация: нет
Всего: нет



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

Что касается бинаризации, то, как мне кажется, ее использование необходимо, ибо писать универсальный алгоритм для цветных и grayscale изображений для меня проблематично) Для бинаризации выбрал алгоритм Бернсена с постпроцессингом, согласно статье он обладает универсальными показателями качество/время(осталось найти его более подробное описание).

p.s. Извините за такие, может быть, туповатые вопросы, но в институте нам не читали ни одного курса по обработке изображений. Только чистое программирование, вот сейчас приходится в этом копаться самому smile 

Это сообщение отредактировал(а) Dmitrii - 28.7.2010, 15:35

Присоединённый файл ( Кол-во скачиваний: 26 )
Присоединённый файл  _________.png 8,15 Kb
PM MAIL   Вверх
Pavia
Дата 28.7.2010, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 6.12.2008

Репутация: 11
Всего: 12



По поводу бинаризации. Не надо быть категоричным. 
Бинаризация дает инвариантность относительно цвета. Т.е алгоритм не надо настраивать на определенный цвет. Это большой плюс. С другой стороны используя информацию о цвете даст преимущество так как определенный класс задач можно решить точнее.
Любые априорные данные дают преимущество. Такими данными может быть цвет толщина линий периодичность.
PM MAIL   Вверх
maxim1000
Дата 28.7.2010, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(Dmitrii @  28.7.2010,  15:31 Найти цитируемый пост)
Erosion алгоритм чем похож по действию на алгоритмы утоньшения, или мне только так кажется?

если под утоньшением подразумевается уменьшение толщины линий до, например, единицы, то не совсем: erosion просто "срезает" слой заданной толщины с границы тела. Если тело было слишком тонким, оно вообще пропадёт. Утоньшение больше смахивает на алгоритмы скелетизации - там (условно) толщина срезается только с толстых частей


Цитата(Dmitrii @  28.7.2010,  15:31 Найти цитируемый пост)
Разве при применении этого алгоритма будет удалена только сетка, оси и числа на осях выдержат ли это преобразование?)

это я неправильно прочитал задание smile
судя по рисункам ни оси, ни числа такого преобразования не выдержат
но их можно попробовать обработать отдельно
например, найти левую и нижнюю оси и применять erosion только в области справа-вверху от осей


--------------------
qqq
PM WWW   Вверх
Dmitrii
Дата 29.7.2010, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 27.7.2010

Репутация: нет
Всего: нет



Из всего выше написаного определил для себя план, по которому это чудо должно работать.
Будем предполагать, что график является идеально позиционированным(оси под углом 90 градусов, ось абсцисс горизонтальна).Если это условие не выполняется, то это уже другая песня, но и с этим я думаю потом можно будет справиться.
Просим пользователя установить цвет фона, это можно сделать простым способом, а-ля "пипетка".
Потом ищем оси, т.е. нижнюю и левую прямые линии, и ограничиваем область нашей работы выше и правее этих линий, дабы не стереть надписи и оси.
Далее, предлагаем пользователю указать, отличается ли график(-и) от сетки по цвету, толщине.
1) Если график отличается по цвету, то закрашиваем все пикселы, яркость которых ниже определенного порога, в нашей "рабочей" области цветом фона. Либо можно также использовать пипетку для определения цвета графика, тогда задача вообще элементарна.
2) Если график отличается по тольщине, то применяем мат.морфологию(по вашему совету).
3) Если же график не отличается по толщине или цвету, придется изобретать велосипед)) Здесь у меня полный тупик) Пробег по изображению с маской не представляю возможным, ибо толщина линий решетки на каждом графике своя. Единственным свойством сетки по которой ее можно будет отделить от графика, это параллельность линий, как это можно использовать пока я не придумал.

Вопросы, вытекающие из этого плана:
1) Каким алгоритмом привести изображение к идеально позиционированному. Не первостепенная задача, но тоже, как мне кажется, должна быть предусмотрена.
2) Как найти нижнюю и левую прямые линии. Думал применить алгоритв Хафа, но как определить является линия левой или нижней я так и не понял.
3) Как убрать сетку если график не отличается ни толщиной, ни цветом. Я в полном тупике.
Решив эти 3 вопроса, думаю буду иметь полную коллекцию необходимых алгоритмов для решения этой задачи)
PM MAIL   Вверх
maxim1000
Дата 29.7.2010, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(Dmitrii @  29.7.2010,  01:36 Найти цитируемый пост)
Просим пользователя установить цвет фона

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


Цитата(Dmitrii @  29.7.2010,  01:36 Найти цитируемый пост)
Каким алгоритмом привести изображение к идеально позиционированному. Не первостепенная задача, но тоже, как мне кажется, должна быть предусмотрена

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


Цитата(Dmitrii @  29.7.2010,  01:36 Найти цитируемый пост)
Как найти нижнюю и левую прямые линии. Думал применить алгоритв Хафа, но как определить является линия левой или нижней я так и не понял.

можно найти все линии, а потом из вертикальных выбрать самую левую, а из горизонтальных - самую нижнюю, можно попробовать отрезать числа и в оставшемся изображении найти их так же, как и правую с верхней - пробегаться по строкам/столбцам и смотреть крайние точки


Цитата(Dmitrii @  29.7.2010,  01:36 Найти цитируемый пост)
Как убрать сетку если график не отличается ни толщиной, ни цветом. Я в полном тупике.

когда программой попользуются, возможны два варианта:
- таких случаев просто не будет - тогда и нечего над этим думать
- такие случаи будут - тогда надо будет попросить примеры и уже думать над ними


--------------------
qqq
PM WWW   Вверх
Earnest
Дата 29.7.2010, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 7
Всего: 183



Я бы предложила такой вариант:
1) сделать сегментацию (классификацию) по цветам (можно спросить у пользователя, сколько цветов на картинке)
2) фон, действительно - это самый большой класс
3) дальше можно выделить несколько бинарных растров по цветам и автоматически векторизовать их: исследовать вектор обычно проще чем растр: например, короткие извилистые линии - скорее всего части текста и т.д., кроме того, вектор можно связать в граф (обычно в результате трассировки это получается естественным образом), и тогда будет еще проще (анализировать)
4) для выделения сетки можно использовать как векторные данные, так и растр (например, использовать корреляцию для поиска крестов)
5) если все в разных цветах, спросить у пользователя кто есть кто (пару раз ткнуть пипеткой), а выделить цвет - не проблема. А если все в одном цвете, то придется убрать сетку, надписи и шум, а то, что останется попытаться связать (и делать это проще по векторизованным данным) - это и будет график


--------------------
...
PM   Вверх
Dmitrii
Дата 29.7.2010, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 27.7.2010

Репутация: нет
Всего: нет



Опять таки, извеняюсь, но мало что понял. Почему вектор исследовать легче и проще, нежели растр в данном типе задач? Там легче найти параллельные прямые входящие в сетку или нижнюю и левую прямые? Я совсем запутался) 
p.s. Может быть потому, что не знаю как выглядит представление векторного изображения в программном виде, и чем оно отличается от растра))

Это сообщение отредактировал(а) Dmitrii - 29.7.2010, 14:54
PM MAIL   Вверх
Earnest
Дата 29.7.2010, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 7
Всего: 183



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


--------------------
...
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.