Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > замена контура отрезками.


Автор: mrgloom 16.1.2012, 14:52
есть такие вот замкнутые контуры малой толщины.
http://rghost.ru/35931708/image.png
надо получить что то такое.
http://rghost.ru/35931710/image.png

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


Автор: _Y_ 16.1.2012, 22:18
Судя по картинкам, надо просто пройти по контуру, найти наиболее отдаленные друг от дрга точки, лежащие на одной горизонтали или вертикали и соединить их прямой.

Автор: mrgloom 17.1.2012, 09:09
да, что то я сразу не додумался.

что если более сложный случай? т.е. надо определить углы в 45 и 90 градусов наверно.
http://rghost.ru/35947489.view
http://rghost.ru/35947534.view

Автор: _Y_ 17.1.2012, 11:24
Здесь, видимо, без регрессий не обойтись. Но, по любому, надо подумать.

Поэтомы сначала вопрос: На новой картинке, видимо, только правые половины контуров. Каковы левые половины; т.е. обязательно ли они симметричны правым или, например, слева могут быть углы 90, а справа 45 градусов? То же касается симметрии верх-низ. На картинке верх-низ симметричны. Так должно быть вседа или ассиметричность нормальна?

Автор: mrgloom 19.1.2012, 10:43
в общем случае  линия идет как хочет под 90 и 45 градусов, контуры замкнутые и не пересекающиеся.
весь контур должен быть составлен из горизонтальных, вертикальных и линий под 45 градусов.
контуры с шумами-неровностями ,а иногда и с большими кусками неровными лишними которые тоже хотелось бы как то уметь детектировать.
случай с 45 встречается правда редко , так что можно его пока не рассматривать для простоты.

я сейчас занимаюсь тем что пытаюсь научится определять точку с которой линия начинает идти под 90 или 45 градусов.
если угол плавный и закругленный пока не работает.

Автор: Akonkagva 24.1.2012, 13:33
Ммм, дорогой mrgloom, похоже что для решения вашей проблемы возможно использовать функцию http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/hull/hull.html с помощью него можно легко находить углы.

Автор: mrgloom 30.1.2012, 17:08
не совсем то, что нужно мне надо фигуры со сторонами ортогональными горизонтальной и вертикальной оси.

Автор: Mirkes 1.2.2012, 18:25
Можно глянуть в сторону методов типа метода главных компонент. 
Поясню. Берем произвольную точку. Проводим через нее горизонтальную, вертикальную и две диагональных прямых.
Далее берем некоторую окрестность (не очень большую) и считаем сумму квадратов расстояний от всех точек окрестности до этих прямых. Прямая, давшая минимум суммы является локальным апроксимантом вашего множества точек.
далее начинаем растягивать окрестность вдоль выбранной прямой до тех пор, пока удельная сумма квадратов расстояний (сумма деленная на количество точек) остается в заданных пределах. 
После завершения операции исключаем все точки из рассмотрения и повторяем процедуру.

Вроде должно сработать.

Вообще замена произвольного контура на ломанную может быть выполнена с помощью одномерных робастных эластичных карт или робастной вариации SOM.

Попробуйте. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)