(self, data: torch.Tensor, transform)
| 1014 | return self.inverse_transform(data, transform) |
| 1015 | |
| 1016 | def inverse_transform(self, data: torch.Tensor, transform) -> torch.Tensor: |
| 1017 | fwd_rot_mat = transform[TraceKeys.EXTRA_INFO]["rot_mat"] |
| 1018 | mode = transform[TraceKeys.EXTRA_INFO]["mode"] |
| 1019 | padding_mode = transform[TraceKeys.EXTRA_INFO]["padding_mode"] |
| 1020 | align_corners = transform[TraceKeys.EXTRA_INFO]["align_corners"] |
| 1021 | dtype = transform[TraceKeys.EXTRA_INFO]["dtype"] |
| 1022 | inv_rot_mat = linalg_inv(convert_to_numpy(fwd_rot_mat)) |
| 1023 | |
| 1024 | _, _m, _p, _ = resolves_modes(mode, padding_mode) |
| 1025 | xform = AffineTransform( |
| 1026 | normalized=False, |
| 1027 | mode=_m, |
| 1028 | padding_mode=_p, |
| 1029 | align_corners=False if align_corners == TraceKeys.NONE else align_corners, |
| 1030 | reverse_indexing=True, |
| 1031 | ) |
| 1032 | img_t: torch.Tensor = convert_data_type(data, MetaTensor, dtype=dtype)[0] |
| 1033 | transform_t, *_ = convert_to_dst_type(inv_rot_mat, img_t) |
| 1034 | sp_size = transform[TraceKeys.ORIG_SIZE] |
| 1035 | out: torch.Tensor = xform(img_t.unsqueeze(0), transform_t, spatial_size=sp_size).float().squeeze(0) |
| 1036 | out = convert_to_dst_type(out, dst=data, dtype=out.dtype)[0] |
| 1037 | if isinstance(out, MetaTensor): |
| 1038 | affine = convert_to_tensor(out.peek_pending_affine(), track_meta=False) |
| 1039 | mat = to_affine_nd(len(affine) - 1, transform_t) |
| 1040 | out.affine @= convert_to_dst_type(mat, affine)[0] |
| 1041 | return out |
| 1042 | |
| 1043 | |
| 1044 | class Zoom(InvertibleTransform, LazyTransform): |
no test coverage detected