gpt4 book ai didi

java - 将两个椭圆拟合到 body 轮廓

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:37:46 25 4
gpt4 key购买 nike

我正在尝试将两个椭圆拟合到恰好是 body 的俯 View /轮廓的位置。为简单起见,让我们使用以下示例:

enter image description here

如您所见,这个简单的 body 由一个长核(蓝色)和一个头部(红色)组成。实际上这个轮廓是一种颜色,我在这里只是为了可视化目的使用两种颜色。

我知道如何将单个椭圆拟合到该轮廓的任一部分,但我不知道如何拟合两个椭圆,因为这两个椭圆实际上是相连的。在这种特殊情况下,约束是两个椭圆永远不会分开,并且椭圆 1 和椭圆 2 之间只能有一定的角度。

我很感激任何告诉我如何编写函数的指针,以便在调用 magic_fitting_function(body_outline) 后程序返回两个基本椭圆的坐标:

enter image description here

编辑 1:可以使解决此问题更容易的最低要求是什么?例如。如果我得到一分、两分等,这将如何简化问题?

编辑 2:我正在寻找独立于编程语言的解决方案。

编辑 3:关于如何以编程方式制定这两个椭圆彼此处于某种关系的约束的任何提示?例如:我知道小椭圆总是位于大椭圆长轴的一端。另外小椭圆只能相对大椭圆旋转+-90度。

最佳答案

我从来没有解决过这个问题,所以我只是抛出一个建议。

首先,为整个图形生成一个边界椭圆,以确定什么是最高点和最低点。 (如果您有更好的方法找到这些点,则可能不需要此步骤。)

接下来,使用改进的二分查找法检测“颈部”的位置。 (这里我假设你的边界椭圆有一个垂直方向,就好像这个图形是站着或站在它的头上一样。)生成两组边界椭圆:一个椭圆从图形顶部到 1/图的 4 点(意思是如果你通过边界椭圆画一条线,那么 1/4 点在左上点和中间点之间)并且从 1/4 点到图的底部有一个椭圆,和一个从图形顶部到 3/4 点的椭圆和从 3/4 点到图形底部的椭圆;总面积较小的一组椭圆是更好地封装头部的椭圆。继续搜索(例如,接下来测试从顶部到 1/8 点/7/8 点和/或从顶部到 3/8 点/5/8 点的椭圆),直到将总边界最小化椭圆集的面积;椭圆相交的点是颈部。 (不需要太精确,如果你把琴颈放在 34/256ths 点或 35/256ths 点可能没有太大区别。)

要检测颈部,您可能需要使用边界框而不是边界椭圆。

最后,调整两个边界椭圆以满足它们的角度约束,例如通过以 5% 的增量移动它们的极值点(假设头部椭圆的极值点在 y 坐标 0 和 50 上, body 椭圆的极值点在 y 坐标 50 和 200 上,调整它们,使它们的极值 y -坐标在 0 和 60 以及 40 和 200 上)。

关于java - 将两个椭圆拟合到 body 轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17367171/

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