【转载】 tf.image.sample_distorted_bounding_box (为图像生成单个随机变形的边界框)
原文地址: https://blog.csdn.net/tz_zs/article/details/77920116
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tz_zs/article/details/77920116
————————————————————————————————
tf.image.sample_distorted_bounding_box
此函数为图像生成单个随机变形的边界框。函数输出的是可用于裁剪原始图像的单个边框。返回值为3个张量:begin,size和 bboxes。
前2个张量用于 tf.slice 剪裁图像。
后者(第三个)可以用于 tf.image.draw_bounding_boxes 函数来画出边界框。
sample_distorted_bounding_box(
image_size,
bounding_boxes,
seed=None,
seed2=None,
min_object_covered=None,
aspect_ratio_range=None,
area_range=None,
max_attempts=None,
use_image_if_no_bounding_boxes=None,
name=None
)
定义在:tensorflow/python/ops/image_ops_impl.py.
请参阅指南:图像操作>图像使用边框
为图像生成一个随机扭曲的边界框.
在图像识别或对象定位任务中,除了ground-truth标签外,通常还会提供边界框注释. 训练这种系统的一种常用技术是随机地扭曲图像,同时保留其内容,即数据增强.
这个运算输出中的对象的随机扭曲的定位,即边界框,给定一个image_size, bounding_boxes 和一系列的限制.
该操作的输出是一个可用于裁剪原始图像的单个边界框.输出返回为3个张量:begin, size 和 bboxes. 前两个张可直接送入 tf.slice 以裁剪图像.可以提供后者 tf.image.draw_bounding_boxes 以可视化边界框的外观.
边界框 被提供并作为[y_min, x_min, y_max, x_max]返回. 边界框坐标在 [0.0, 1.0] 相对于底层图像的宽度和高度的浮点数.
例如:
# Generate a single distorted bounding box.
begin, size, bbox_for_draw = tf.image.sample_distorted_bounding_box(
tf.shape(image),
bounding_boxes=bounding_boxes,
min_object_covered=0.1) # Draw the bounding box in an image summary.
image_with_box = tf.image.draw_bounding_boxes(tf.expand_dims(image, 0),
bbox_for_draw)
tf.summary.image('images_with_box', image_with_box) # Employ the bounding box to distort the image.
distorted_image = tf.slice(image, begin, size)
请注意,如果没有边界框信息可用,则设置use_image_if_no_bounding_boxes=true将假定存在覆盖整个图像的单个隐式边界框.
如果use_image_if_no_bounding_boxes为false并且没有提供边界框,则会引发错误.
参数:
- image_size:一个Tensor,必须是下列类型之一:uint8,int8,int16,int32,int64,是1维的,并且包含 [height, width, channels] .
- bounding_boxes:一个float32类型的Tensor,三维的,形状为[batch, N, 4], 描述与图像相关的Ñ个边界框.
- seed:可选的int,默认为0;如果seed或者seed2其中之一被设置为非零,则随机数发生器由给定的seed播种;否则,它会被随机种子播种.
- seed2:可选的int,默认为0;用于避免种子碰撞的第二个种子.
- min_object_covered:一个float32类型的张量,默认为0.1, 图像的裁剪区域必须至少包含提供的任何边界框的这一部分;该参数的值应该是非负的;在0的情况下,裁剪区域不需要与任何提供的边界框重叠.
- aspect_ratio_range:一个可选的floats列表,默认为[0.75, 1.33], 图像的裁剪区域必须在此范围内具有 宽高比=宽度/高度 (ratio = width / height).
- area_range:一个可选的floats列表,默认为[0.05, 1], 图像的裁剪区域必须在此范围内包含所提供图像的一部分.
- max_attempts:可选的int,默认为100,生成指定约束图像的裁剪区域的 尝试次数;max_attempts失败后,返回整个图像.
- use_image_if_no_bounding_boxes:可选的bool,默认为False.如果未提供边界框,则控制行为.如果为true,则假定覆盖整个输入的隐式边界框.如果为false,则提出错误.
- name:操作的名称(可选).
返回:
Tensor对象的元型态组 (begin, size, bboxes) .
- begin:一个Tensor,与image_size具有相同类型;1维,包含[offset_height, offset_width, 0],提供给tf.slice的输入.
- size:一个Tensor,与image_size具有相同类型;1维,包含[target_height, target_width, -1],提供给tf.slice的输入.
- bboxes:一个float32类型的Tensor,三维的, 形状为[1, 1, 4], 表示随机变形后的边界框, 提供给 tf.image.draw_bounding_boxes 的输入.
-------------------------------------------------------------------------------------
例子:
图片: ( cat.jpg )

import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np image_raw_data = tf.gfile.FastGFile("./cat.jpg",'rb').read() with tf.Session() as sess:
img_data = tf.image.decode_jpeg(image_raw_data) # 输出解码之后的三维矩阵。
#print(img_data.eval())
#print(img_data.get_shape())
img_data.set_shape([1797, 2673, 3])
print(img_data.get_shape()) with tf.Session() as sess:
boxes = tf.constant([[[0.05, 0.05, 0.9, 0.7], [0.35, 0.47, 0.5, 0.56]]]) # sample_distorted_bounding_box要求输入图片必须是实数类型。
image_float = tf.image.convert_image_dtype(img_data, tf.float32) begin, size, bbox_for_draw = tf.image.sample_distorted_bounding_box(
tf.shape(image_float), bounding_boxes=boxes, min_object_covered=0.4) # 截取后的图片
distorted_image = tf.slice(image_float, begin, size) # 在原图上用标注框画出截取的范围。由于原图的分辨率较大(1797x2673),生成的标注框
# 在Jupyter Notebook上通常因边框过细而无法分辨,这里为了演示方便先缩小分辨率。
image_small = tf.image.resize_images(image_float, [180, 267], method=0) batchced_img = tf.expand_dims(image_small, 0) image_with_box = tf.image.draw_bounding_boxes(batchced_img, bbox_for_draw)
#执行会话,一次性获得标注框内图像和带有标注框的原图像
distorted_image_, image_with_box_=sess.run([distorted_image, image_with_box]) plt.imshow(distorted_image_)
plt.show() plt.imshow(image_with_box_[0])
plt.show()
distorted_image: 标注框所裁剪出的图像

image_with_box: 带有标注框的原图像:

官方翻译地址:
https://www.w3cschool.cn/tensorflow_python/tensorflow_python-vmxq2rpm.html
【转载】 tf.image.sample_distorted_bounding_box (为图像生成单个随机变形的边界框)的更多相关文章
- (原)caffe中通过图像生成lmdb格式的数据
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5909121.html 参考网址: http://www.cnblogs.com/wangxiaocvp ...
- php基础之gd图像生成、缩放、logo水印和简单验证码实现
gd库是php最常用的图片处理库之一(另外一个是imagemagick),可以生成图片.验证码.水印.缩略图等等.要使用gd库首先需要开启gd库扩展,windows系统下需要在php.ini中将ext ...
- Why数学图像生成工具
该软件能够以给定的数学公式及算法生成各种绚烂的数学图像.软件中有两种生成图像的方法: (1)通过一种我自定义的脚本语言生成: 软件中定义一套简单易学的脚本语言,用于描述数学表达式.使用时需要先要将数学 ...
- 支持单色条码图像生成的条形码控件Barcode Professional
Barcode Professional for .NET Windows Forms条形码控件是一款灵活和强大的.NET组件(.NET DLL 类库),它让您轻松地添加条码生成和打印功能到您的.NE ...
- 文档生成工具doxygen+图像生成工具GraphViz
文档生成工具doxygen+图像生成工具GraphViz 虽然jdk自带的javadoc也很好用,不过使用doxygen+GraphViz 的组合可以生成许多强大的图(类图.协作图.文件包含/被包含图 ...
- 【PHP】使用GD库实现 图像生成、缩放、logo水印和简单验证码
gd库是php最常用的图片处理库之一(另外一个是imagemagick),可以生成图片.验证码.水印.缩略图等等.要使用gd库首先需要开启gd库扩展, windows系统下需要在php.ini中将ex ...
- OpenGL ES学习笔记(二)——平滑着色、自适应宽高及三维图像生成
首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <Android学习笔记--O ...
- php基础 gd图像生成、缩放、logo水印和验证码
gd库是php最常用的图片处理库之一(另外一个是imagemagick),可以生成图片.验证码.水印.缩略图等等. 图像生成 <?php /* 用windows画图板画图 1.新建空白画布(指定 ...
- 第九讲_图像生成 Image Captioning
第九讲_图像生成 Image Captioning 生成式对抗网络 Generative Adversarial network 学习数据分布:概率密度函数估计+数据样本生成 生成式模型是共生关系,判 ...
- < python PIL - 批量图像处理 - RGB图像生成灰度图像 >
< python PIL - 批量图像处理 - RGB图像生成灰度图像 > 直接用python自带的PIL图像库,将一个文件夹下所有jpg/png的RGB图像转换成灰度/黑白图像 from ...
随机推荐
- kettle从入门到精通 第三十九课 kettle 增量同步(日级)
1.上一课我们学习了在数据量大的情况下的分页全量同步示例,本次我们一起学习下kettle 增量全量同步.有些业务场景不需要实时数据,比如统计t-1日的销售业绩情况等. 2.kettle增量全量同步 ...
- JavaScript 中判断 {}是空对象
Javascript 中判断空对象 简介:在 JavaScript 判断字符串是否是一个空字符串 可以 !"" 返回 true 来判断, 要是判断 {} 是否是空对象,也用 !{} ...
- idea导入maven项目发现有jar或插件无法下载检查idea中的maven配置,maven配置文件中需配置阿里云的镜像地址
D:\apache-maven-3.2.3\conf\settings.xml <mirrors> <mirror> <id>nexus-public-snapsh ...
- Linux高级命令
重定向 重定向也称为输出重定向,用于将命令的输出保存到目标文件. 使用方法:> 文件名 或 >> 文件名.前者会覆盖文件内容,后者会追加内容到文件. 查看文件内容命令 cat: 显示 ...
- FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流
RTMP Streamer是一个安卓手机端的开源RTMP直播推流框架,可用于RTMP直播和RTSP直播,其升级版还支持SRT直播(腾讯视频云就采用SRT协议).RTMP Streamer支持的视频编 ...
- 配置pod拉取harbor容器镜像仓库私有镜像:secret保存账号密码
目录 一.系统环境 二.前言 三.Docker-Registry类型的Secret简介 四.镜像仓库简介 五.搭建Harbor容器镜像仓库 5.1 安装Harbor 5.2 创建项目 5.3 推送镜像 ...
- CLR via C# 笔记 -- 托管堆和垃圾回收(21)
1. 访问一个资源所需的步骤 1). 调用IL指令newobj,为代表资源的类型分配内存(一般使用C# new 操作符来完成). 2). 初始化内存,设置资源的初始状态并使资源可用.类型的实例构造器负 ...
- 降维(二)PCA
PCA 主成成分分析(Principal Component Analysis,PCA)在目前是非常热门的降维算法.首先它找到一个最接近数据的超平面,然后将数据投影到这个平面上. 保持方差(Prese ...
- 在Linux驱动中使用LED子系统
在Linux驱动中使用LED子系统 原文:https://blog.csdn.net/hanp_linux/article/details/79037684 前提配置device driver下面的L ...
- Java 将Markdown文件转换为Word和PDF文档
Markdown 凭借其简洁易用的特性,成为创建和编辑纯文本文档的常用选择.但某些时候我们需要更加精致的展示效果,例如在专业分享文档或打印成离线使用的纸质版时,就需要将Markdown文件以其他固定的 ...