2015-12-15 60 views
0

我在火炬張量中有一個100x100像素的圖像,我想實現「縮小」轉換。我如何使用Torch Image工具箱(或其他)實現此目的?在火炬上焊一個張量

我已經通過簡單地使用image.crop和image.resize來實現「放大」。在Matlab中,我會計算圖像的平均灰度,用該顏色填充n像素的數組(保持原始圖像居中),然後調整大小爲100x100像素。那裏有火炬的「墊張量」功能嗎?

謝謝!

回答

1

火炬有沒有「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 
    

    UPDATE

    如在implementation填充可以看出,通過獲得

  1. 分配預期的輸出張量填充填充顏色的填充大小後填充
  2. 感謝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] 

對於特定零填充有像其他方便的可能性:

+0

謝謝隊友,我會試試看。否則,我懷疑我可以製作一個新的填充大小的張量,複製數據,然後調整大小。 –

+0

這是一個很好的幫助,再次感謝 –