Как работает параметр приблизительноPolyDP и эпсилон?

Может ли кто-нибудь дать хорошее объяснение того, как работает эпсилон?

Вот как я это использую.

cv::approxPolyDP(contour, approx, cv::arcLength(contour, true) * precision, true);

По умолчанию double precision=0.02.

Что-то, что для меня не имеет смысла, заключается в том, что чем ниже precision, тем менее строгим становится определение формы?

Например, если я ищу прямоугольные контуры на изображении, и обнаруживаются не все прямоугольные контуры, а для precision установлено значение 0.5 (выше), даже меньше прямоугольных контуров определяется как прямоугольники. Но если я установлю precision на 0.01 (ниже), будет обнаружено больше прямоугольных контуров???

Разве не должно быть наоборот? Ниже precision = более строгое определение формы?

DP означает en.wikipedia.org/wiki/…, и это объясняет весь алгоритм — он не обнаруживает формы, он приближает контуры. более жесткий эпсилон означает более точную аппроксимацию, что означает, что осталось больше точек.

Christoph Rackwitz 16.05.2022 22:49

@ChristophRackwitz создайте ответ :)

clarkk 17.05.2022 08:16

не видя этих входных контуров, я не могу комментировать ваши наблюдения. Я бы сказал, что контуры были упрощены до чего-то даже меньшего, чем четырехугольник, то есть треугольник или хуже. 0,5 * длина дуги довольно серьезна и должна убить почти каждую точку.

Christoph Rackwitz 17.05.2022 10:35
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
3
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

approxPolyDP реализует Алгоритм Рамера – Дугласа – Пекера

Алгоритм не формирует обнаружить, это контуры упрощает.

Он удаляет точки, которые очень мало (эпсилон) влияют на форму контура. Коллинеарные точки — тривиальный случай, потому что они вносят нуль в форму контура. Наиболее выступающие углы оставлены. Результатом является аппроксимация входного контура.

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

Обратите внимание, что в случае квадрата/прямоугольника/четверки даже с одним закругленные углы расположение края четырехугольника равно не поддерживается. Баллы на закругленные углы остаются. Однако аппроксимацию можно использовать для сегмент исходного контура, отбрасывания «угловых» точек и работы с краевыми точками.

Другие вопросы по теме

Похожие вопросы

Как вставить запись в Microsoft Access с помощью MFC?
Включение предварительно скомпилированного заголовка и непредварительно скомпилированного заголовка в файл .cpp приводит к тому, что файл .cpp не распознает непредварительно скомпилированный заголовок.
Привязка rvalue ref к строковому литералу в конструкторе по сравнению с построением на месте
ROOT (CERN): постройте фигуру с планками погрешностей, используя данные из файла csv.
Требуется позиционирование предложения в шаблонах функций C++20.
Как я могу показать блок комментариев внутри блока кода внутри блока doxygen?
Инициализация параметризованного массива вложенных структур C++
Как определить функцию-член специализированного класса шаблона?
Будет ли std::unordered_map::clear() медленнее, чем std::map::clear(), потому что операции очистки «выполняются» в первом?
Как получить из «std::thread::id» тот же идентификатор, что и «идентификатор потока WinAPI» (в Windows)?