Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Связные области, на цветном изображении 
:(
    Опции темы
artysite
Дата 12.7.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите, пожайлуста алгоритм, позволяющий идентифицировать связные области. Например. отличать одно желтое пятно от другого.
user posted image
PM MAIL   Вверх
JUmPER
Дата 12.7.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



можно "в лоб": стартовать в некоторой точке и бежать во все стороны, помечая пиксели не отличающиеся от текущего (отличающегося не больше, чем на eps)...
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
artysite
Дата 12.7.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(JUmPER @ 12.7.2007,  15:09)
можно "в лоб": стартовать в некоторой точке и бежать во все стороны, помечая пиксели не отличающиеся от текущего (отличающегося не больше, чем на eps)...

Контуры извилисты и тогда, если просто пробегать, непонятно это уже следущее пятно или это продолжение встречавшегося ранее пятна.
PM MAIL   Вверх
JUmPER
Дата 12.7.2007, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
Sartorius
Дата 12.7.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

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



 Кроме такого "FloodFill" можно предложить посчитать градиент цвета для каждой точки, что бы выделить контуры.
PM MAIL ICQ   Вверх
artysite
Дата 12.7.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хм.., непонятно, что значит "приступать к другим пятнам", количество пятен и их положение заранее неизвестно. Вот, например, на самом большом пятне на рисунке, допустим мы идем от центра пятна к краям и одновременно в трех точках касаемся желтого цвета, как узнать разные идентификаторы им давать или они являются частями большого желтого сектора?
PM MAIL   Вверх
JUmPER
Дата 12.7.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(artysite @  12.7.2007,  15:47 Найти цитируемый пост)
непонятно, что значит "приступать к другим пятнам"

например, выбираем другой жёлтый пиксель (ещё не отмеченный)

можно же начинать именно с жёлтых пятен, тогда будет известно разные ли это пятна или одинаковые.
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
artysite
Дата 12.7.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(JUmPER @ 12.7.2007,  15:52)
можно же начинать именно с жёлтых пятен, тогда будет известно разные ли это пятна или одинаковые.

Если начинать с желтых, то неопределенность будет на красных, вообще на изображении будут пятна 14-ти цветов, "вписанные" друг в друга
PM MAIL   Вверх
JUmPER
Дата 12.7.2007, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



тогда так:


Матрица = новая матрица размера Ширина изображения х Высота изображения, заполненная нулями
номер_текущего_пятна = 1

пока есть неотмеченные пиксели (НП)
{
  // отмечаем первый пиксель:
  Матрица(Х НПY НП) = номер_текущего_пятна
  // дальше отмечаем рекурсивно по приведённому выше алгоритму всё текущее пятно
  ...

  увеличиваем на единицу номер_текущего_пятна
}


итого имеем матрицу, где каждая ячейка содержит номер пятна, в котором она находится.
--------------------
Существует 10 типов людей: те, которые понимают двоичную систему, и те, которые ее не понимаютСуществует 10 типов людей: те, кто понимают троичную систему, те, кто ее не понимают и те, кто путает ее с двоичной
PM MAIL   Вверх
artysite
Дата 13.7.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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)
}
}

если ни одно условие не выполняется, то уходим из цикла

  увеличиваем на единицу номер_текущего_пятна
}




При таком алгоритме проверка будет проводится только в влево, вправо, вверх и вниз.
А как сделать так чтоб из каждой новой точки проверка шла во все стороны?
PM MAIL   Вверх
esperant0
Дата 13.7.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно запустить алгоритм для поиска границ. И в полученом изображении искать области.

Если области кругловатые можно использовать хауфтрансформ.


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

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

maxim1000

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


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

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


 




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


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

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