如何将图像分配给图像块

时间:2018-08-22 15:34:20

标签: python python-3.x tensorflow

我正在尝试将切入策略用作数据增强方法。对于这种策略,选择图像的随机矩形区域并由随机噪声代替。但是,我不知道如何将随机图像(形状为HxWxD)“分配”到较大图像的矩形区域。我需要的MATLAB代码如下:

 <script
      src="https://code.jquery.com/jquery-3.3.1.min.js"
      integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
      crossorigin="anonymous"></script>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>

    <body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>

    <a id="linkPopover" class="btn btn-light" data-toggle="popover">POPOVER</a>
<a id="linkPopover2" class="btn btn-light" data-toggle="popover">POPOVER2</a>

    <br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/>
    <br/><br/><br/><br/><br/><br/><br/>
    End of body
    </body>

以下是我为获得同等结果所做的努力。这是我获得随机图像的方式:

large_image(patch_start_y:patch_end_y, patch_start_x:patch_end_x, :) = random_noise_image

这就是我试图将其分配给形状为(1,?,?,3)的现有图像的方法

random_patch = tf.random_uniform([cut_out_height, cut_out_width, tf.constant(3)], minval=tf.constant(0),
                                 maxval=tf.constant(256), dtype=tf.int32)

random_patch = tf.expand_dims(random_patch, 0)

但是,出现以下错误:

return tf.assign(image[0, cut_out_start_y:(cut_out_start_y+cut_out_height),
          cut_out_start_x:(cut_out_start_x+cut_out_width), :], random_patch, validate_shape=False)

有什么想法吗?

更新:我得出的结论是问题在于图像和补丁为tf.Tensor。对于tf.Variable类型,tf.assign可以正常工作。有关问题,请参见下面的MWE:

ValueError: Shapes must be equal rank, but are 1 and 0
    From merging shape 2 with other shapes. for 'strided_slice/stack_2' (op: 'Pack') with input shapes: [], [1], [1], [].

它给出:

import tensorflow as tf
image = [[1,2,3,4],[5,6,7,8], [9, 10, 11,12], [13,14,15,16]]
patch = [[9, 8],[7,6]]
image_tensor = tf.convert_to_tensor(image)
patch_tensor = tf.convert_to_tensor(patch)
modified_image = tf.assign(image_tensor[1:3, 1:3], patch_tensor)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(modified_image))

是否有解决方法来实现我想要的?

0 个答案:

没有答案