Я работаю над проектом компьютерного зрения на C++, где мне нужно отфильтровать список концентрических кругов на основе их близости и разницы в размерах. Каждый круг определяется структурой. Мне нужно обработать эти круги, чтобы отфильтровать группы по двум критериям:
В пределах евклидова расстояния менее 10 единиц в группе. >
Имейте разницу в размерах (радиусе) более 20 единиц, при этом все круги находятся в пределах
указанного порогового значения расстояния в группе.
std::vector allCircles; // contains all circles to be filtered
std::vector tmpcircles;
std::vector circles;
while (!allCircles.empty()) {
tmpcircles.clear();
// Take the first circle from allCircles and use it as a reference
Circle initialCircle = allCircles.front();
tmpcircles.push_back(initialCircle); // Add it to tmpcircles
allCircles.erase(allCircles.begin()); // Remove the initial circle from allCircles
auto it = allCircles.begin();
while (it != allCircles.end()) {
double dist = std::pow(it->Center.x - initialCircle.Center.x, 2) +
std::pow(it->Center.y - initialCircle.Center.y, 2);
if (dist < 10) {
tmpcircles.push_back(*it);
it = allCircles.erase(it); // Remove the circle from allCircles and move to next
} else {
++it; // Move to next circle
}
}
if (tmpcircles.size() > 1) {
circles.insert(circles.end(), tmpcircles.begin(), tmpcircles.end());
}
}
Каким будет наиболее оптимизированный или эффективный способ реализовать критерии разницы размеров рядом с проверкой расстояния для относительно больших (~ 150) наборов данных кругов?
Любые предложения или код примеры были бы очень признательны.
Я работаю над проектом компьютерного зрения на C++, где мне нужно отфильтровать список концентрических кругов на основе их близости и разницы в размерах. Каждый круг определяется структурой. Мне нужно обработать эти круги, чтобы отфильтровать группы по двум критериям: [list] [*]В пределах евклидова расстояния менее 10 единиц в группе. > [*]Имейте разницу в размерах (радиусе) более 20 единиц, при этом все круги находятся в пределах указанного порогового значения расстояния в группе. [/list] [code]struct Circle { cv::Point2f Center; double Radius; }; [/code] [code]std::vector allCircles; // contains all circles to be filtered std::vector tmpcircles; std::vector circles;
while (!allCircles.empty()) { tmpcircles.clear();
// Take the first circle from allCircles and use it as a reference Circle initialCircle = allCircles.front(); tmpcircles.push_back(initialCircle); // Add it to tmpcircles allCircles.erase(allCircles.begin()); // Remove the initial circle from allCircles
auto it = allCircles.begin(); while (it != allCircles.end()) {
if (dist < 10) { tmpcircles.push_back(*it); it = allCircles.erase(it); // Remove the circle from allCircles and move to next } else { ++it; // Move to next circle } }
expected output for the group if center distance < 10 and size difference > 20: [ Center: 1034,1136, Radius: 595.683] [ Center: 1039,1137, Radius: 137.478] [ Center: 1039,1137, Radius: 92.1536] [ Center: 1039,1137, Radius: 1280.59]
[/code] Каким будет наиболее оптимизированный или эффективный способ реализовать критерии разницы размеров рядом с проверкой расстояния для относительно больших (~ 150) наборов данных кругов? Любые предложения или код примеры были бы очень признательны.
Я работаю над проектом компьютерного зрения на C++, где мне нужно отфильтровать список концентрических кругов на основе их близости и разницы в размерах. Каждый круг определяется структурой. Мне нужно обработать эти круги, чтобы отфильтровать группы...
Я работаю над проектом компьютерного зрения на C++, где мне нужно отфильтровать список концентрических кругов на основе их близости и разницы в размерах. Каждый круг определяется структурой. Мне нужно обработать эти круги, чтобы отфильтровать группы...
Я работаю над проектом компьютерного зрения на C++, где мне нужно отфильтровать список концентрических кругов на основе их близости и разницы в размерах. Каждый круг определяется структурой. Мне нужно обработать эти круги, чтобы отфильтровать группы...
Я работаю над проектом компьютерного зрения на C++. У меня есть вектор кругов, который я обрабатываю.
Мой текущий подход таков:
Инициируется цикл, который продолжается до тех пор, пока во allCircles остаются круги.
В начале каждой итерации первый...