2016-01-27 5 views
1

Я пытаюсь вычислить 2d авто и взаимную корреляцию изображений с помощью python (scipy.sig.fftconvolve). В терминах корреляции обычно требуется вычесть среднее значение. Однако уравнение для ковариации говорит, чтоPython 2D Автокорреляция fft - вычесть среднее или нет?

E [(X-E [X]) (Y-E [Y])] == E [XY] -E [X] E [Y].

Это означает, что теоретически я должен получить те же результаты, если я вычтем среднее значение перед выполнением автоматической корреляции или если вычесть среднее значение квадрата после корреляции. Это справедливо для случая пика или компонента постоянного тока, но не для остальной части изображения. И они выглядят по-разному, Вот пример autocorrelation with mean^2 subtracted off

enter image description here

и autocorrelation with mean subtracted off image before doing correlation

enter image description here

Так какой путь правильный путь ??

+0

Как вы имеете дело с границами? Если вы относитесь ко всему за границами как к нулю, то, если вы не вычтите среднее значение, вы получите большой треугольный оверлей (или пирамидальный в 2D) постоянного значения, исчезающего в нулевой области. – tom10

+0

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

+0

Часть 1: Есть три подхода к границам, первые два вы уже упоминали: 1) нулевое заполнение; 2) круговые данные; 3) сопоставить небольшую выборку данных с полным набором и оставаться в пределах границ. 3 может работать хорошо, если вы ищете функцию, которая мала относительно размера полного набора данных. Часть 2: Я думаю, что неинтересная, но часто подавляющая пирамидальная структура - достаточно хорошая причина для вычитания среднего (т. Е. Математика, которую вы показали, не рассматривает этот эффект). – tom10

ответ

1

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

Сначала рассмотрим случай постоянных данных и вычисление автокорреляции с использованием нулевого заполнения на границах. Результатом будет треугольник в 1D или пирамида в 2D. Если вы теперь супер-наложите небольшую пульсацию на эти данные, вы все равно увидите треугольник или пирамиду.

Но если вы вычтите среднее значение, треугольник/пирамида исчезнет, ​​и вы просто останетесь с автокорреляцией пульсации. Это, вероятно, то, что вы хотите.

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

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