Java software classes and implementation for image transformation. The classes must accept a source image, a greyscale image mask, a "target" image, and two lists of control points. The first list of control points describes locations in the source image, the second list of control points describes corresponding locations in the target image. The software must determine the correct transformation so that the source image is stretched, distorted, rotated, and so on however necessary as determined by the control points, and then is "applied" using the mask [we assume that the mask must be transformed same as the source image] to the target image to produce a new output image containing (a) the original target image, with (b) the transformed source image applied.
To better discuss the intention of the software: think of a graphic design which could be the source image and maybe a canvas sail which is contained in the target image. We want the graphic design to be applied to the stretched canvas sail (which may be tilted on a boat) in the most realistic way possible using the control points. We do not have a 3-D model of the sail so we must use the control points to describe the transformation as best as possible. The mask is greyscale and determines portions of the source image that actually become applied to the target image; levels of black/white/grey determine the "transparency level" (The rest of the target image is unchanged.)
Probably this software will perform one or more Affine Transformations plus some code that figures the best transformations to apply by using the lists of control points.
Images can be in any size, but in practice mostly we are concerned with images from 300x300 pixels to 7,000x7,000 pixels dimensions -- and not always square, most of the time rectangular dimensions.
There must be some helper classes that can open source, target, and mask images from locations on a disk. The images must have a choice of at least two storage formats (JPG and PNG) and for PNG there must be 8 and 16 bit color support. There must be a helper class to read two lists of control points from two files on disk; the control points will be stored differently when this software is finally used. There must be a small Java test application that displays the source, target, mask, and output images. A small helper should be supplied to store the output image on disk. The helper classes should be organized as separate from the main code (so the helpers can be easily replaced with something else, and no change to main code). It should be easy to open different image formats from disk just by changing helper function. Demonstration project should include all necessary parts to build and run as latest version Eclipse project (Eclipse Luna).
The code must anticipate being used in a Tomcat container. The code must use ONLY libraries that are (1) freely available, (2) NO FEE TO BUY, (3) NO ROYALTY TO USE in any country, (4) OK FOR COMMERCIAL USE, (5) DOES NOT VIOLATE copyrights, intellectual property rights, or patents. The code must be your own. The code must be produced on equipment that is your own. Nobody else must have any ownership in the code that you develop. You give all rights in the software to me as the buyer.
The code must be efficient (fast and limit amount of resources used) and MUST BE very clear and very readable to a mid-skill developer working in English language. The code must be well commented in English.
Fun project for someone!!!