Дескрипторы Фурье в MATLAB - PullRequest
       22

Дескрипторы Фурье в MATLAB

0 голосов
/ 20 сентября 2018

Я пытаюсь найти совпадение между границами фигур, которые не совсем совпадают.Я использую дескриптор Фурье для представления этих границ и нахожу сходство на основе DTW следующим образом: (X,Y) - это координаты точки, отсортированные по часовой стрелке.

Z = complex(X, Y);
FD = fft(Z);
FD(1) = 0;
FD = FD/FD(2);

Затем для меры сходства:

Dist = dtw(abs(FD1),abs(FD2));

Результат сходства не является точным, поэтому я хотел бы проверить, правильно ли я применил дескриптор Фурье и какие-либо рекомендации по критерию подобия.

Когда я пытаюсь ifft вернуть формуПолученная форма является отражением исходной формы.Как мне решить эту проблему?

1 Ответ

0 голосов
/ 20 сентября 2018

Обратите внимание на нормализации, которые вы применяете к компонентам Фурье:

FD = fft(Z);
FD(1) = 0;       % ignore translation
FD = FD/FD(2);   % normalize for size, and rotate

FD(1) является компонентом постоянного тока и кодирует перевод.FD(2) - самая низкая частота, она представляет (вместе с FD(end)) один компонент синус + косинус для контура.С помощью этого компонента вы можете представлять эллипс.Фаза кодирует ориентацию эллипса, величина кодирует размер, а разность величин между FD(2) и FD(end) представляет соотношение сторон.Делив на FD(2), вы нормализуетесь по размеру и накладываете определенное вращение, определяемое только эллипсом наилучшего соответствия. Это объясняет, почему ваша форма казалась отраженной при использовании IFFT, она поворачивается в какую-то стандартную ориентацию.

В вашей мере ошибки вы сравниваете только величину компонентов двух фигур. Не обращая внимания на фазу, вы отбрасываете много того, что делает форму. Например, попробуйте построить IFFT для величины дескриптора Фурье.Вы увидите что-то, что совсем не похоже на вашу первоначальную форму.

Однако это обычное дело, поскольку это самый простой способ получения инвариантности вращения.Стандартизация ориентации, основанная на эллипсе наилучшего соответствия, очень чувствительна к шуму (с шумом, например, расположение образцов вдоль контура).На самом деле, значение большинства элементов дескриптора Фурье очень чувствительно к этим местоположениям , если контур выбирается в разных местах, дескриптор Фурье значительно изменяется.

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

Далее, поскольку FD(1) было установлено в 0, а FD(2) в1, эти два компонента не являются полезными.Кроме этого, вы должны смотреть только на первые несколько компонентов (скажем, n):

FD(1)   % ignore, set to 0 above
FD(2)   % ignore, set to 1 above
FD(3)
FD(4)
...
FD(n+2)

Эти частотные компоненты имеют связанный элемент, который можно найти по адресу:

FD(1)   -> none
FD(2)   -> FD(end)
FD(3)   -> FD(end-1)
FD(4)   -> FD(end-2)
...
FD(n+2) -> FD(end-n)

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

Это приводит к 2*n-1 числам (3:n+2 и end-n:end).).n обычно равно 10, но и здесь экспериментируйте с меньшими значениями.

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


TL; DR:

Мне кажется, что мера расстояния dtw неправильная, попробуйте использовать нормальное евклидово расстояние (среднее квадратное)разница).Далее сравните только первые ~ 10 компонентов, последующие компоненты добавят больше шума, чем полезной информации.Но оставьте первые два элемента, так как они стали бесполезными из-за нормализации.

...