Tensorflow和OpenCV中的双线性插值实现

时间:2018-02-05 18:04:44

标签: numpy opencv tensorflow interpolation

我试图了解bilinear interpolationtensorflow中实施的OpenCV。我的理解让我相信插值点的网格在两个库中的位置不同。这可以通过在样品基质上获得的不同结果来证明:

import tensorflow as tf, numpy as np, cv2
a = np.arange(9, dtype=np.float32).reshape(3, 3)
cv2.resize(a, (2, 2))

输出

array([[1. , 2.5],
       [5.5, 7. ]], dtype=float32)

,而

tf.InteractiveSession()
tf.image.resize_images(a[None, :, :, None], (2, 2)).eval()[0, :, :, 0]

输出

array([[0. , 1.5],
       [4.5, 6. ]], dtype=float32)

这种诊断是否正确?如果是这样,在张量流和OpenCV中放置插值点的方案是什么?

1 个答案:

答案 0 :(得分:1)

通常(在OpenCV,Matlab,scipy等中),假设像素覆盖单位区域,并且对齐的是左上角和右下角像素的角。采样间隔更改为old_size / new_size

在Tensorflow中,有两个全新的方案,两者都不符合上述方案。

对于align_corners=True,角点像素 center 与中间(old_size - 1) / (new_size - 1)的新采样间隔对齐。 对于align_corners=False,只有左上角的像素中心对齐,其余的以间隔old_size / new_size进行采样。