[問題] convolve2d問題

作者: there801021 (老衲)   2020-04-26 21:45:24
最近在學convolution
使用numpy 跟 scipy來練習一下
但是遇到一個問題
程式碼如下:
import numpy as np
from scipy import signal as sig
data = np.array([[0, 88, 0],
[105, 255, 55],
[0, 40, 0]])
G_x = sig.convolve2d(data, np.array([[-1], [0], [1]]), mode='valid')
G_y = sig.convolve2d(data, np.array([[1, 0, -2]]), mode='valid')
執行出來的結果是
G_x is [[ 0 48 0]]
G_y is
[[ 0]
[-155]
[ 0]]
但是,我自己預期是
Gx應該是
[0, 88, 0] [-1]
[105, 255, 55] 跟 [0]
[0, 40, 0] [1]
= [-1x0+0x105+1x0, -1x88+0x255+1x40, -1x0+0x55+1x0]
= [0, -48, 0]
而Gy則是
[0, 88, 0]
[105, 255, 55] 跟 [1, 0, -2]
[0, 40, 0]
[ 1x0 + 0x88 + -2x0 ] [0]
= [ 1x105 + 0x255 + -2x55 ] = [-5]
[ 1x0 + 0x40 + -2x0 ] [0]
不知道是我哪裡理解錯誤了
麻煩各位高手指點一下了
感謝
作者: GeoMeTric ( )   2020-04-26 22:19:00
從結果來看,是用反向序列做運算。
作者: cuteSquirrel (松鼠)   2020-04-26 22:32:00
留意convolution的定義和計算時的方向性第一組Gx kernel應該排列成 1,0,-1第二組Gy kernel應該排列成 -2, 0, 1可以用紙筆追蹤一次二維捲積的例子就知道了例子: https://bit.ly/3bJB8WY定義可參考信號與系統或工程數學的課本
作者: drysor   2020-04-26 23:04:00
捲積的輸入訊號(Gx,Gy)要鏡射後,再滑入系統(data)做計算
作者: cuteSquirrel (松鼠)   2020-04-26 23:05:00
作者: there801021 (老衲)   2020-05-11 09:41:00
感謝各位大大,已經理解了~

Links booklink

Contact Us: admin [ a t ] ucptt.com