Реальная реализация преобразования медиальной оси? - PullRequest
5 голосов
/ 12 февраля 2011

Я видел множество объяснений того, на чем основан алгоритм, но я не могу найти какой-либо реальный код (псевдокод или на каком-либо языке) преобразования медиальной оси.

В некоторых случаях (например, полигоны с дискретными углами) его можно упростить до треугольника Делоне, но меня больше касается случай, когда у вас есть капля (например, отслеживаемый человек) и вы хотитевычислить его скелет.

Как будет выглядеть псевдокод для этого?

1 Ответ

5 голосов
/ 12 февраля 2011

Here у вас есть код из pymorph library:

Это в основном:

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

enter image description here

НТН!

...