Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
ameerazam08
commited on
Commit
•
f836904
1
Parent(s):
ea486b4
Create utils.py
Browse files
utils.py
ADDED
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# MIT License
|
2 |
+
|
3 |
+
# Copyright (c) 2022 Intelligent Systems Lab Org
|
4 |
+
|
5 |
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6 |
+
# of this software and associated documentation files (the "Software"), to deal
|
7 |
+
# in the Software without restriction, including without limitation the rights
|
8 |
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9 |
+
# copies of the Software, and to permit persons to whom the Software is
|
10 |
+
# furnished to do so, subject to the following conditions:
|
11 |
+
|
12 |
+
# The above copyright notice and this permission notice shall be included in all
|
13 |
+
# copies or substantial portions of the Software.
|
14 |
+
|
15 |
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16 |
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17 |
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18 |
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19 |
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20 |
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21 |
+
# SOFTWARE.
|
22 |
+
|
23 |
+
# File author: Shariq Farooq Bhat
|
24 |
+
|
25 |
+
import matplotlib
|
26 |
+
import matplotlib.cm
|
27 |
+
import numpy as np
|
28 |
+
import torch
|
29 |
+
|
30 |
+
def colorize(value, vmin=None, vmax=None, cmap='magma_r', invalid_val=-99, invalid_mask=None, background_color=(128, 128, 128, 255), gamma_corrected=False, value_transform=None):
|
31 |
+
"""Converts a depth map to a color image.
|
32 |
+
|
33 |
+
Args:
|
34 |
+
value (torch.Tensor, numpy.ndarry): Input depth map. Shape: (H, W) or (1, H, W) or (1, 1, H, W). All singular dimensions are squeezed
|
35 |
+
vmin (float, optional): vmin-valued entries are mapped to start color of cmap. If None, value.min() is used. Defaults to None.
|
36 |
+
vmax (float, optional): vmax-valued entries are mapped to end color of cmap. If None, value.max() is used. Defaults to None.
|
37 |
+
cmap (str, optional): matplotlib colormap to use. Defaults to 'magma_r'.
|
38 |
+
invalid_val (int, optional): Specifies value of invalid pixels that should be colored as 'background_color'. Defaults to -99.
|
39 |
+
invalid_mask (numpy.ndarray, optional): Boolean mask for invalid regions. Defaults to None.
|
40 |
+
background_color (tuple[int], optional): 4-tuple RGB color to give to invalid pixels. Defaults to (128, 128, 128, 255).
|
41 |
+
gamma_corrected (bool, optional): Apply gamma correction to colored image. Defaults to False.
|
42 |
+
value_transform (Callable, optional): Apply transform function to valid pixels before coloring. Defaults to None.
|
43 |
+
|
44 |
+
Returns:
|
45 |
+
numpy.ndarray, dtype - uint8: Colored depth map. Shape: (H, W, 4)
|
46 |
+
"""
|
47 |
+
if isinstance(value, torch.Tensor):
|
48 |
+
value = value.detach().cpu().numpy()
|
49 |
+
|
50 |
+
value = value.squeeze()
|
51 |
+
if invalid_mask is None:
|
52 |
+
invalid_mask = value == invalid_val
|
53 |
+
mask = np.logical_not(invalid_mask)
|
54 |
+
|
55 |
+
# normalize
|
56 |
+
vmin = np.percentile(value[mask],2) if vmin is None else vmin
|
57 |
+
vmax = np.percentile(value[mask],85) if vmax is None else vmax
|
58 |
+
if vmin != vmax:
|
59 |
+
value = (value - vmin) / (vmax - vmin) # vmin..vmax
|
60 |
+
else:
|
61 |
+
# Avoid 0-division
|
62 |
+
value = value * 0.
|
63 |
+
|
64 |
+
# squeeze last dim if it exists
|
65 |
+
# grey out the invalid values
|
66 |
+
|
67 |
+
value[invalid_mask] = np.nan
|
68 |
+
cmapper = matplotlib.cm.get_cmap(cmap)
|
69 |
+
if value_transform:
|
70 |
+
value = value_transform(value)
|
71 |
+
# value = value / value.max()
|
72 |
+
value = cmapper(value, bytes=True) # (nxmx4)
|
73 |
+
|
74 |
+
# img = value[:, :, :]
|
75 |
+
img = value[...]
|
76 |
+
img[invalid_mask] = background_color
|
77 |
+
|
78 |
+
# return img.transpose((2, 0, 1))
|
79 |
+
if gamma_corrected:
|
80 |
+
# gamma correction
|
81 |
+
img = img / 255
|
82 |
+
img = np.power(img, 2.2)
|
83 |
+
img = img * 255
|
84 |
+
img = img.astype(np.uint8)
|
85 |
+
return img
|