gpt4 book ai didi

c++ - 查找轮廓上凸点的索引

转载 作者:太空宇宙 更新时间:2023-11-03 22:57:53 24 4
gpt4 key购买 nike

我有一个构成蠕虫轮廓的有序点 vector (使用 opencv 找到)。我正在尝试沿着蠕虫的骨架获取点。我想非常快地执行此操作,因此有一个简单的分段功能:

void Worm::segmentWorm(void)
{
int jump = 5;
int numPoints = wormContour.size();

int currentIndex = headIndex; //large circle in image w/overlay
int endIndex = tailIndex; //small circle in image w/overlay
int matchingIndex;

int direction = (endIndex - currentIndex)/abs(endIndex - currentIndex);

int thisSideLength = abs(endIndex - currentIndex);
int otherSideLength = numPoints - thisSideLength;

double lengthPercentage;

if (direction > 0) {
while (currentIndex < endIndex - jump) {
currentIndex += jump;

lengthPercentage = (double)(endIndex - currentIndex)/(double)thisSideLength;
matchingIndex = boundCheck((int)((lengthPercentage * otherSideLength) + endIndex), numPoints - 1);

segments.push_back(pair<int, int>(currentIndex, matchingIndex));
}
} else if (direction < 0) {
while (currentIndex > endIndex + jump) {
currentIndex -= jump;

lengthPercentage = (double)(currentIndex - endIndex)/(double)thisSideLength;
matchingIndex = boundCheck((int)(-(lengthPercentage * otherSideLength) + endIndex), numPoints - 1);

segments.push_back(pair<int, int>(currentIndex, matchingIndex));
}
}
}

这个函数的问题是,当蜗杆弯曲很多时,即轮廓在一侧变得凹陷,骨架切角,不再代表蜗杆的中心。我的解决方案是移动线段末端(如果它们是凹的),校正线段和骨架。

有没有关于找到轮廓上所有凹(或凸)点的非常省时的函数的建议?

问题图片:

enter image description here

最佳答案

如果不进行一些几何计算,就无法从该数组中获取正确的点对。

一种解决方案是沿一侧迭代,然后使用法线找到对应的点。我想如果蠕虫的宽度变化不大,你可以使用固定的偏移长度来搜索另一个点,也可以使用另一边的点的子集来搜索另一个点,这意味着 BF 匹配应该很快。然后您可以在迭代时更新偏移量和子集。

编辑:如果对对方索引的初始猜测不是很糟糕,那么甚至不需要强力匹配,因为您可以遍历边直到没有更近的点为止。

关于c++ - 查找轮廓上凸点的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25193325/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com