我在Torch Tensor中有一个100x100像素的图像,我想实现一个"缩小"转型。如何使用Torch Image工具箱(或其他)实现此目的?
我已经实施了"放大"只需使用image.crop后跟image.resize即可。
在Matlab中,我会计算图像的平均灰度,用该颜色填充数组n个像素(保持原始图像居中),然后调整大小为100x100像素。在那里有一个"垫Tensor"火炬的功能?
谢谢!
答案 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填充中可以看出,通过以下方式获得:
narrow
。玩具示例:
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]
对于特定的零填充,还有其他方便的可能性,如:
nn.SpatialZeroPadding
,padzero
和padmirror
。