【发布时间】:2015-10-12 05:35:24
【问题描述】:
在以下示例中,A、B 数组的互相关是使用 cv2.matchTemplate 方法计算的。结果存储在 C 数组中:
import cv2
import numpy as np
A=np.ones((3,3), dtype=np.uint8)
B=np.array([[1,2,3],[4,5,6],[7,8,9]], dtype=np.uint8)
C=cv2.matchTemplate( A, B, cv2.TM_CCORR )
>>> A
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1]], dtype=uint8)
>>> B
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]], dtype=uint8)
>>> C
array([[ 45.]], dtype=float32)
让我们使用 scipy 实现相同的示例:
import cv2
import numpy as np
import scipy
import scipy.signal
A = np.ones((3,3), dtype=np.uint8)
B = np.array([[1,2,3],[4,5,6],[7,8,9]], dtype=np.uint8)
C = scipy.signal.correlate2d(A,B)
>>> C
array([[ 9, 17, 24, 15, 7],
[15, 28, 39, 24, 11],
[18, 33, 45, 27, 12],
[ 9, 16, 21, 12, 5],
[ 3, 5, 6, 3, 1]], dtype=uint8)
现在让我们使用 Octave 实现相同的示例:
octave:4> A=ones(3,3)
A =
1 1 1
1 1 1
1 1 1
octave:5> B=[1 2 3; 4 5 6; 7 8 9]
B =
1 2 3
4 5 6
7 8 9
octave:6> C=xco
xcorr xcorr2 xcov
octave:6> C=xcorr2(A,B)
C =
9 17 24 15 7
15 28 39 24 11
18 33 45 27 12
9 16 21 12 5
3 5 6 3 1
通过比较结果我们可以看到opencv的方法产生了明显不同的结果。
有人能解释一下 2D 互相关的各种实现之间的区别吗?
为了正确计算二维互相关,我应该对我的 opencv 代码进行哪些更改?
谢谢大家,
放克
【问题讨论】:
标签: python matlab opencv scipy octave