В качестве дополнения, если вы хотите дополнить изображение в режиме репликации, таком как opencv, следующее может сделать это, dst_image - это изображение для заполнения. И pad_h_up, pad_h_down, pad_w_left, pad_w_right - это четыре аргумента:
def pad_replica(image_pad, up,down, left, right):
paddings_up = tf.constant([[1, 0],[0,0],[0,0]])
paddings_down = tf.constant([[0, 1],[0,0],[0,0]])
paddings_left = tf.constant([[0, 0],[1,0],[0,0]])
paddings_right = tf.constant([[0, 0],[0, 1],[0 ,0]])
i = tf.constant(0)
c = lambda i,pad_len,pad_mode, image: tf.less(i, pad_len)
def body(i,pad_len,pad_mode,image):
i = i+1
image = tf.pad(image, pad_mode,"SYMMETRIC")
return [i, pad_len,pad_mode, image]
[_, _, _, image_pad_up] = tf.while_loop(c, body, \
[i, up, paddings_up, image_pad])
i = tf.constant(0)
[_, _, _, image_pad_down] = tf.while_loop(c, body, [i, down,paddings_down, image_pad_up])
i = tf.constant(0)
[_, _, _, image_pad_left] = tf.while_loop(c, body, [i, left, paddings_left, image_pad_down])
i = tf.constant(0)
[_, _, _, image_pad_right] = tf.while_loop(c, body, [i, right,paddings_right, image_pad_left])
i = tf.constant(0)
return image_pad_right
dst_image.set_shape([None, None, None])
dst_image = pad_replica(dst_image,\
tf.cast(pad_h_up, tf.int32),\
tf.cast(pad_h_down,tf.int32),\
tf.cast(pad_w_left, tf.int32),\
tf.cast(pad_w_right,tf.int32)
)