![]() |
|
![]() ![]() ![]() |
|
artysite |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 12.7.2007 Репутация: нет Всего: нет |
Подскажите, пожайлуста алгоритм, позволяющий идентифицировать связные области. Например. отличать одно желтое пятно от другого.
![]() |
|||
|
||||
JUmPER |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 22.8.2006 Репутация: нет Всего: 3 |
можно "в лоб": стартовать в некоторой точке и бежать во все стороны, помечая пиксели не отличающиеся от текущего (отличающегося не больше, чем на eps)...
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной |
|||
|
||||
artysite |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 12.7.2007 Репутация: нет Всего: нет |
Контуры извилисты и тогда, если просто пробегать, непонятно это уже следущее пятно или это продолжение встречавшегося ранее пятна. |
|||
|
||||
JUmPER |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 22.8.2006 Репутация: нет Всего: 3 |
например, имеем часть изображения с пятном
1 2 3 4 5 1 # # # # # 2 # # # # # 3 # # # # # 4 # # # # # 5 # # # # # начинаем, например, в 3х3 помечаем её (например, чёрным цветом или заносим в список отмеченных) 1 2 3 4 5 1 # # # # # 2 # # # # # 3 # # Х # # 4 # # # # # 5 # # # # # помечаем её соседей, если они: - ещё не отмечены - не отличаются от текущей точке по цвету 1 2 3 4 5 1 # # # # # 2 # # Х # # 3 # Х Х Х # 4 # # Х # # 5 # # # # # дальше делаем то же самое для её соседей... 1 2 3 4 5 1 # # Х # # 2 # Х Х Х # 3 Х Х Х Х Х 4 # Х Х Х # 5 # # Х # # вот такая рекурсия. таким образом всё пятно окажется помеченным и можно будет приступать к другим пятнам. только сходимость у такого метода ужасная... --------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной |
|||
|
||||
Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 1 Всего: 37 |
Кроме такого "FloodFill" можно предложить посчитать градиент цвета для каждой точки, что бы выделить контуры.
|
|||
|
||||
artysite |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 12.7.2007 Репутация: нет Всего: нет |
Хм.., непонятно, что значит "приступать к другим пятнам", количество пятен и их положение заранее неизвестно. Вот, например, на самом большом пятне на рисунке, допустим мы идем от центра пятна к краям и одновременно в трех точках касаемся желтого цвета, как узнать разные идентификаторы им давать или они являются частями большого желтого сектора?
|
|||
|
||||
JUmPER |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 22.8.2006 Репутация: нет Всего: 3 |
например, выбираем другой жёлтый пиксель (ещё не отмеченный) можно же начинать именно с жёлтых пятен, тогда будет известно разные ли это пятна или одинаковые. --------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной |
|||
|
||||
artysite |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 12.7.2007 Репутация: нет Всего: нет |
Если начинать с желтых, то неопределенность будет на красных, вообще на изображении будут пятна 14-ти цветов, "вписанные" друг в друга |
|||
|
||||
JUmPER |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 22.8.2006 Репутация: нет Всего: 3 |
тогда так:
Матрица = новая матрица размера Ширина изображения х Высота изображения, заполненная нулями номер_текущего_пятна = 1 пока есть неотмеченные пиксели (НП) { // отмечаем первый пиксель: Матрица(Х НП, Y НП) = номер_текущего_пятна // дальше отмечаем рекурсивно по приведённому выше алгоритму всё текущее пятно ... увеличиваем на единицу номер_текущего_пятна } итого имеем матрицу, где каждая ячейка содержит номер пятна, в котором она находится. --------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной |
|||
|
||||
artysite |
|
|||
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 12.7.2007 Репутация: нет Всего: нет |
Надо попробовать, только как правильно всё организовать чтобы работало?
пока есть неотмеченные пиксели (НП) { // отмечаем первый пиксель: Матрица(Х НП, Y НП) = номер_текущего_пятна i=1//шаг //организуем цикл Пока есть соседи с таким же цветом делаем { если цвет(x,y+i)==цвет(x,y) { то, матрица(x,y+i)==матрица(x,y) } если цвет(x+i,y)==цвет(x,y) { то, матрица(x+i,y)==матрица(x,y) } если цвет(x,y-i)==цвет(x,y) { то, матрица(x,y-i)==матрица(x,y) } если цвет(x-i,y)==цвет(x,y) { то, матрица(x-i,y)==матрица(x,y) } } если ни одно условие не выполняется, то уходим из цикла увеличиваем на единицу номер_текущего_пятна } При таком алгоритме проверка будет проводится только в влево, вправо, вверх и вниз. А как сделать так чтоб из каждой новой точки проверка шла во все стороны? |
|||
|
||||
esperant0 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 714 Регистрация: 20.5.2005 Репутация: 4 Всего: 14 |
Можно запустить алгоритм для поиска границ. И в полученом изображении искать области.
Если области кругловатые можно использовать хауфтрансформ. -------------------- Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором а затем стерто и которое он - пользователь не мог видеть. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |