ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
Image.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
9 
11 namespace cloudViewer {
12 namespace t {
13 namespace geometry {
14 namespace kernel {
15 namespace image {
16 
17 void To(const core::Tensor &src,
18  core::Tensor &dst,
19  double scale,
20  double offset) {
21  core::Device device = src.GetDevice();
22  if (device.IsCPU()) {
23  ToCPU(src, dst, scale, offset);
24  } else if (device.IsCUDA()) {
25  CUDA_CALL(ToCUDA, src, dst, scale, offset);
26  } else {
27  utility::LogError("Unimplemented device");
28  }
29 }
30 
31 void ClipTransform(const core::Tensor &src,
32  core::Tensor &dst,
33  float scale,
34  float min_value,
35  float max_value,
36  float clip_fill) {
37  core::Device device = src.GetDevice();
38  if (device.IsCPU()) {
39  ClipTransformCPU(src, dst, scale, min_value, max_value, clip_fill);
40  } else if (device.IsCUDA()) {
41  CUDA_CALL(ClipTransformCUDA, src, dst, scale, min_value, max_value,
42  clip_fill);
43  } else {
44  utility::LogError("Unimplemented device");
45  }
46 }
47 
48 void PyrDownDepth(const core::Tensor &src,
49  core::Tensor &dst,
50  float diff_threshold,
51  float invalid_fill) {
52  core::Device device = src.GetDevice();
53  if (device.IsCPU()) {
54  PyrDownDepthCPU(src, dst, diff_threshold, invalid_fill);
55  } else if (device.IsCUDA()) {
56  CUDA_CALL(PyrDownDepthCUDA, src, dst, diff_threshold, invalid_fill);
57  } else {
58  utility::LogError("Unimplemented device");
59  }
60 }
61 
62 void CreateVertexMap(const core::Tensor &src,
63  core::Tensor &dst,
64  const core::Tensor &intrinsics,
65  float invalid_fill) {
66  core::Device device = src.GetDevice();
67  static const core::Device host("CPU:0");
68 
69  core::Tensor intrinsics_d = intrinsics.To(host, core::Float64).Contiguous();
70  if (device.IsCPU()) {
71  CreateVertexMapCPU(src, dst, intrinsics_d, invalid_fill);
72  } else if (device.IsCUDA()) {
73  CUDA_CALL(CreateVertexMapCUDA, src, dst, intrinsics_d, invalid_fill);
74  } else {
75  utility::LogError("Unimplemented device");
76  }
77 }
78 
79 void CreateNormalMap(const core::Tensor &src,
80  core::Tensor &dst,
81  float invalid_fill) {
82  core::Device device = src.GetDevice();
83  if (device.IsCPU()) {
84  CreateNormalMapCPU(src, dst, invalid_fill);
85  } else if (device.IsCUDA()) {
86  CUDA_CALL(CreateNormalMapCUDA, src, dst, invalid_fill);
87  } else {
88  utility::LogError("Unimplemented device");
89  }
90 }
91 
92 void ColorizeDepth(const core::Tensor &src,
93  core::Tensor &dst,
94  float scale,
95  float min_value,
96  float max_value) {
97  core::Device device = src.GetDevice();
98  if (device.IsCPU()) {
99  ColorizeDepthCPU(src, dst, scale, min_value, max_value);
100  } else if (device.IsCUDA()) {
101  CUDA_CALL(ColorizeDepthCUDA, src, dst, scale, min_value, max_value);
102  } else {
103  utility::LogError("Unimplemented device");
104  }
105 }
106 
107 } // namespace image
108 } // namespace kernel
109 } // namespace geometry
110 } // namespace t
111 } // namespace cloudViewer
Common CUDA utilities.
#define CUDA_CALL(cuda_function,...)
Definition: CUDAUtils.h:49
std::shared_ptr< core::Tensor > image
int offset
bool IsCUDA() const
Returns true iff device type is CUDA.
Definition: Device.h:49
bool IsCPU() const
Returns true iff device type is CPU.
Definition: Device.h:46
Tensor Contiguous() const
Definition: Tensor.cpp:772
Device GetDevice() const override
Definition: Tensor.cpp:1435
Tensor To(Dtype dtype, bool copy=false) const
Definition: Tensor.cpp:739
#define LogError(...)
Definition: Logging.h:60
const Dtype Float64
Definition: Dtype.cpp:43
void CreateVertexMap(const core::Tensor &src, core::Tensor &dst, const core::Tensor &intrinsics, float invalid_fill)
Definition: Image.cpp:62
void ClipTransform(const core::Tensor &src, core::Tensor &dst, float scale, float min_value, float max_value, float clip_fill)
Definition: Image.cpp:31
void ColorizeDepth(const core::Tensor &src, core::Tensor &dst, float scale, float min_value, float max_value)
Definition: Image.cpp:92
void PyrDownDepth(const core::Tensor &src, core::Tensor &dst, float diff_threshold, float invalid_fill)
Definition: Image.cpp:48
void CreateNormalMapCPU(const core::Tensor &src, core::Tensor &dst, float invalid_fill)
Definition: ImageImpl.h:246
void CreateVertexMapCPU(const core::Tensor &src, core::Tensor &dst, const core::Tensor &intrinsics, float invalid_fill)
Definition: ImageImpl.h:199
void PyrDownDepthCPU(const core::Tensor &src, core::Tensor &dst, float diff_threshold, float invalid_fill)
Definition: ImageImpl.h:126
void CreateNormalMap(const core::Tensor &src, core::Tensor &dst, float invalid_fill)
Definition: Image.cpp:79
void To(const core::Tensor &src, core::Tensor &dst, double scale, double offset)
Definition: Image.cpp:17
void ToCPU(const core::Tensor &src, core::Tensor &dst, double scale, double offset)
Definition: ImageImpl.h:33
void ColorizeDepthCPU(const core::Tensor &src, core::Tensor &dst, float scale, float min_value, float max_value)
Definition: ImageImpl.h:311
void ClipTransformCPU(const core::Tensor &src, core::Tensor &dst, float scale, float min_value, float max_value, float clip_fill=0.0f)
Definition: ImageImpl.h:90
Generic file read and write utility for python interface.