Я хочу обнаружить четырехугольник на изображении в Java. Я могу использовать метод HoughLinesP в OpenCV (используя javaCV для привязки opencv java) для обнаружения сегментов линий. Но я не могу понять, как определить четырехугольную форму - есть ли другой метод для этого или какой-то способ использовать линии hough? Кроме того, после обнаружения углов четырехугольника я хочу, чтобы он возвращал прямоугольник, как это делает этот класс - http://www.aforgenet.com/framework/docs/html/7039a71d-a87d-47ef-7907-ad873118e374.htm — есть ли эквивалентная библиотека в открытьрезюме?
Как обнаружить четырехугольник на изображении в Java?
Ответы (3)
Как выглядят ваши входные изображения? Если вы обнаружите много отрезков с помощью преобразования Хафа, вы можете попробовать использовать RANSAC для создания число гипотез четырехугольной формы, найти способ оценить их пригодность и вернуть лучшую гипотезу.
Одна гипотеза может быть сгенерирована следующим образом:
- выбрать четыре случайных сегмента линии из обнаруженного набора сегментов линии
- найдите четыре угла, ища пересечения линий, на которых лежат выбранные отрезки
- оцените пригодность четырехугольника, определяемого этими четырьмя точками
Соответствие может быть площадью гипотетического четырехугольника (см. формулу Бретшнайдера для расчета площадь выпуклого четырехугольника), расстояние ребер четырехугольника от других сегментов линии в обнаруженном наборе или что-то, что лучше подходит для вашего приложения.
Это просто идея, я еще не пробовал использовать этот подход (но я планирую реализовать что-то подобное). Дайте мне знать, если вы думаете, что это может сработать, или почему это не сработает! :)
Ваш алгоритм может быть примерно таким
- Обработайте изображение, чтобы найти края (фильтр Кэнни)
- Примените преобразование Хафа, чтобы найти линии
- Обнаружение пар линий, которые пересекаются под углом 90 градусов (приблизительно)
Если вы используете библиотеку OpenCV, вам обязательно стоит попробовать функцию FindChessboardCorners
. А также хорошее руководство.