Я заметил, что большинство библиотек реализовали только функцию обратной варп. и направления сетки, поскольку мои изображения были деформированы, аналогичны целевому изображению. Ниже приведены некоторые части моей реализации с учетом 3D -поля потока opt_flow
Код: Выделить всё
# normalize the flow field
# 3, W, H, D
opt_flow[0] /= (W-1)
opt_flow[1] /= (H-1)
opt_flow[2] /= (D-1)
# create the grid
# note that torch.meshgrid returns the directions as z, y, x
grid = torch.stack(torch.meshgrid([torch.linspace(-1, 1, i) for i in opt_flow.shape[1:]], indexing='ij'), 3).to(self.device)
# flip grid so that the directions are x, y, z
grid = torch.flip(grid, [3])
# D, H, W, 3
opt_flow = opt_flow.permute(1, 2, 3, 0)
# add the flow field to the grid to represent the new coordinates
# I have subtracted because initially I have thought that this would account for inverse optical field
grid -= opt_flow
# add batch dimension
grid = grid[None, ...]
applied = F.grid_sample(self._to_Tensor(img)[None, None, ...], grid, mode='bilinear', padding_mode='zeros', align_corners=True).squeeze(dim=(0, 1))
Упрощение до 2D -изображения, предположим, что мой FF имеет вектор смещения (3, 4) в индексе сетки (5, 6). Затем в перспективе GRID_SAMMER мы хотим, чтобы сетка IF хранила (-3, -4) в индексе GRID (8, 10). Просто отрицание приведет к тому, что (-3, -4) хранится в (5, 6), что принесет неправильное значение пикселя во время GRID_SAMPLE. Но кажется нелогичным применением BF к «предварительному» изображению. Но в то же время, поскольку grid_sample является «обратной» деформацией, также представляется интуитивно применять «обратное» оптическое поле для прежнего. j+y_displacement]. Но это будет неинтегрируемой функции. < /P>
Так что мои вопросы: < /p>
Есть ли простой способ применения FF, используя обратную варп, такую как Grid_sample? (Можно ли применить BF к PREV?)>
Подробнее здесь: https://stackoverflow.com/questions/795 ... tical-flow