在Torch中为张量填充,即扩展其大小并在其中添加值,可以使用torch.pad()函数。

我有一个大小为100x100像素的Torch Tensor图像,我想要实现“缩小”变换。我如何使用Torch Image 工具包(或其他工具包)实现?

我已经通过简单地使用image.cropimage.resize来实现过“放大”操作。在Matlab中,我会计算出图像的平均灰度值,用该颜色填充n个像素的数组(保持原始图像中心不变),然后调整大小为100x100像素。在Torch中有“填充Tensor”的函数吗?

谢谢!

点赞
用户1688185
用户1688185

是否有Torch的“填充Tensor”函数?

一种可能性是使用torch/nn中的nn.Padding模块,例如:

require 'image'
require 'nn'

local x = image.lena()

local pad  = 64
local pix  = 0
local ndim = x:dim()

local s = nn.Sequential()
  :add(nn.Padding(ndim-1,  pad, ndim, pix))
  :add(nn.Padding(ndim-1, -pad, ndim, pix))
  :add(nn.Padding(ndim,    pad, ndim, pix))
  :add(nn.Padding(ndim,   -pad, ndim, pix))

local y = s:forward(x)

image.display(y) -- this requires qlua

更新

可以看到在实现中,填充是通过如下方法获得的:

  1. 分配与填充后期望大小相同的输出Tensor,并填充具有填充颜色的Tensor,
  2. 使用narrow将输入Tensor的相应区域填充为原始值。

Toy实例

require 'torch'

local input  = torch.zeros(2, 5)
local dim    = 2 -- 目标维度进行填充
local pad    = 3 -- 填充的数量
local pix    = 1 --像素值(颜色)

--(1)计算填充后的预期大小,分配足够大的Tensor并填充期望的颜色
local size   = input:size()
size[dim]    = size[dim] + pad
local output = input.new():resize(size):fill(pix)

-- (2) 填充原始区域的原始值
local area   = output:narrow(dim, 1, input:size(dim)):copy(input)

这将输出:

0  0  0  0  0  1  1  1
0  0  0  0  0  1  1  1
[torch.DoubleTensor of size 2x8]

对于特定的零填充,还有其他方便的方法,如:

2015-12-16 09:17:50