We start with the source image
The image is filtered to enhance the contrast between features
Contours are found which we use to detect blobs, it is assumed the puzzle is the largest object in the image. A polygon is fit to the blob, if more than 4 corners exist determine most likely coroners are computed.
The puzzle is extracted and blob detection is performed once again to identify the cells.
Once the characters are recognised, the orientation of the puzzle can then be determined, the puzzle is solved and the result overlaied