您的位置:首页 > 其它

如何用TensorFlow图像处理函数裁剪图像?

2017-09-08 09:48 260 查看
当给定大量不同质量的训练数据时,CNN往往能够很好地工作。
–图像能够通过可视化的方式,传达复杂场景所蕴含的某种目标主题。
–在Stanford Dogs数据集中,重要的是图像能够以可视化的方式,突出图片中狗的重要性。
–一幅狗位于画面中心的图像,会被认为比狗作为背景的图像更有价值。
并非所有数据集都拥有最有价值的图像。下面所示的两幅图像,按照假设,该数据集本应突出不同的狗的品种




左图突出的是一条典型的墨西哥无毛犬的重要属性,而右图是两个参加聚会的人,在逗一条墨西哥无毛犬。右图中充斥了大量的无关信息,这可能会导致所训练的CNN模型,对参加聚会的人的面部信息,更为关注。类似这样的图像中可能会包含狗,可对其进行操作,使狗而非人,成为真正被突出的对象。下面总结那些对训练CNN有用的图像处理方法。

裁剪会将图像中的某些区域移除,将其中的信息完全丢弃。裁剪与tf.slice类似,后者是将一个张量中的一部分,从完整的张量中移除。当沿某个维度存在多余的输入时,为CNN对输入图像进行裁剪便是十分有用的。

例如,为减少输入的尺寸,可对狗位于图像中心的图片进行裁剪。
sess.run(tf.image.central_crop(image, 0.1))
执行上面的代码后,可得到输出:
array([[[ 3, 108, 233]]], dtype=uint8)

这段示例代码利用了tf.image.central_crop,将图像中10%的区域抠出,并将其返回。
–该方法总是会基于所使用的图像的中心返回结果。
–裁剪通常在预处理阶段使用,但在训练阶段,若背景也有用时,它也可派上用场。
–当背景有用时,可随机化裁剪区域起始位置,到图像中心的偏移量来实现裁剪。

这个裁剪方法仅可接收实值输入
real_image= sess.run(image)
bounding_crop= tf.image.crop_to_bounding_box(
real_image, offset_height=0, offset_width=0, target_height=2, target_width=1)
sess.run(bounding_crop)
执行上述代码,可得到输出:
array([[[ 0, 0, 0]],[[ 0, 191, 0]]], dtype=uint8)
为从位于(0,0)的图像的左上角像素开始,对图像裁剪,示例代码使用了tf.image.crop_to_bounding_box
目前,该函数只能接收一个具有确定形状的张量。因此,输入图像需要事先在数据流图中运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  TensorFlow