MCPcopy Index your code
hub / github.com/Project-MONAI/MONAI / inverse

Method inverse

monai/transforms/spatial/array.py:2360–2383  ·  view source on GitHub ↗
(self, data: torch.Tensor)

Source from the content-addressed store, hash-verified

2358 return mat
2359
2360 def inverse(self, data: torch.Tensor) -> torch.Tensor:
2361 transform = self.pop_transform(data)
2362 orig_size = transform[TraceKeys.ORIG_SIZE]
2363 # Create inverse transform
2364 fwd_affine = transform[TraceKeys.EXTRA_INFO]["affine"]
2365 mode = transform[TraceKeys.EXTRA_INFO]["mode"]
2366 padding_mode = transform[TraceKeys.EXTRA_INFO]["padding_mode"]
2367 align_corners = transform[TraceKeys.EXTRA_INFO]["align_corners"]
2368 inv_affine = linalg_inv(convert_to_numpy(fwd_affine))
2369 inv_affine = convert_to_dst_type(inv_affine, data, dtype=inv_affine.dtype)[0]
2370
2371 affine_grid = AffineGrid(affine=inv_affine, align_corners=align_corners)
2372 grid, _ = affine_grid(orig_size)
2373 # Apply inverse transform
2374 out = self.resampler(data, grid, mode, padding_mode, align_corners=align_corners)
2375 if not isinstance(out, MetaTensor):
2376 out = MetaTensor(out)
2377 out.meta = data.meta # type: ignore
2378 affine = convert_data_type(out.peek_pending_affine(), torch.Tensor)[0]
2379 xform, *_ = convert_to_dst_type(
2380 Affine.compute_w_affine(len(affine) - 1, inv_affine, data.shape[1:], orig_size), affine
2381 )
2382 out.affine @= xform
2383 return out
2384
2385
2386class RandAffine(RandomizableTransform, InvertibleTransform, LazyTransform):

Callers

nothing calls this directly

Calls 9

peek_pending_affineMethod · 0.95
linalg_invFunction · 0.90
convert_to_numpyFunction · 0.90
convert_to_dst_typeFunction · 0.90
MetaTensorClass · 0.90
convert_data_typeFunction · 0.90
AffineGridClass · 0.85
pop_transformMethod · 0.80
compute_w_affineMethod · 0.80

Tested by

no test coverage detected