Может ли кто-нибудь объяснить мне сходства и различия корреляции и свертки? Пожалуйста, объясните интуицию, стоящую за этим, а не математическое уравнение (т.е. переворачивание ядра/импульса). Примеры приложений в области обработки изображений для каждой категории также будут оценены.
Свертка против корреляции
Ответы (3)
Вы, вероятно, получите гораздо лучший ответ по обмену стеками dsp, но... для начала я нашел ряд похожих терминов, и им может быть сложно определить определения.
- Корреляция
- Взаимная корреляция
- свертка
- Коэффициент корреляции
- Скользящее точечное произведение
- Корреляции Пирсона
1, 2, 3 и 5 очень похожи
4,6 похожи
Обратите внимание, что у всех этих терминов есть точечные произведения, поднимающие голову.
Вы спрашивали о корреляции и свертке - они концептуально одинаковы, за исключением того, что вывод переворачивается в свертке. Я подозреваю, что вы, возможно, спрашивали о разнице между коэффициентом корреляции (например, Пирсона) и сверткой/корреляцией.
Предпосылки
Я предполагаю, что вы знаете, как вычислить скалярное произведение. Учитывая два вектора одинакового размера v и w, каждый из которых состоит из трех элементов, алгебраическое скалярное произведение равно v[0]*w[0]+v[1]*w[1]+v[2]*w[2]
Существует много теорий, лежащих в основе скалярного произведения с точки зрения того, что оно представляет и т. д....
Обратите внимание, что скалярное произведение — это одно число (скалярное), представляющее отображение между этими двумя векторами/точками v,w. В геометрии часто вычисляют косинус угла между двумя векторами, используя скалярное произведение. Косинус угла между двумя векторами находится между -1 и 1, и его можно рассматривать как меру подобия.
Коэффициент корреляции (Пирсон)
Коэффициент корреляции между v, w равной длины — это просто скалярное произведение двух сигналов с нулевым средним значением (вычтите среднее значение v из v, чтобы получить zmv, и среднее значение w из w, чтобы получить zmw — здесь zm — сокращение от нулевого среднего), деленное на величины zmv. и змв.
для получения числа от -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.
Заметьте также, что свертка — это просто число скалярных произведений. За прошедшие годы была проделана значительная работа по ускорению сверток. Скользящие скалярные произведения медленны, и их можно ускорить, сначала преобразовав векторы в базисное пространство Фурье, а затем вычислив одно векторное умножение, а затем инвертировав результат, хотя я не буду вдаваться в подробности здесь...
Возможно, вы захотите просмотреть эти ресурсы, а также погуглить: Расчет корреляции и значимости Пирсона на Питоне
Лучший ответ, который я получил, был из этого документа: http://www.cs.umd.edu/~djacobs/CMSC426/Convolution.pdf
Я просто скопирую выдержку из документа:
«Основное различие между ними заключается в том, что свертка является ассоциативной. То есть, если F и G являются фильтрами, то F*(GI) = (FG)*I. Если вы этого не сделаете, поверьте, попробуйте простой пример, используя, например, F=G=(-1 0 1).Очень удобно, чтобы свертка была ассоциативной.Предположим, например, мы хотим сгладить изображение, а затем взять его производную. Мы могли бы сделать это, свернув изображение с фильтром Гаусса, а затем свернув его с производным фильтром.Но мы могли бы альтернативно свернуть производный фильтр с гауссовым фильтром, чтобы создать фильтр, называемый разностью гауссова (DOG), а затем свернуть это с нашим изображением.Хорошая вещь в этом заключается в том, что фильтр DOG может быть предварительно вычислен, и нам нужно только свернуть один фильтр с нашим изображением.
Как правило, люди используют свертки для операций обработки изображений, таких как сглаживание, и они используют корреляцию для сопоставления шаблона с изображением. Затем мы не возражаем против того, что корреляция не является ассоциативной, потому что на самом деле не имеет смысла объединять два шаблона в один с корреляцией, тогда как нам часто может понадобиться объединить два фильтра вместе для свертки».
Свертка аналогична корреляции, за исключением того, что мы переворачиваем фильтр перед корреляцией.