1 引言
(1)作用
提取图片中的一小块区域,也可以用于分割图片为多个子图片。类似卷积核提取特征,但不一样
(2)用法
tf.image.extract_patches(
images,
sizes,
strides,
rates,
padding,
name=None
)
参数:
- images:图像矩阵,形状必须是[batch, in_rows, in_cols, depth]
- sizes:patche大小,形状必须是:[1, size_rows, size_cols, 1]
- strides:patche移动步长,形状必须是[1, stride_rows, stride_cols, 1]
- rates:有些复杂,形状必须是[1, rate_rows, rate_cols, 1],表示隔几个像素点,取一个像素点,直到满足 sizes 。
- padding:“VALID”或者“SAME”:
- “VALID”:表示所取的patch区域必须完全包含在原始图像中.
- "SAME"表示可以取超出原始图像的部分,这一部分进行0填充。
- 返回值:返回4维tensor,数据类型与输入的 images 类型相同
2 图解
2.1 Demo1
# 生成一张10*10 的图片矩阵,数值范围是1-100
arr=tf.reshape(tf.range(1,101),[10,10])
print(arr.numpy())
print("-"*50)
arr=tf.reshape(arr,[1,10,10,1])
# 提取指定区域
res=tf.image.extract_patches(
images=arr,
sizes=[1, 3, 3, 1],
strides=[1, 5, 5, 1],
rates=[1, 1, 1, 1],
padding='VALID')
print(res.numpy())
解析
- sizes=[1, 3, 3, 1]:patche大小是3x3,表示要提取的区域是3_3 的矩阵,在图中对应红色3_3的方框
- strides=[1, 5, 5, 1]:patche移动步长5x5。先是水平移动5个,水平移动到终点后,在垂直移动5个。在图中对应左方框水平移动了5步。垂直向下移动了5步
- rates=[1, 1, 1, 1]:表示在红色方框中提取的步长是1 ,说白了就是每个元素都要提取。该参数决定了红色方框的大小。
2.2 Demo2
# 生成10*10的图片矩阵,数值范围是1-100
arr=tf.reshape(tf.range(1,101),[10,10])
print(arr.numpy())
print("-"*50)
arr=tf.reshape(arr,[1,10,10,1])
# 提取指定区域
res=tf.image.extract_patches(
images=arr,
sizes=[1, 3, 3, 1],
strides=[1, 5, 5, 1],
rates=[1, 2, 2, 1],
padding='VALID')
print(res.numpy())
解析
- sizes=[1, 3, 3, 1]:patch大小是3x3,表示要提取的区域是3*3 的矩阵
- strides=[1, 5, 5, 1]:patche移动步长5x5。先是水平移动5个,水平移动到终点后,在垂直移动5个
- rates=[1, 2, 2, 1]:表示patche中的每个元素间隔1个提取1个,也就是说sizes变成5。