Свертывание Vs Корреляция

Может ли кто-нибудь объяснить мне сходства и различия, Корреляции и свертывания? Пожалуйста, объясните интуицию, а не математическое уравнение (т.е. Переверните ядро ​​/импульс). Примеры приложений в домене обработки изображений для каждой категории также будут оценены.

Ответ 1

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

  • Корреляция
  • Кросс-корреляция
  • Свертка
  • Коэффициент корреляции
  • Продукт с раздвижными точками
  • Корреляция Пирсона

1, 2, 3 и 5 очень похожи.

4,6 аналогичны

Обратите внимание, что все эти термины имеют точечные продукты, поднимающие головы.

Вы спросили о Correlation и Convolution - они концептуально одинаковы, за исключением того, что вывод перевернут в свертке. Я подозреваю, что вы, возможно, спрашивали о различии между коэффициентом корреляции (например, Pearson) и сверткой/корреляцией.

Предпосылки

Я предполагаю, что вы знаете, как вычислить dot-продукт. Для двух равномерных векторов v и w, каждый из которых имеет три элемента, произведение алгебраических точек равно v [0] * w [0] + v [1] * w [1] + v [2] * w [2]

Существует много теории за точкой продукта с точки зрения того, что она представляет и т.д.

Обратите внимание, что точечный продукт представляет собой одно число (скаляр), представляющее отображение между этими двумя векторами/точками v, w. В геометрии часто вычисляется косинус угла между двумя векторами, который использует точечный продукт. Косинус угла между двумя векторами находится между -1 и 1 и может рассматриваться как мера сходства.

Коэффициент корреляции (Pearson)

Коэффициент корреляции между равной длиной v, w является просто точечным произведением двух нулевых средних сигналов (вычесть среднее v из v, чтобы получить zmv и среднее w из w, чтобы получить zmw - здесь zm является сокращением для нулевого среднего), деленное на величины zmv и zmw.

чтобы создать число между -1 и 1. Близко к нулю означает небольшую корреляцию, близкую к +/- 1, является высокой корреляцией. он измеряет сходство между этими двумя векторами.

Для лучшего определения см. http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient.

Свертка и корреляция

Когда мы хотим скоррелировать/свертывать v1 и v2, мы в основном вычисляем ряд точечных произведений и помещаем их в выходной вектор. Скажем, что v1 - три элемента, а v2 - 10 элементов. Точечные продукты, которые мы вычисляем, следующие:

output[0] = v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2]
output[1] = v1[0]*v2[1]+v1[1]*v2[2]+v1[2]*v2[3]
output[2] = v1[0]*v2[2]+v1[1]*v2[3]+v1[2]*v2[4]
output[3] = v1[0]*v2[3]+v1[1]*v2[4]+v1[2]*v2[5]
output[4] = v1[0]*v2[4]+v1[1]*v2[5]+v1[2]*v2[6]
output[5] = v1[0]*v2[7]+v1[1]*v2[8]+v1[2]*v2[9]
output[6] = v1[0]*v2[8]+v1[1]*v2[9]+v1[2]*v2[10] #note this is 
#mathematically valid but might give you a run time error in a computer implementation 

Выход может быть перевернут, если требуется истинная свертка.

output[5] = v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2]
output[4] = v1[0]*v2[1]+v1[1]*v2[2]+v1[2]*v2[3]
output[3] = v1[0]*v2[2]+v1[1]*v2[3]+v1[2]*v2[4]
output[2] = v1[0]*v2[3]+v1[1]*v2[4]+v1[2]*v2[5]
output[1] = v1[0]*v2[4]+v1[1]*v2[5]+v1[2]*v2[6]
output[0] = v1[0]*v2[7]+v1[1]*v2[8]+v1[2]*v2[9]

Обратите внимание, что на выходе мы имеем менее 10 элементов, так как для простоты я вычисляю свертку только там, где определены как v1, так и v2

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

Возможно, вы захотите посмотреть на эти ресурсы, а также на googling: Вычисление корреляции и значимости Pearson в Python

Ответ 2

Лучший ответ, который я получил, был из этого документа: http://www.cs.umd.edu/~djacobs/CMSC426/Convolution.pdf

Я собираюсь скопировать выдержку из документа:

"Ключевое различие между ними состоит в том, что свертка ассоциативна, т.е. если F и G являются фильтрами, то F * (GI) = (FG) * I. Если вы не верите в это, попробуйте простой пример, например, с помощью F = G = (- 1 0 1). Очень удобно, чтобы свертка была ассоциативной. Предположим, например, что мы хотим сгладить изображение и затем взять его производную. Мы могли бы сделать это, свернув изображение с гауссовым фильтром, а затем свертывание его с помощью производного фильтра. Но мы могли бы альтернативно свернуть производный фильтр с гауссовым, чтобы создать фильтр, называемый разностью гауссовых (DOG), а затем сверлить его с помощью нашего изображения. это то, что фильтр DOG можно предварительно вычислить, и нам нужно только сверлить один фильтр с нашим изображением.

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

Ответ 3

Свертывание подобно корреляции, за исключением того, что мы перебрасываем фильтр перед корреляцией