使用TensorFlow对图像中的点进行插值采样

使用TensorFlow对图像中的点进行插值采样,第1张

使用TensorFlow对图像中的点进行插值采样

没有内置的op可以执行这种插值,但是您应该能够使用现有TensorFlow op的组合来做到这一点。对于双线性情况,我建议采用以下策略:

  1. 根据

    C
    索引张量计算与四个角点相对应的整数张量。例如(名称假设原点在左上方):

    top_left = tf.cast(tf.floor(C), tf.int32)

    top_right = tf.cast(
    tf.concat(1, [tf.floor(C[:, 0:1]), tf.ceil(C[:, 1:2])]), tf.int32)

    bottom_left = tf.cast(
    tf.concat(1, [tf.ceil(C[:, 0:1]), tf.floor(C[:, 1:2])]), tf.int32)

    bottom_right = tf.cast(tf.ceil(C), tf.int32)

  2. 从代表特定拐角点的每个张量中,从

    I
    这些点处提取值的向量。例如,对于以下功能,在二维情况下执行此 *** 作:

    def get_values_at_coordinates(input, coordinates):

    input_as_vector = tf.reshape(input, [-1])
    coordinates_as_indices = (coordinates[:, 0] * tf.shape(input)[1]) + coordinates[:, 1]
    return tf.gather(input_as_vector, coordinates_as_indices)

    values_at_top_left = get_values_at_coordinates(I, top_left)
    values_at_top_right = get_values_at_coordinates(I, top_right)
    values_at_bottom_left = get_values_at_coordinates(I, bottom_left)
    values_at_bottom_right = get_values_at_coordinates(I, bottom_right)

  3. 首先在水平方向上计算插值:

    # Varies between 0.0 and 1.0.

    horizontal_offset = C[:, 0] - tf.cast(top_left[:, 0], tf.float32)

    horizontal_interpolated_top = (
    ((1.0 - horizontal_offset) * values_at_top_left)
    + (horizontal_offset * values_at_top_right))

    horizontal_interpolated_bottom = (
    ((1.0 - horizontal_offset) * values_at_bottom_left)
    + (horizontal_offset * values_at_bottom_right))

  4. 现在计算垂直方向的插值:

    vertical_offset = C[:, 1] - tf.cast(top_left[:, 1], tf.float32)

    interpolated_result = (
    ((1.0 - vertical_offset) * horizontal_interpolated_top)
    + (vertical_offset * horizontal_interpolated_bottom))



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5462357.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存