Процедура подбора активных моделей формы не совпадает с функцией подбора статистической модели

Я следовал подходу Active Shape Models, описанному Тимом Кутсом в учебник и оригинальный документ. Пока все шло хорошо (анализ прокруста, анализ главных компонент, предварительная обработка изображений (контраст, шум)). Только сама процедура подгонки кажется не сходящейся.

Я использую статистическую модель подхода структуры серого уровня, как описано в учебник (стр. 13) для создания функции подгонки для каждого из 8 резцов, для каждого из 40 ориентиров (таким образом, всего создается 320 различных функций подгонки) для каждого резца путем выборки 5 (=k ) точки с обеих сторон вдоль профиля, нормального к границе, через каждый из 40 ориентиров для каждого из 8 резцов. Эти функции равны расстоянию Махаланобиса (учебник стр. 14).

Во время процедуры подбора я отбираю 10 (=m>k) точек с каждой стороны вдоль профиля, перпендикулярного границе, через каждый из 40 ориентиров текущего приближения зуба. Таким образом, я должен оценить 2(m-k)+1 выборки с помощью соответствующей функции подбора. Каждый из этих образцов содержит значение градиента 2k+1 точек. Выбирается образец, который минимизирует функцию, и соответствующий ориентир располагается в средней точке этих 2k+1 точек. Это делается для каждого из 40 ориентиров. Это приводит к новой (еще не подтвержденной) аппроксимации зуба.

Это приближение в системе координат изображения выравнивается с моделью зуба в системе координат изображения. Затем рассчитываются коэффициенты (bi) анализа главных компонентов и проверяются, |bi|<3*sqrt(eigenvalue_i) ли они, чтобы не слишком сильно отклоняться от формы модели. Коэффициенты (bi) при необходимости ограничиваются, и мы возвращаемся к системе координат изображения и начинаем новую итерацию.

Показывает изображение, на котором мы хотим найти левый верхний резец.

введите здесь описание изображения

Показывает градиентное изображение с аппроксимацией зуба в системе координат изображения на итерации 19. (Красный: до проверки - Зеленый: после проверки) Как видно, мы немного отклонились от оптимального решения.

def create_gradient(img):
    temp = cv2.Scharr(img, ddepth=-1, dx=1, dy=0)
    return cv2.Scharr(temp, ddepth=-1, dx=0, dy=1)

введите здесь описание изображения

Показывает аппроксимацию зуба в системе координат модели на итерации 19. (Синий: модель - Красный: до проверки - Зеленый: после проверки) Как видно, мы все еще близки к форме модели.

введите здесь описание изображения

Показывает аппроксимацию зуба в системе координат модели за 19 итераций. (Синий: модель - Красный: до проверки - Зеленый: после проверки) Как видно, мы остаемся близкими к форме модели на протяжении всех этих итераций.

введите здесь описание изображения

Таким образом, мы остаемся близкими к форме (защищенной анализом главных компонентов), но не близко к поведению интенсивности (защищаемому функцией подгонки) вокруг ориентиров.


person Matthias    schedule 19.05.2014    source источник


Ответы (1)


Градиентное изображение неправильное или лучше, бесполезно, потому что нужно брать производную по нормалям профиля, а не по горизонтали и вертикали.

person Matthias    schedule 19.05.2014