[問題] convolve2d問題

看板Python作者 (老衲)時間5年前 (2020/04/26 21:45), 5年前編輯推噓3(307)
留言10則, 4人參與, 5年前最新討論串1/1
最近在學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] 不知道是我哪裡理解錯誤了 麻煩各位高手指點一下了 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.251.58.134 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1587908729.A.C35.html ※ 編輯: there801021 (111.251.58.134 臺灣), 04/26/2020 21:46:08

04/26 22:19, 5年前 , 1F
從結果來看,是用反向序列做運算。
04/26 22:19, 1F

04/26 22:32, 5年前 , 2F
留意convolution的定義和計算時的方向性
04/26 22:32, 2F

04/26 22:33, 5年前 , 3F
第一組Gx kernel應該排列成 1,0,-1
04/26 22:33, 3F

04/26 22:33, 5年前 , 4F
第二組Gy kernel應該排列成 -2, 0, 1
04/26 22:33, 4F

04/26 22:42, 5年前 , 5F
可以用紙筆追蹤一次二維捲積的例子就知道了
04/26 22:42, 5F

04/26 22:43, 5年前 , 6F
04/26 22:43, 6F

04/26 22:43, 5年前 , 7F
定義可參考信號與系統或工程數學的課本
04/26 22:43, 7F

04/26 23:04, 5年前 , 8F
捲積的輸入訊號(Gx,Gy)要鏡射後,再滑入系統(data)做計算
04/26 23:04, 8F

04/26 23:05, 5年前 , 9F
04/26 23:05, 9F

05/11 09:41, 5年前 , 10F
感謝各位大大,已經理解了~
05/11 09:41, 10F
文章代碼(AID): #1UfP1vmr (Python)
文章代碼(AID): #1UfP1vmr (Python)