Mathematica can handle arbitrary transformations:
rm=RotationMatrix[15Degree]
ImageForwardTransformation[image,rm.Normalize[#]Norm[#]^1.1&,DataRange->{{-1,1},{-1,1}}]
where image is the source image. Here it is rotated 15 degrees and there is a pincushion kinda correction applied. The exponent will have to be modified and so forth…