TensorFlow中的图像变形

7
TensorFlow1.8增加了对图像进行形变的工具(例如请参考sparse_image_warpdense_image_warp)。这很好,但我找不到任何可以用于创建形变的工具。
例如,我可以根据以下内容随机旋转一张图片:
radians = tf.random_uniform([], -1.0, 1.0)
img = tf.contrib.image.rotate(img, radians)

如果要扭曲一张图片,代码应该怎么写?

flow = ...  # your code here
img = tf.contrib.image.dense_image_warp(img, flow)

我知道流量可以通过多种方式生成,只要不会破坏图片(例如,我正在寻找一个微分同胚或至少是一个拓扑同胚),我对选择哪一种方式并不挑剔。


我认为我在Keras数据增强队列代码中看到了一些相关的代码,但我可能错了。 - jeandut
image.apply_affine_transform? - jeandut
apply_affine_transform,顾名思义,是用于应用变形的函数,而不是生成变形的函数。虽然仿射变换是一种微分同胚,但它们可能过于简单了些。 - Jonas Adler
好的,我误解了你所说的“生成”的意思。 - jeandut
使用np.meshgrid的组合 + 添加一个随机生成的向量,重新调整大小以适应meshgrid? - jeandut
显示剩余2条评论
1个回答

3

看起来你可能想查看关于弹性变换的这个kaggle页面, 它实现了这篇文章

这与我的meshgrid+noise基线非常相似,尽管它似乎更加仔细地完成了,所展示的例子表明,你可以大幅扰动图像而不会得到完全的垃圾,希望能够帮到你。

编辑: 你可以看一下这个新库, 它实现了不同的图像变换,包括网格扭曲,这可能提供了一种用于图像变形的弹性变换的替代方法。


这段代码没有使用问题中的tensorflow层。 - mrgloom
使用 tf.py_func 或者使用相应的函数重新实现都很简单。 - jeandut
1
据我理解,问题是如何使用tf.contrib.image.dense_image_warp - mrgloom
你只需使用我的答案在numpy中计算偏移量,然后使用tf.convert_to_tensor()将其转换为张量,便可得到用于dense_image_wrap()函数的flow参数。 - jeandut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接