function perspective(before, after) {
    var a = getSquareToQuad.apply(null, after);
    var b = getSquareToQuad.apply(null, before);
    var c = multiply(getInverse(a), b);
    return this.matrixWarp(c);
}
@filter       Perspective
@description  Warps one quadrangle to another with a perspective transform. This can be used to
              make a 2D image look 3D or to recover a 2D image captured in a 3D environment.
@param before The x and y coordinates of four points before the transform in a flat list. This
              would look like [ax, ay, bx, by, cx, cy, dx, dy] for four points (ax, ay), (bx, by),
              (cx, cy), and (dx, dy).
@param after  The x and y coordinates of four points after the transform in a flat list, just
              like the other argument.