def project(self, from_shape, to_shape):
coords_proj = project_coords([(self.x1, self.y1), (self.x2, self.y2)],<EOL>from_shape, to_shape)<EOL>return self.copy(<EOL>x1=coords_proj[<NUM_LIT:0>][<NUM_LIT:0>],<EOL>y1=coords_proj[<NUM_LIT:0>][<NUM_LIT:1>],<EOL>x2=coords_proj[<NUM_LIT:1>][<NUM_LIT:0>],<EOL>y2=coords_proj[<NUM_LIT:1>][<NUM_LIT:1>],<EOL>label=self.label)<EOL>
Project the bounding box onto a differently shaped image.

E.g. if the bounding box is on its original image at
x1=(10 of 100 pixels) and y1=(20 of 100 pixels) and is projected onto
a new image with size (width=200, height=200), its new position will
be (x1=20, y1=40). (Analogous for x2/y2.)

This is intended for cases where the original image is resized.
It cannot be used for more complex changes (e.g. padding, cropping).

Parameters
----------
from_shape : tuple of int or ndarray
    Shape of the original image. (Before resize.)

to_shape : tuple of int or ndarray
    Shape of the new image. (After resize.)

Returns
-------
out : imgaug.BoundingBox
    BoundingBox object with new coordinates.