- Бинаризация любым из способов (например, фиксированным порогом);
- Выделение связных областей, вычиление их характеристик;
- На основе характеристик, классификация областей
на 2 класса: стрелки и все остальное.
Выбрать характеристики, по которым легче
классифицировать области нужно самостоятельно;
- Среди стрелок найти начальную (она на исходном изображении всегда красная);
- Определить направление, куда она указывает;
- По этому направлению двигаться по изображению, пока не натолкнешься
на следующую стрелку;
- Повторять щаги 5, 6 пока не получится, что последняя стрелка указывает
не на следующую стрелку, а на другой объект;
- Очертить найденный объект прямоугольно рамкой или оконтурить - это клад
- Нарисовать путь от начальной стрелки до клада
На рисунках проиллюстрированы шаги алгоритма:
|
|
|
Исходная картинка |
1 |
2, 3 |
|
|
4, 5, 6 |
7, 8, 9 |
Важные вопросы
Как определить направление, куда указывает стрелка?
У связной области (стрелки) нужно подсчитать центр масс и главную ось
инерции. Это дает направление и точку начала пути. Для того, чтобы
определить в какую сторону от центра масс двигаться, можно воспользоваться
зеленым пятном на стрелке, посчитав по какую сторону от центра масс
вдоль направления оси инерции лежит большее число пикселей с зеленой
компонентой, доминирующей над остальными.
Как проследить по направлению стрелки до следующей стрелки?
Начиная от центра масс текущей стрелки, двигаться по пикселям в вычисленном направлении
с помощью алгоритма Брезенхема
описание 1,
описание 2
(весьма простой алгоритм растеризации прямых).
Как только наткнетесь на пиксель, принадлежащий связной области отличной от той,
из которой начинали - это либо следующая стрелка, либо клад.
Назад к заданию
|