Выделение контура - склейка краев
От: Sergei I. Gorelkin Россия  
Дата: 07.06.05 05:09
Оценка:
Вот и меня не миновала чаша сия — обработка картинок

Собственно трассировка контура фигуры проблем не вызвала. Проблема состоит в том, что нужно склеить левый край картинки с правым (т.е. фигура, начинающаяся близко к одному краю, может продолжаться с другого). Само по себе это не опять же не проблема (достаточно брать координату x по модулю), но с вероятностью 1:10000 фигура может занимать всю ширину картинки. Вот чешу репу по поводу того, как это реализовать достаточно универсально. Мысли приходят разные, например:

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

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

А может быть, оно все гораздо проще?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.