|
|
|
from abc import ABCMeta, abstractmethod |
|
|
|
from mmcv.utils import Registry |
|
|
|
CAMERAS = Registry('camera') |
|
|
|
|
|
class SingleCameraBase(metaclass=ABCMeta): |
|
"""Base class for single camera model. |
|
|
|
Args: |
|
param (dict): Camera parameters |
|
|
|
Methods: |
|
world_to_camera: Project points from world coordinates to camera |
|
coordinates |
|
camera_to_world: Project points from camera coordinates to world |
|
coordinates |
|
camera_to_pixel: Project points from camera coordinates to pixel |
|
coordinates |
|
world_to_pixel: Project points from world coordinates to pixel |
|
coordinates |
|
""" |
|
|
|
@abstractmethod |
|
def __init__(self, param): |
|
"""Load camera parameters and check validity.""" |
|
|
|
def world_to_camera(self, X): |
|
"""Project points from world coordinates to camera coordinates.""" |
|
raise NotImplementedError |
|
|
|
def camera_to_world(self, X): |
|
"""Project points from camera coordinates to world coordinates.""" |
|
raise NotImplementedError |
|
|
|
def camera_to_pixel(self, X): |
|
"""Project points from camera coordinates to pixel coordinates.""" |
|
raise NotImplementedError |
|
|
|
def world_to_pixel(self, X): |
|
"""Project points from world coordinates to pixel coordinates.""" |
|
_X = self.world_to_camera(X) |
|
return self.camera_to_pixel(_X) |
|
|