Режим вывода по умолчанию scipy.signal.convolve2d является полной сверткой. Если вы хотите, чтобы ваш выходной размер был таким же, как ваш входной размер, установите параметр mode как «same».
scipy.signal.convolve2d(similarity_matrix, np.diag(filter), mode="same")
Обновление: Когда вы сворачиваете изображение с ядром, вы не можете напрямую рассчитать результаты свертки по краям изображения, потому что отсутствуют некоторые соседи. Существуют различные способы решения этой проблемы
1 - игнорировать значения ребер, например. если ваше ядро имеет размер 3x3, игнорируйте элементы по краям, если ваше ядро имеет размер 5x5, игнорируйте последние 2 элемента по краям и т. д. *
2 - примените некоторый вид отступов к изображению, что означает увеличение вашего изображения вконкретный способ временно, так что вы можете применить применять ядро свертки к значениям на краю. Опять же, есть разные способы сделать это (и на этот раз больше, чем 2), но самый простой способ - это заполнение нулями. Например, если размер вашего изображения составляет 100x100, а ядро - 5x5, с каждой стороны изображения (справа, вверх, влево, вниз) мы не можем рассчитать свертку двух внешних значений из-за отсутствия соседей. Используя метод заполнения нулями, вы сначала увеличиваете изображение до 104x104. Это увеличенное изображение состоит из исходного изображения 100x100 в центре и некоторых нулевых значений, добавленных к краям, теперь главное - теперь вы можете применить свой фильтр к области 100x100, поскольку вы создали искусственных соседей для значений ребер.
Об именах режимов:
1- Если вы выберете «путь заполнения» и оставите размер вывода таким же, как и размер ввода, он называется такой же сверткой. При использовании метода заполнения, описанного выше, это делается путем отбрасывания внешних значений на увеличенное изображение.
2 - Если вы выберете «игнорировать крайние значения» для выполнения свертки, ваш вывод будет меньше. Это называется действительный свертка. Как следует из названия, вы выполнили операцию свертки только в «действительной» области.
3 - Если вы выберете «путь заполнения» и также сохраните добавленные значения, это называется full сверток. Обратите внимание, что, обрезав вывод полной свертки, вы можете получить такую же и действительную свертку.