【问题标题】:How can I compute the diameter of the circle that circumscribes an irregular object?如何计算不规则物体外接圆的直径?
【发布时间】:2015-09-01 10:51:02
【问题描述】:

我想要一个函数来计算并获取包围对象的圆的直径。 MATLAB 中是否有内置函数来执行此操作?不然怎么办?

【问题讨论】:

    标签: matlab function


    【解决方案1】:

    试试这个算法:

    1. 计算不规则对象中每个点的平均 x 和平均 y。这是通过获取每个点的 x 和 y 分量并将它们添加到总 x 和总 y 中然后除以点数来完成的。这种平均 x 和平均 y 点算法为您提供了对象的非加权中心。

    2. 再次使用该中心点计算不规则对象中每个点的距离。保持最大距离作为物体的半径。

    3. 使用中心点和半径计算周长。

    我正在提交证明,证明对象中相距最远的 2 个点之间的距离以一个简单的三角形失败。见下图。此外,用于计算相距最远的两个点的大 O 表示法是 x^2。该算法的大 O 是 2x。图像中圆的直径将计算为 20; -10,0 和 10,0 之间的距离。直径为 20 的圆将不包含点 @ 0,-11。圆的任何移动都会自动移除用于计算圆直径的两个点中的至少一个,因为这两个点都在切线上。

    【讨论】:

    • 这是不正确的,在大多数情况下,生成的圆会与对象有一点接触。外接圆应至少接触两点。
    • 您能解释一下您认为它失败的原因吗?因为我很确定他的算法会提供正确的结果。唯一的限制是不规则对象的数据点必须均匀分布,才能使平均值不加权,这是满足您的需求所必需的。
    • 我不得不编辑我的答案以提供图像证明两个最远点之间的距离失败。
    【解决方案2】:

    假设 M 是 BW 中的掩码,就这样吧:

     [b_x,b_y] = find(bwperim(M)== 1)
    

    检查此功能bwperim

    【讨论】:

    • 警告:bwperim 需要图像处理工具箱。此外,这只能找到沿周边的位置。这不会找到包含对象的圆的直径。
    • 我无法回答所有问题,所以这只是一个帮助...... :)
    猜你喜欢
    • 2018-02-08
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多