# Copyright (c) OpenMMLab. All rights reserved. from typing import TYPE_CHECKING, Tuple if TYPE_CHECKING: from matplotlib.figure import Figure def get_adaptive_scale(img_shape: Tuple[int, int], min_scale: float = 0.3, max_scale: float = 3.0) -> float: """Get adaptive scale according to image shape. The target scale depends on the the short edge length of the image. If the short edge length equals 224, the output is 1.0. And output linear scales according the short edge length. You can also specify the minimum scale and the maximum scale to limit the linear scale. Args: img_shape (Tuple[int, int]): The shape of the canvas image. min_size (int): The minimum scale. Defaults to 0.3. max_size (int): The maximum scale. Defaults to 3.0. Returns: int: The adaptive scale. """ short_edge_length = min(img_shape) scale = short_edge_length / 224. return min(max(scale, min_scale), max_scale) def create_figure(*args, margin=False, **kwargs) -> 'Figure': """Create a independent figure. Different from the :func:`plt.figure`, the figure from this function won't be managed by matplotlib. And it has :obj:`matplotlib.backends.backend_agg.FigureCanvasAgg`, and therefore, you can use the ``canvas`` attribute to get access the drawn image. Args: *args: All positional arguments of :class:`matplotlib.figure.Figure`. margin: Whether to reserve the white edges of the figure. Defaults to False. **kwargs: All keyword arguments of :class:`matplotlib.figure.Figure`. Return: matplotlib.figure.Figure: The created figure. """ from matplotlib.backends.backend_agg import FigureCanvasAgg from matplotlib.figure import Figure figure = Figure(*args, **kwargs) FigureCanvasAgg(figure) if not margin: # remove white edges by set subplot margin figure.subplots_adjust(left=0, right=1, bottom=0, top=1) return figure