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

Я следовал подходу 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 итераций. (Синий: модель - Красный: перед проверкой - Зеленый: после проверки) Как видно, мы остаемся близкими к форме модели на протяжении всех этих итераций

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

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

1 ответ

Решение

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

Другие вопросы по тегам