18

结果与tf.image.resize_bilinear完全不同cv2.resize

我觉得这有点麻烦。设置align_corners=True并不总是合理的,因为四个角并不总是应该固定在角落里。那么有没有办法让它更“对称”呢?

重现代码:

import tensorflow as tf
import numpy as np
import cv2
np.set_printoptions(precision=3)
resize_shape = (10, 10)

a = np.ones((1, 2, 2, 1), dtype=np.float32)
a[0, 0, 0, 0] = 5.0
a[0, 1, 1, 0] = 5.0

b = tf.constant(a, dtype=tf.float32)
c = tf.image.resize_bilinear(b, resize_shape)

with tf.Session() as sess:
    np_c = sess.run(c)
    print np_c[0, :, :, 0]

print cv2.resize(a[0], resize_shape, interpolation=cv2.INTER_LINEAR)

获得的结果:

# tf.image.resize_bilinear
[[ 5.    4.2   3.4   2.6   1.8   1.    1.    1.    1.    1.  ]
 [ 4.2   3.72  3.24  2.76  2.28  1.8   1.8   1.8   1.8   1.8 ]
 [ 3.4   3.24  3.08  2.92  2.76  2.6   2.6   2.6   2.6   2.6 ]
 [ 2.6   2.76  2.92  3.08  3.24  3.4   3.4   3.4   3.4   3.4 ]
 [ 1.8   2.28  2.76  3.24  3.72  4.2   4.2   4.2   4.2   4.2 ]
 [ 1.    1.8   2.6   3.4   4.2   5.    5.    5.    5.    5.  ]
 [ 1.    1.8   2.6   3.4   4.2   5.    5.    5.    5.    5.  ]
 [ 1.    1.8   2.6   3.4   4.2   5.    5.    5.    5.    5.  ]
 [ 1.    1.8   2.6   3.4   4.2   5.    5.    5.    5.    5.  ]
 [ 1.    1.8   2.6   3.4   4.2   5.    5.    5.    5.    5.  ]]
# cv2.resize
[[ 5.    5.    5.    4.2   3.4   2.6   1.8   1.    1.    1.  ]
 [ 5.    5.    5.    4.2   3.4   2.6   1.8   1.    1.    1.  ]
 [ 5.    5.    5.    4.2   3.4   2.6   1.8   1.    1.    1.  ]
 [ 4.2   4.2   4.2   3.72  3.24  2.76  2.28  1.8   1.8   1.8 ]
 [ 3.4   3.4   3.4   3.24  3.08  2.92  2.76  2.6   2.6   2.6 ]
 [ 2.6   2.6   2.6   2.76  2.92  3.08  3.24  3.4   3.4   3.4 ]
 [ 1.8   1.8   1.8   2.28  2.76  3.24  3.72  4.2   4.2   4.2 ]
 [ 1.    1.    1.    1.8   2.6   3.4   4.2   5.    5.    5.  ]
 [ 1.    1.    1.    1.8   2.6   3.4   4.2   5.    5.    5.  ]
 [ 1.    1.    1.    1.8   2.6   3.4   4.2   5.    5.    5.  ]]

已编辑

设置时align_corners=True,图像的 4 个角和调整大小的图像对齐,但只有 4 个像素

考虑调整图像大小,图像中的 4 个角应该呈现调整后图像的 4 个角中的区域(就像这样cv2.resize做),而不是最角落的 4 个点。

# tf.image.resize_bilinear(b, resize_shape, align_corners=True)
[[ 5.    4.56  4.11  3.67  3.22  2.78  2.33  1.89  1.44  1.  ]
 [ 4.56  4.21  3.86  3.52  3.17  2.83  2.48  2.14  1.79  1.44]
 [ 4.11  3.86  3.62  3.37  3.12  2.88  2.63  2.38  2.14  1.89]
 [ 3.67  3.52  3.37  3.22  3.07  2.93  2.78  2.63  2.48  2.33]
 [ 3.22  3.17  3.12  3.07  3.02  2.98  2.93  2.88  2.83  2.78]
 [ 2.78  2.83  2.88  2.93  2.98  3.02  3.07  3.12  3.17  3.22]
 [ 2.33  2.48  2.63  2.78  2.93  3.07  3.22  3.37  3.52  3.67]
 [ 1.89  2.14  2.38  2.63  2.88  3.12  3.37  3.62  3.86  4.11]
 [ 1.44  1.79  2.14  2.48  2.83  3.17  3.52  3.86  4.21  4.56]
 [ 1.    1.44  1.89  2.33  2.78  3.22  3.67  4.11  4.56  5.  ]]
4

2 回答 2

11

这是一个已知问题,请参阅 https://github.com/tensorflow/tensorflow/issues/6720

于 2018-05-30T18:41:16.200 回答
1

这已在 TF v2.0 https://github.com/tensorflow/tensorflow/commit/3ae2c6691b7c6e0986d97b150c9283e5cc52c15f中修复

于 2019-04-23T02:05:20.350 回答