summaryrefslogtreecommitdiff
path: root/flowFileLoader.lua
blob: f185c3cb75cf47278884186ba189619ac42550c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
require 'torch'
require 'image'

--[[
  Reads a flow field from a binary flow file.
  
   bytes   contents
    0-3     tag: "PIEH" in ASCII, which in little endian happens to be the float 202021.25
            (just a sanity check that floats are represented correctly)
    4-7     width as an integer
    8-11    height as an integer
    12-end  data (width*height*2*4 bytes total)
--]]
local function flowFileLoader_load(fileName, scale)
  local flowFile = torch.DiskFile(fileName, 'r')
  flowFile:binary()
  flowFile:readFloat()
  local W = flowFile:readInt()
  local H = flowFile:readInt()
  -- image.warp needs 2xHxW, and also expects (y, x) for some reason...
  local flow = torch.Tensor(2, H, W)
  for y=1, H do
    for x=1, W do
      flow[2][y][x] = flowFile:readFloat() * scale
      flow[1][y][x] = flowFile:readFloat() * scale
    end
  end
  flowFile:close()
  return flow
end

return {
  load = flowFileLoader_load
}