Дискретное преобразование Фурье #764891


#0 by batmansoft
Добрый день. На C# реализовал алгоритм дискретного преобразования Фурье и обратно, согласно формулам вот этим: . Начал тестировать и почему то при обратно преобразовании результат даже близко не валяется с тем, что было на входе первого преобразования. По формулам вроде бы все правильно в алгоритме сделал. Использовал стандартные C#-аповские Compex. подскажите, пожалуйста, что тут может быть неправильно, что то мозги уже совсем плавятся от этих комплексных чисел. вот код:     /// <summary>     /// Преобразование Фурье     /// </summary>     public class FurieTrans     {         /// <summary>         /// Коэффициенты         /// </summary>         public List<Complex> koeffs;         /// <summary>         /// Количество точек, которые закодированы в данном ДПФ         /// </summary>         public double K;         public FurieTrans         {             koeffs = new List<Complex>;         }         /// <summary>         /// Выполнить дискретное преобразование Фурье         /// </summary>         /// <param name="points">Точки контура</param>         /// <param name="count">Количество коэффициентов</param>         public void dpf(List<Point> points, int count)         {             koeffs.Clear;             K = points.Count;             //Цикл вычисления коэффициентов             for(int u=0; u<count; u++)             {                 //цикл суммы                 Complex summa = new Complex;                 for (int k = 0; k < K; k++)                 {                     Complex S = new Complex(points[k].X, points[k].Y);                     double koeff = -2 * Math.PI * u * k / K;                     Complex e = new Complex(Math.Cos(koeff), Math.Sin(koeff));                     summa += (S * e);                 }                 koeffs.Add(summa/K);             }         }         /// <summary>         /// Обратное преобразование Фурье         /// </summary>         /// <returns>Точки</returns>         public List<Complex> undpf         {             List<Complex> res = new List<Complex>;             for(int k=0; k<K-1; k++)             {                 Complex summa = new Complex;                 for (int u = 0; u < koeffs.Count; u++ )                 {                     double koeff = 2 * Math.PI * u * k / K;                     Complex e = new Complex(Math.Cos(koeff), Math.Sin(koeff));                     summa+=(koeffs[u]*e);                 }                 res.Add(summa);             }             return res;         }     }
#1 by Garykom
А может не умничать и сказать нафуя?
#2 by Garykom
ЗЫ
#3 by batmansoft
Магистерскую диссертацию пишу на тему "Компьютерное зрение". Проблема: как получить инвариантный дескриптор контура. Решил посмотреть в сторону преобразования Фурье. Кажется, разорался, оказывается, количество коэффициентов должно равняться количеству точек, а не так как в классическом преобразовании, где чем больше коэффициентов, тем точнее. Но за ссылку все равно спасибо.
#4 by Рэйв
подумаешь Фурье...Вот теорему Ферма бы реализовал - это было бы и почет и нобелевская премия:-)
#5 by Рэйв
а то аоследнии изыски которые засчитали - не внушают доверия
#6 by Garykom
>получить инвариантный дескриптор контура для этой цели обычно векторизацию юзают, а не гармоники хотя если взять некую точку в центре контура и далее как в полярных координатах пройтись по окружности...гм
#7 by batmansoft
А реализацию искусственного интеллекта (или хотя бы его части, напр., компьютерное зрение) - это разве не достойная задача?
#8 by batmansoft
Дык в планах есть и векторизацию рассмотреть. Но с гармониками вот что удобно: можно сравнивать и приближенные контуры. Например, если хороший четкий контур, который надо сравнить с кривым и расплывчатым, который получиться в ходе анализа  какого-то изображения, и сказать, насколько они похожи. Вот как сравнивать?
#9 by Garykom
а может все таки не свой лисапед с 0, а взять OpenCV ?
#10 by rsv
Это где то  из области радиолокации ?
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С