In general, sharpness increases the contrast between pixels. Naive implementations often introduce "ghosting" along the edges, which may be perceptually unattractive. Methods such as a two-way filter try to solve this problem. In recent years, there have been several interesting methods, a good summary of concepts before modern algorithms is covered by Andrew Adams at: http://www.stanford.edu/class/cs448f/lectures/2.1/Sharpening.pdf
Look closer to the end for some approaches:
Two-sided and three-sided filter
Preserving decomposition edges for multi-line tonal and detailed manipulation
Blind deconvolution (convolution without a known kernel)
Of course, if you have several images or some information about the image that you are dealing with (for example, other clear images of the object), you can do much better using various training methods based on image priors.
A good general framework for working with images and attempts at some sharpening methods is OpenCV, for which there is a python binding for.
source share