проблема нечеткого связанного алгоритма - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь реализовать алгоритм нечеткой связности на серии изображений, но он не работает со мной. Это фактические выходные изображения: enter image description here

но я ожидаю, что сегментированный объект будет выглядеть примерно так:

enter image description here

Вот моя реализация:

   for i in range(h):
        for j in range(w):
            if(memberShip.triangular2(seedPointOriginalValue,floatImg[i][j])>0):
                X.put(i)
                Y.put(j)
                L.put(floatImg[i][j])

    print("mjjjjjj",L.qsize())

    while L.qsize() != 0 :
        c = L.get()
        x = X.get()
        y = Y.get()
        memberShips = [0.0 for i in range(h*w)]
        n = 0
        for i in range(h):
            for j in range(w):
                d = floatImg[i][j]
                memberShips[n] = min(memberShip.triangular1(d, seedPointOriginalValue), memberShip.triangular(c, d))
                n += 1
        maxOfMin = max(memberShips) 
        matrix[x][y] = maxOfMin
        if(maxOfMin > memberShip.triangular1(c, seedPointOriginalValue)):
            qSize = L.qsize()
            for _ in range(qSize): 
            #   print(triangular(c,e))
                e = L.get()
                if(memberShip.triangular(c,e)>0) :
                    X.put(X.get())
                    Y.put(Y.get())
                    L.put(e)

Функции MemberShip:

def triangular1(x, seed):
    min = seed - 12
    max = seed + 12 
    m = seed
    #print(x)
    if(x <= min) :
        return 0
    if x >= max :
        return 0
    if min < x and x <= m :
        return (x - min) / (m - min)
    if m < x and x < max :
        return (max - x) / (max - m)

def triangular(x, y):
    min = y - 12
    max = y + 12
    m = y
    #print(x , y)
    if(x <= min) :
        return 0
    if x >= max :
        return 0
    if min < x and x <= m :
        return (x - min) / (m - min)
    if m < x and x < max :
        return (max - x) / (max - m)

def triangular2(o, c):
    min = o - 12
    max = o + 12
    m = o
    #print(x , y)
    if(c <= min) :
        return 0
    if c >= max :
        return 0
    if min < c and c <= m :
        return (c - min) / (m - min)
    if m < c and c < max :
        return (max - c) / (max - m)

Я думаю, что проблема в функциях членства, но я не могу понять, где проблема. Любая помощь приветствуется.

Заранее спасибо С наилучшими пожеланиями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...