def transform(self, X=None, y=None):
        """
        Transform an image using an Affine transform with
        rotation parameters randomly generated from the user-specified
        range.  Return the transform if X=None.

        Arguments
        ---------
        X : ANTsImage
            Image to transform

        y : ANTsImage (optional)
            Another image to transform

        Returns
        -------
        ANTsImage if y is None, else a tuple of ANTsImage types

        Examples
        --------
        >>> import ants
        >>> img = ants.image_read(ants.get_data('ch2'))
        >>> tx = ants.contrib.RandomRotate3D(rotation_range=(-10,10))
        >>> img2 = tx.transform(img)
        """
        # random draw in rotation range
        rotation_x = random.gauss(self.rotation_range[0], self.rotation_range[1])
        rotation_y = random.gauss(self.rotation_range[0], self.rotation_range[1])
        rotation_z = random.gauss(self.rotation_range[0], self.rotation_range[1])
        self.params = (rotation_x, rotation_y, rotation_z)

        tx = Rotate3D((rotation_x, rotation_y, rotation_z),
                    reference=self.reference,
                    lazy=self.lazy)

        return tx.transform(X,y)
Transform an image using an Affine transform with
        rotation parameters randomly generated from the user-specified
        range.  Return the transform if X=None.

        Arguments
        ---------
        X : ANTsImage
            Image to transform

        y : ANTsImage (optional)
            Another image to transform

        Returns
        -------
        ANTsImage if y is None, else a tuple of ANTsImage types

        Examples
        --------
        >>> import ants
        >>> img = ants.image_read(ants.get_data('ch2'))
        >>> tx = ants.contrib.RandomRotate3D(rotation_range=(-10,10))
        >>> img2 = tx.transform(img)