我是图像处理的新手,如果您觉得问题太简单,请原谅我。
我试图ndimage.convolve()
用cv2.filter2D()
卷积函数替换。
这是原始代码
ndimage.convolve(Gxx,f,origin=0)
这是替换功能
cv2.filter2D(Gxx,-1,cv2.flip(f,-1),borderType=cv2.BORDER_REFLECT,anchor=(-1,-1))
两个代码都返回不同的值,我尝试使用参数 atndimage.convolve
并将原点设置为 -1 然后它返回确切的结果,cv2.filter2D
但这不是我想要的,因为我希望 ndimage.convolve 使用默认原点这是零。
在我再次研究 opencv 文档后,filter2D
我意识到
过滤函数实际上计算相关性。如果你有一个对称的卷积核,那么相关性和卷积的数学表达式是相同的。
如果内核不对称,则必须翻转内核并将锚点设置为(kernel.cols - anchor.x - 1,kernel.rows - anchor.y - 1)。这将计算实际的卷积。
所以我cv2.flip(f,-1)
双向翻转内核,但我不知道翻转内核后如何计算新的锚点,根据文档,我需要将锚点设置为(kernel.cols - anchor.x - 1, kernel.rows - anchor.y - 1)
. 我猜kernel.col
s 和kernel.rows
是两个方向的内核大小,但这里的含义anchor.x
和anchor.y
含义是什么?它是内核的原始锚点吗?假设内核是 42 X 42,那么新的锚点是什么?提前致谢。