实际执行中轴变换?

发布于 2024-10-17 06:11:44 字数 162 浏览 5 评论 0原文

我已经看到了很多关于该算法所基于的解释,但我似乎找不到中轴变换本身的任何实际代码(伪代码或某种语言)。

对于某些情况(例如具有离散角的多边形),可以将其简化为 delaunay 三角形,但我更关心您有一个斑点(例如正在跟踪的人)并想要计算其骨架的情况。

这个的伪代码是什么样的?

I have seen plenty of explanations of what the algorithm is based on, but I can not seem to find any actual code (pseudocode or in some language) of the medial axis transform itself.

For certain instances (such as polygons with discrete corners), it can be simplified into a delaunay triangle, but I am more concerned with the case that you have a blob (such as a human being tracked) and want to compute its skeleton.

What would the pseudocode for this look like?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

黑寡妇 2024-10-24 06:11:44

这里你有来自pymorph 库

基本上是:

def mmskelm(f, B=None, option="binary"):
    from string import upper
    from Numeric import asarray
    if B is None: B = mmsecross()
    assert mmisbinary(f),'Input binary image only'
    option = upper(option)
    k1,k2 = mmlimits(f)
    y = mmgray(mmintersec(f, k1),'uint16')
    iszero = asarray(y)
    nb = mmsesum(B,0)
    for r in range(1,65535):
        ero = mmero( f, nb)
        if mmisequal(ero, iszero): break
        f1 = mmopenth( ero, B)
        nb = mmsedil(nb, B)
        y = mmunion(y, mmgray(f1,'uint16',r))
    if option == 'BINARY':
        y = mmbinary(y)
    return y

当然它使用了另一个函数来自同一个包。

的示例

Mathematica 在此处输入图像描述

HTH!

Here you have the code from the pymorph library:

It's basically:

def mmskelm(f, B=None, option="binary"):
    from string import upper
    from Numeric import asarray
    if B is None: B = mmsecross()
    assert mmisbinary(f),'Input binary image only'
    option = upper(option)
    k1,k2 = mmlimits(f)
    y = mmgray(mmintersec(f, k1),'uint16')
    iszero = asarray(y)
    nb = mmsesum(B,0)
    for r in range(1,65535):
        ero = mmero( f, nb)
        if mmisequal(ero, iszero): break
        f1 = mmopenth( ero, B)
        nb = mmsedil(nb, B)
        y = mmunion(y, mmgray(f1,'uint16',r))
    if option == 'BINARY':
        y = mmbinary(y)
    return y

Of course it uses another functions from the same package.

An example from Mathematica

enter image description here

HTH!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文