擅长:python、mysql、java
<p>我从来没有解决过这个问题,所以我只是提出一个建议。在</p>
<p>首先,为整个图形生成一个边界椭圆,以确定最上面和最下面的点是什么。(如果有更好的方法找到这些点,则不必执行此步骤。)</p>
<p>接下来,使用改进的二进制搜索来检测“颈部”的位置。(这里我假设你的边界椭圆有一个垂直方向,生成两组边界椭圆:一组具有从图形顶部到图形的1/4点的椭圆(意思是如果您通过边界椭圆绘制一条直线,则1/4点位于左上点和中间点之间),以及从1/4点到图形的底部,从图形顶部到3/4点有一个椭圆,从3/4点到图形底部有一个椭圆;总面积较小的一组椭圆是更好地封装头部的一组椭圆。继续搜索(例如,下一步测试一个椭圆,从顶部到1/8点/7/8点,和/或从顶部到3/8点/5/8点),直到最小化椭圆集的总边界区域;椭圆相交的点是颈部。(不必太精确,如果你把脖子放在34/256ths点或35/256ths点可能没什么区别。)</p>
<p>要检测颈部,可能需要使用边界框而不是边界椭圆。在</p>
<p>最后,调整两个边界椭圆,以满足它们的角度约束,例如,通过以5%的增量移动其极值点(因此,假设头部椭圆的极值点在y坐标0和50上,身体椭圆的极值点在y坐标50和200上,调整它们,使其极端y坐标分别是0和60,40和200)。在</p>