Преобразование Фурье и дескрипторы Фурье для извлечения функций фигур на Java

Я пытаюсь построить простую систему для распознавания простых форм, используя дескрипторы Фурье: Я использую эту реализацию быстрого преобразования Фурье в моей программе: (ссылка ниже)
http://www.wikijava.org/wiki/The_Fast_Fourier_Transform_in_Java_%28part_1%29

<code>fft(double[] inputReal, double[] inputImag, boolean direction)
</code>

входные данные: действительная и воображаемая части (которые по существу являются координатами x, y граничного параметра I) и выходы - преобразованные действительные и воображаемые числа.

Вопрос: Как я могу использовать выходные данные (преобразованные реальные, imag) в качестве инвариантных дескрипторов моих простых форм?

Это было то, что я думал:

calculate R = sqrt( real^2 + imag^2 ) for each N steps. divide each R by R[1] = the normalization factor to make it invariant.

Проблема в том, что я получаю очень разные значения R для слегка отличающихся изображений (например, небольшое вращение и т. Д.)

In other words :
Мои дескрипторы не являются инвариантами ... Я думаю, что я делаю что-то не так с получением значения R.

 Tirtha13 авг. 2012 г., 14:11
Блестящий сайт для ряда Фурье, посмотрите на негоFourier Series

Ответы на вопрос(2)

которую вы должны знать в первую очередь о дескрипторах Фурье: это чрезвычайно интересный метод, но он должен быть разработан правильно. То, что вы хотите, это неизменность; инвариантность для вращения, перевода, может быть, даже аффинных преобразований. Чтобы обеспечить хорошее сравнение с другими наборами дескрипторов Фурье, вы должны принять во внимание следующее:

if you want invariance to translation, do not use the DC-term, that is the first element in your resulting array of Fourier coefficients if you want invariance to scaling, make the comparison ratio-like, for example by dividing every Fourier coefficient by the DC-coefficient. f*[1] = f[1]/f[0], f*[2]/f[0], and so on. if you want invariance to the start point of your contour, only use absolute values of the resulting Fourier coefficients. Only the first 5 to 8 Fourier coefficients are useful when comparing the coefficients of two different objects; higher coefficients only go into the details of your contour which mostly isn't very useful information. (it's the global form that matters) Let's say you have 2 objects, and their Fourier descriptors. The resulting array of Fourier coefficients can be of a different size, meaning that the 'frequency interval' of the resulting frequency content is different for both shapes. You can't compare apples with pears. Zero-pad your shortest contour to match the size of the longest contour, and then calculate the Fourier descriptors. Now you have analogy between coefficients and a good comparison.

Надеюсь это поможет. Кстати, пользовательские решения FFT не следует доверять, на мой взгляд. Пойдите для библиотек решений, охватывают. При работе с изображениями OpenCV предоставляет утилиты преобразования Фурье.

попробуйте использовать разные дескрипторы форм из стандарта MPEG-7. Вам, вероятно, понадобится классификатор, взгляните на SVM, Boosting, Neural Networks ...:http://docs.opencv.org/modules/ml/doc/ml.html

Ваш ответ на вопрос