空间变换器网络的论文声称它可以用于裁剪图像。
给出裁剪区域(top_left,bottom_right)=(x1,y1,x2,y2),如何将该区域解释为变换矩阵并在pytorch中裁剪图像?
这里是关于火炬(http://torch.ch/blog/2015/09/07/spatial_transformers.html)中的空间变换器网络的介绍,在该介绍中,它可视化了变换器所看的边界框,在给定变换矩阵的情况下,如何确定边界框? / p>
[编辑]
我刚刚找到了第一个问题的答案[给了作物区域,找出了一个转换矩阵]
答案 0 :(得分:0)
原帖中的图片已经提供了很好的答案,但提供一些代码可能会有用。
重要的是,此方法应正确保留梯度。在我的例子中,我有一批 y,x 值代表裁剪位置的中心(在 [-1,1] 范围内)。至于值 a
和 b
,它们是转换的缩放 x 和 y 值,在我的情况下,我将 0.5
与较小的输出大小(宽度的一半)结合使用和高度)以保留原始比例,即裁剪。您可以使用 1
不更改比例,但不会进行裁剪。
import torch.nn.functional as F
def crop_to_affine_matrix(t):
'Turns (N,2) translate values into (N,2,3) affine transformation matrix'
t = t.reshape(-1,1,2,1).flip(2) # flip x,y order to y,x
t = F.pad(t, (2,0,0,0)).squeeze(1)
t[:,0,0] = a
t[:,1,1] = b
return t
t = torch.zeros(5,2) # center crop positions for batch size 5
F.affine_grid(crop_to_affine_matrix(t), outsize)