为什么OpenCV cv2.resize给出的答案与MATLAB imresize不同



我正在将MATLAB代码转换到python中,并试图使用OpenCV函数cv2.resize缩小图像的大小,但我得到了与MATLAB输出不同的结果。

为了确保我的代码在调整大小之前没有做错任何事情,我在两个函数上都使用了一个小例子,并比较了输出。

我首先在Python和MATLAB中创建了以下数组,并对其进行了上采样:

Python-NumPy和OpenCV

x = cv2.resize(np.array([[1.,2],[3,4]]),(4,4), interpolation=cv2.INTER_LINEAR)
print x
[[ 1.    1.25  1.75  2.  ]
[ 1.5   1.75  2.25  2.5 ]
[ 2.5   2.75  3.25  3.5 ]
[ 3.    3.25  3.75  4.  ]]

MATLAB

x = imresize([1,2;3,4],[4,4],'bilinear')
ans =
1.0000    1.2500    1.7500    2.0000
1.5000    1.7500    2.2500    2.5000
2.5000    2.7500    3.2500    3.5000
3.0000    3.2500    3.7500    4.0000

然后我把答案放回原来的2x2大小。

Python:

cv2.resize(x,(2,2), interpolation=cv2.INTER_LINEAR)
ans = 
[[ 1.375,  2.125],
[ 2.875,  3.625]]

MATLAB:

imresize(x,[2,2],'bilinear')
ans =
1.5625    2.1875
2.8125    3.4375

它们显然不一样,当数字越大,答案就越不一样。

任何解释或资源都将不胜感激。

MATLAB的imresize默认启用了抗锯齿功能:

>> imresize(x,[2,2],'bilinear')
ans =
1.5625    2.1875
2.8125    3.4375
>> imresize(x,[2,2],'bilinear','AntiAliasing',false)
ans =
1.3750    2.1250
2.8750    3.6250

在过去,当我试图仅使用interp2来重现imresize的结果时,这让我感到困惑。