龙空技术网

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

中科院计算所培训中心 186

前言:

现时同学们对“图像处理的实例”都比较注重,姐妹们都需要知道一些“图像处理的实例”的相关知识。那么小编同时在网摘上汇集了一些对于“图像处理的实例””的相关知识,希望朋友们能喜欢,兄弟们一起来了解一下吧!

当给定大量不同质量的训练数据时,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

目前,该函数只能接收一个具有确定形状的张量。因此,输入图像需要事先在数据流图中运行。

标签: #图像处理的实例