Я написал алгоритм для извлечения точек, показанных на изображении. Они образуют выпуклую форму, и я знаю их порядок. Как извлечь из этих точек углы (верхние и нижние 3)? Я использую opencv.Получение углов из выпуклых точек
ответ
Если у вас уже есть выпуклый корпус объекта, и этот корпус включает в себя угловые точки, то все, что вам нужно сделать, это упростить корпус, пока он не имеет только 6 точек.
Есть много способов, чтобы упростить многоугольники, например, вы могли бы просто использовать этот простой алгоритм, используемый в этом ответе: How to find corner coordinates of a rectangle in an image
do
for each point P on the convex hull:
measure its distance to the line AB _
between the point A before P and the point B after P,
remove the point with the smallest distance
repeat until 6 points left
Если вы не знаете точное количество очков, то вы можете удалить точки пока минимальное расстояние не достигнет определенного порога
вы также можете сделать Ramer-Douglas-Peucker, чтобы упростить многоугольник, openCV уже реализован в cv::approxPolyDP.
Просто измените the openCV squares sample использовать 6 очков вместо 4
Вместо того, чтобы пытаться непосредственно определить, какие из характерных точек соответствуют углам, как о применении алгоритма к обнаружению угла на все изображение, то ищет, какие из характерных точек появляются близко к пикам в углу детектор?
Предлагаю начать с Harris corner detector. Реализация OpenCV - cv::cornerHarris.
По существу, алгоритм Харриса применяет к изображению как горизонтальный, так и вертикальный Sobel filter (или некоторое другое приближение частных производных изображения в направлениях x и y).
Затем он строит матрицу 2 на 2 structure на каждом пикселе изображения, смотрит на собственные значения этой матрицы и называет углы точек, если оба собственных значения выше некоторого порогового значения.
Проблема в том, что я не получаю Харриса обнаружить углы на поворотах. Вот что я получаю: http://i.imgur.com/mqltv.png –
- 1. Алгоритмы выпуклых оболочек для отсортированного набора точек
- 2. Получение имен из ... (точек)
- 3. Получение эйлеровых углов из кватерниона в Matlab
- 4. Разложение многоугольника - удаление вогнутых точек для формирования выпуклых полигонов
- 5. Преобразование выпуклых точек в точках, которые я могу использовать
- 6. Расчет углов поворота направления из 3-х точек
- 7. Создание выпуклых многоугольников из прямоугольников
- 8. Объединение ближайших выпуклых полигонов
- 9. Сгенерировать график связанных выпуклых полигонов
- 10. Минимизация выпуклых стохастических значений
- 11. получение определенных точек местоположения из базы данных
- 12. Highcharts - предотвратить Получение доступа точек из крайностей
- 13. Получение точек из таблицы html с php
- 14. Получение Пролет нанесенными точек из Сиборн swarmplot
- 15. Создание множества выпуклых корпусов MATLAB
- 16. Наложение CSS из углов
- 17. Вычисление границ выпуклых оболочек
- 18. Оптимизация выпуклых выпусков Mathematica
- 19. Создание выпуклых SKPhisycsBodies
- 20. Получение точек для классов
- 21. Максимальные углов по часовой стрелке от 3 ближайших точек
- 22. Получение PyEphem для возврата углов со знаком
- 23. Получение треугольных углов в пределах круга
- 24. Получение округленных углов в диаграмме google
- 25. Вычислительная матрица парных углов между двумя массивами точек
- 26. Java вычисления точек углов в не прямоугольном треугольнике
- 27. Вычислить масштабный коэффициент радиуса для построения n-сторонних выпуклых выпуклых многоугольников равной области
- 28. Координаты углов усеченного конуса
- 29. Вычислить выпуклую оболочку точек из набора (lat/long) точек
- 30. Получение точек вдоль XAML Shapes.Path
Отлично! Я попробовал ваше предлагаемое решение, и он отлично работал! Я также рассмотрю алгоритм Рамера. –
Алгоритм Рамера-Дугласа-Пьюкера имеет много применений. Рад, что HugoRune предложил это. Если вы возитесь с ним, убедитесь, например, эффект установки разных значений epsilon. Другим вариантом поиска хороших квадратных углов или нерегулярных углов является вычисление отношения расстояния между двумя точками вдоль контура и расстояния между этими двумя точками по фигуре. Для точек на прямой отношение равно 1: 1. – Rethunk