LINUX.ORG.RU

Thinning алгоритм

 ,


0

1

Добрый день, прошу помочь разобраться. Реализовал алгоритм по ссылке. Вот пример работы:

#2A((0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0)
    (0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0)
    (0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0)
    (0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0)
    (0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0)
    (0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0)
    (0 0 0 1 1 1 1 0 1 1 1 1 0 0 0 0)
    (0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 0)
    (0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0)
    (0 0 1 1 1 1 0 0 0 1 1 1 1 1 0 0)
    (0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0)
    (0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)
    (0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0)
    (1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1)
    (1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1)
    (1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1)) 
превратилось в:
   ((. . . . . . . . . . . . . . . .)
    (. . . . . . . . . . . . . . . .)
    (. . . . . . . . . . . . . . . .)
    (. . . . . . . . . . . . . . . .)
    (. . . . . . @ @ @ . . . . . . .)
    (. . . . . @ @ . . @ . . . . . .) ;A
    (. . . . . @ . . . . @ . . . . .)
    (. . . . @ . . . . . @ . . . . .)
    (. . . . @ . . . . . @ . . . . .)
    (. . . . @ . . . . . @ . . . . .)
    (. . . @ . . . . . . @ @ . . . .)
    (. . . @ @ @ @ @ @ @ . . @ @ . .) ;B
    (. . @ . . . . . . . . . . @ . .)
    (. . @ . . . . . . . . . . @ . .)
    (. @ . . . . . . . . . . . . . .)
    (. . . . . . . . . . . . . . . .))
Видны артефакты в строчках A и B. Вопрос в следующем - в алгоритме используются правила для удаления пикселей, и по этим правилам такие артефакты проходят или я где-то ошибся? Описание алгоритма короткое и простое, посмотрите плз кому не лень, просто есть ощущение что я чего-то очевидного не замечаю.

p.s. Внёс поправку - там где у них считается A(P1):

where A(P1) is the number of 01 patterns in the ordered set P2, P3, P4, - • - P8, P9 that are the eight neighbors of P1

добавил P9 -> P2, без этого бред получался, наверное у них просто неточность.

p.p.s. по идее если так и должно быть то нахрен такой алгоритм вообще нужен, но это маловероятно, учитывая что на него ссылаются в других работах.

кому не лень

Мне по воскресеньям лень :)

по идее если так и должно быть то нахрен такой алгоритм вообще нужен

В алгоритмах скелетизации есть понятия 4-х и 8-ми связности в которых число допустимых соедей разное, поэтому нужно всё делать и проверять самому, ибо алгоритм не знает как тебе надо.

quickquest ★★★★★
()

В чём, по-твоему, заключаются артефакты? Втоде всё нормально, у них в примерах точно так же.

mashina ★★★★★
()

в общем добавил ещё одно правило, но скорость от этого пострадает.

 (conditions-after (p1y p1x)
         (and (= (pixel img p1y p1x) 1)
              (< (01-patterns p1y p1x) 3)
              (< (loop for i from 2 to 8 by 2 sum (p-i p1y p1x i)) 3)
              (or (and (= (p-i p1y p1x 2) 1) (= (p-i p1y p1x 4) 1))
                  (and (= (p-i p1y p1x 4) 1) (= (p-i p1y p1x 6) 1))
                  (and (= (p-i p1y p1x 6) 1) (= (p-i p1y p1x 8) 1))
                  (and (= (p-i p1y p1x 8) 1) (= (p-i p1y p1x 2) 1)))))

pseudo-cat ★★★
() автор топика
Ответ на: комментарий от buddhist

в строке B крайний правый пиксель лишний, к примеру

pseudo-cat ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.