Может ли кто-нибудь дать хорошее объяснение того, как работает эпсилон?
Вот как я это использую.
cv::approxPolyDP(contour, approx, cv::arcLength(contour, true) * precision, true);
По умолчанию double precision=0.02
.
Что-то, что для меня не имеет смысла, заключается в том, что чем ниже precision
, тем менее строгим становится определение формы?
Например, если я ищу прямоугольные контуры на изображении, и обнаруживаются не все прямоугольные контуры, а для precision
установлено значение 0.5
(выше), даже меньше прямоугольных контуров определяется как прямоугольники. Но если я установлю precision
на 0.01
(ниже), будет обнаружено больше прямоугольных контуров???
Разве не должно быть наоборот? Ниже precision
= более строгое определение формы?
@ChristophRackwitz создайте ответ :)
не видя этих входных контуров, я не могу комментировать ваши наблюдения. Я бы сказал, что контуры были упрощены до чего-то даже меньшего, чем четырехугольник, то есть треугольник или хуже. 0,5 * длина дуги довольно серьезна и должна убить почти каждую точку.
approxPolyDP
реализует Алгоритм Рамера – Дугласа – Пекера
Алгоритм не формирует обнаружить, это контуры упрощает.
Он удаляет точки, которые очень мало (эпсилон) влияют на форму контура. Коллинеарные точки — тривиальный случай, потому что они вносят нуль в форму контура. Наиболее выступающие углы оставлены. Результатом является аппроксимация входного контура.
Более строгий эпсилон вызывает более точную аппроксимацию, оставляя больше точек, оставшихся до все точки (без действия).
Обратите внимание, что в случае квадрата/прямоугольника/четверки даже с одним закругленные углы расположение края четырехугольника равно не поддерживается. Баллы на закругленные углы остаются. Однако аппроксимацию можно использовать для сегмент исходного контура, отбрасывания «угловых» точек и работы с краевыми точками.
DP означает en.wikipedia.org/wiki/…, и это объясняет весь алгоритм — он не обнаруживает формы, он приближает контуры. более жесткий эпсилон означает более точную аппроксимацию, что означает, что осталось больше точек.