| |
|
|
| |
|
|
| |
| |
| |
| |
| |
| |
|
|
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
|
|
| |
|
|
| import matplotlib |
| import matplotlib.cm |
| import numpy as np |
| import torch |
|
|
| 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): |
| """Converts a depth map to a color image. |
| |
| Args: |
| 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 |
| vmin (float, optional): vmin-valued entries are mapped to start color of cmap. If None, value.min() is used. Defaults to None. |
| vmax (float, optional): vmax-valued entries are mapped to end color of cmap. If None, value.max() is used. Defaults to None. |
| cmap (str, optional): matplotlib colormap to use. Defaults to 'magma_r'. |
| invalid_val (int, optional): Specifies value of invalid pixels that should be colored as 'background_color'. Defaults to -99. |
| invalid_mask (numpy.ndarray, optional): Boolean mask for invalid regions. Defaults to None. |
| background_color (tuple[int], optional): 4-tuple RGB color to give to invalid pixels. Defaults to (128, 128, 128, 255). |
| gamma_corrected (bool, optional): Apply gamma correction to colored image. Defaults to False. |
| value_transform (Callable, optional): Apply transform function to valid pixels before coloring. Defaults to None. |
| |
| Returns: |
| numpy.ndarray, dtype - uint8: Colored depth map. Shape: (H, W, 4) |
| """ |
| if isinstance(value, torch.Tensor): |
| value = value.detach().cpu().numpy() |
|
|
| value = value.squeeze() |
| if invalid_mask is None: |
| invalid_mask = value == invalid_val |
| mask = np.logical_not(invalid_mask) |
|
|
| |
| vmin = np.percentile(value[mask],2) if vmin is None else vmin |
| vmax = np.percentile(value[mask],85) if vmax is None else vmax |
| if vmin != vmax: |
| value = (value - vmin) / (vmax - vmin) |
| else: |
| |
| value = value * 0. |
|
|
| |
| |
|
|
| value[invalid_mask] = np.nan |
| cmapper = matplotlib.cm.get_cmap(cmap) |
| if value_transform: |
| value = value_transform(value) |
| |
| value = cmapper(value, bytes=True) |
|
|
| |
| img = value[...] |
| img[invalid_mask] = background_color |
|
|
| |
| if gamma_corrected: |
| |
| img = img / 255 |
| img = np.power(img, 2.2) |
| img = img * 255 |
| img = img.astype(np.uint8) |
| return img |
|
|
|
|