用火炬填充张量

时间:2015-12-15 22:24:21

标签: image image-processing lua transform torch

我在Torch Tensor中有一个100x100像素的图像,我想实现一个"缩小"转型。如何使用Torch Image工具箱(或其他)实现此目的?

我已经实施了"放大"只需使用image.crop后跟image.resize即可。

在Matlab中,我会计算图像的平均灰度,用该颜色填充数组n个像素(保持原始图像居中),然后调整大小为100x100像素。在那里有一个"垫Tensor"火炬的功能?

谢谢!

1 个答案:

答案 0 :(得分:2)

  

Torch是否有“pad Tensor”功能?

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

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

<强>更新

implementation填充中可以看出,通过以下方式获得:

  1. 分配填充了填充颜色的填充预期大小的输出张量,
  2. 使用原始值填充输入张量对应的区域,这要归功于narrow
  3. 玩具示例:

    require 'torch'
    
    local input  = torch.zeros(2, 5)
    local dim    = 2 -- target dimension for padding
    local pad    = 3 -- amount of padding
    local pix    = 1 -- pixel value (color)
    
    -- (1) compute the expected size post-padding, allocate a large enough tensor
    --     and fill with expected color
    local size   = input:size()
    size[dim]    = size[dim] + pad
    local output = input.new():resize(size):fill(pix)
    
    -- (2) fill the original area with original values
    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]
    

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