4
0
mirror of https://github.com/nerfstudio-project/nerfstudio.git synced 2026-11-11 02:24:38 +08:00
nerfstudio/mattport/utils/visualization.py
2022-05-09 11:16:04 -07:00

65 lines
1.9 KiB
Python

""" Helper functions for visualizing outputs """
from typing import Optional
import torch
from matplotlib import cm
from torchtyping import TensorType
def apply_colormap(image: TensorType[..., 1], cmap="viridis") -> TensorType[..., 3]:
"""Convert single channel to a color image.
Args:
image (TensorType[..., 1]): Single channel image.
cmap (str, optional): Colormap for image. Defaults to 'turbo'.
Returns:
TensorType[..., 3]: Colored image
"""
colormap = cm.get_cmap(cmap)
colormap = torch.tensor(colormap.colors).to(image.device)
image2 = (image * 255).long()
if torch.min(image2) < 0 or torch.max(image2) > 255:
print("hi")
image = (image * 255).long()
return colormap[image[..., 0]]
def apply_depth_colormap(
depth: TensorType[..., 1],
accumulation: Optional[TensorType[..., 1]] = None,
near_plane: Optional[float] = None,
far_plane: Optional[float] = None,
cmap="turbo",
) -> TensorType[..., 3]:
"""Converts a depth image to color for easier analysis.
Args:
depth (TensorType[..., 1]): Depth image.
accumulation (TensorType[..., 1], optional): Ray accumulation used for masking vis. Defaults to None.
near_plane (float, optional): Closest depth to consider. If None, use min image value. Defaults to None.
far_plane (float, optional): Furthest depth to consider. If None, use max image value. Defaults to None.
cmap (str, optional): Colormap to apply. Defaults to "turbo".
Returns:
TensorType[..., 3]: Colored depth image
"""
near_plane = near_plane or torch.min(depth)
far_plane = far_plane or torch.max(depth)
depth = (depth - near_plane) / (far_plane - near_plane + 1e-10)
depth = torch.clip(depth, 0, 1)
colored_image = apply_colormap(depth, cmap=cmap)
if accumulation is not None:
colored_image = colored_image * accumulation + (1 - accumulation)
return colored_image