Arhn - архитектура программирования

Что вычисляет scipy.signal.convolve2d?

В настоящее время я немного смущен выводом

#!/usr/bin/env python

import scipy.signal

image = [[1, 2, 3, 4, 5, 6, 7],
         [8, 9, 10, 11, 12, 13, 14],
         [15, 16, 17, 18, 19, 20, 21],
         [22, 23, 24, 25, 26, 27, 28],
         [29, 30, 31, 32, 33, 34, 35],
         [36, 37, 38, 39, 40, 41, 42],
         [43, 44, 45, 46, 47, 48, 49]]

filter_kernel = [[-1, 1, -1],
                 [-2, 3, 1],
                 [2, -6, 0]]

res = scipy.signal.convolve2d(image, filter_kernel,
                              mode='same', boundary='fill', fillvalue=0)
print(res)

Это было

[[  -2   -8   -7   -6   -5   -4   28]
 [   3   -7  -10  -13  -16  -19   14]
 [ -18  -28  -31  -34  -37  -40    0]
 [ -39  -49  -52  -55  -58  -61  -14]
 [ -60  -70  -73  -76  -79  -82  -28]
 [ -81  -91  -94  -97 -100 -103  -42]
 [-101  -61  -63  -65  -67  -69  -57]]

Я ожидал, что верхний левый элемент будет 3*1 + 1*2 + (-6) *8 + 0*9 = -43 (без дополненных нулей).

Я думал, что это расширит матричное изображение \in R^{7x7} до R^{9x9}, добавив один 0 слева/справа и сверху/снизу. Затем я подумал, что filter_kernel можно будет вычислить, «надвинув» его на image. В каждой позиции числа из изображения поточечно умножаются на числа из ядра. Девять продуктов суммируются и записываются в res.

Однако это -2. Очевидно, происходит что-то другое.

12.01.2017

  • Я ожидал, что верхний левый элемент будет 3*1 + 1*2 + (-6) *8 + 0*9 = -43 (без дополненных нулей). У вас получилось наоборот. Вы должны изменить порядок значений в ядре. 12.01.2017

Ответы:


1

Свертка меняет направление одной из функций, над которыми она работает. Проверьте определение в Википедии: одна функция параметризована с помощью τ, а другая — с -τ. То же самое относится и к 2D-свертке.

Вам нужно отразить ядро, чтобы получить ожидаемый результат:

filter_kernel = [[0, -6, 2],
                 [1, 3, -2],
                 [-1, 1, -1]]

res = scipy.signal.convolve2d(image, filter_kernel,
                              mode='same', boundary='fill', fillvalue=0)
print(res[0, 0])
# -43
12.01.2017
  • Есть ли какая-то конкретная причина, по которой ядро ​​перевернуто? 24.05.2021
  • @CoolCoder Хороший вопрос, на который нелегко ответить. Обращение одной из функций делает свертку коммутативной: вы получите тот же результат, если поменяете местами изображение и ядро. Это часто является желательным свойством. Это также имеет смысл в контексте фильтрации сигналов. Если ядро ​​​​является импульсным откликом, обращение ядра как бы выравнивает старые и новые части сигнала и ядра... 25.05.2021
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..