LINUX.ORG.RU

Автокорреляция

 , ,


0

2

Интересует библиотека, способная быстро вычислять функцию автокорреляции двумерных массивов (изображения) по всем 3 вариациям. Лучше для С, но и для С++ пойдёт. Больше всего интересует, чтобы она могла это белать как можно быстрее, поэтому и сам не берусь писать, не желая погрязнуть в оптимизациях.

Ответ на: комментарий от abalakin

См. http://en.wikipedia.org/wiki/Autocorrelation#Efficient_computation . А быстрое Фурье преобразование умеют вычислять многие (например, fftw3, GSL и др.).

Это для одномерного случая. Не думаю, что так уж просто будет приспособить это для двумерного.

auto12884839
() автор топика
Ответ на: комментарий от auto12884839

См. http://en.wikipedia.org/wiki/Autocorrelation#Efficient_computation . А быстрое Фурье преобразование умеют вычислять многие (например, fftw3, GSL и др.).

Это для одномерного случая. Не думаю, что так уж просто будет приспособить это для двумерного.

А в чем сложность? Сдвиги по каждой из осей независимы. Можете сразу двумерную корреляцию считать. Двумерное (и многомерное) Фурье — стандартная опция всех мат. пакетов/библиотек.

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

abalakin ★★
()
Ответ на: комментарий от abalakin

А в чем сложность?

Например, я не уверен, как будет выглядеть теорема Винера-Хинчина в этом случае.

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

Ну и это тоже. Хотя можно взять любой готовый алгоритм поворота изображения со сглаживанием. Всё равно делов навалом. Может быть я так и поступлю, но хотелось бы готовую библиотеку.

auto12884839
() автор топика

Для двумерной автокорреляции подойдёт двумерный фильтр, их быстрое вычисление основано на двумерном быстром преобразовании Фурье. В качестве ядра (импульсной функции) фильтра надо взять то же самое изображение, только с обратным порядком пикселей (то есть отражённое слева направо и сверху вниз).

Поворот (для третьего параметра) придётся приделывать самостоятельно, но библиотечные функции есть.

prischeyadro ★★★☆☆
()

Интересует библиотека, способная быстро вычислять функцию автокорреляции двумерных массивов

Image Processing Toolbox: xcorr2 - вычисление коэффициентов корреляции между двумя матрицами,

fftn - n–мерное БПФ,
convn - свертка N–мерных сигналов,
radon - преобразование Радона (для инвариантности к повороту, ещё иногда применяют преобразование Фурье-Меллина).

быстро вычислять

Digital Signal Processors + FFT Acceleration.

quickquest ★★★★★
()

А можно поинтересоваться, какую характеристику позволяет узнать АКФ по повороту? Спектральной мощности по x и y недостаточно?

prischeyadro ★★★☆☆
()
Ответ на: комментарий от prischeyadro

Грубо говоря, мне нужно отслеживать перемещения объектов. Если на изображеии есть объект, который сместился на X, Y и повернулся вокруг какой-либо оси на \alpha, функция автокорелляции будет иметь локальный максимум в точке (X, Y, \alpha).

auto12884839
() автор топика
Ответ на: комментарий от auto12884839

Для этого лучше смотри преобразования, инвариантные к повороту.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от auto12884839

И автокорреляция тут ни при чём, кстати, это уже взаимная корреляция.

prischeyadro ★★★☆☆
()

Можно глянуть, как реализовано в gwyddion.

greenman ★★★★★
()
Ответ на: комментарий от auto12884839

Неспешно пишу такую штуку. Без математики, чисто придуманные мной алгоритмы. Правда там еще учитывается увеличение-уменьшение объекта.

rimsleur
()

Вспомнилась OpenCV — оно не может?

greenman ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.