Image sharpening methods

I am doing a project where I will use genetic algorithms to optimize the set of filters and parameters that will be used to sharpen the image. I am currently reading Gonzalez's Digital Image Processing book and studying all I can on image processing, as I am a little new to this area.

I was looking for a list of sharpening methods ... that is, unsharp masks, a high-pass filter, Laplacian sharpening, etc. If you are familiar with image processing, are there any filters that you would recommend for sharpening images (containing options for "settings")?

Thanks!

+6
source share
2 answers

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.

+4
source

Idea for a simple, very fast and usually efficient algorithm (I donโ€™t know if anyone else has already thought about this):

  • N will represent an increase in sharpness. A value of 0 would leave the image unchanged, a value of 1 would probably double the sharpness, and a value of -1 would make the image very fuzzy and strange.
  • Now, for each color of each pixel in the image, do it
    • Call the current value of V , the current color of C , the current column of X , and the current row of Y.
    • Set X to the largest difference between adjacent pixels, for example:
        M = biggestAbsoluteValueBetween (
       X - (the C th color of the Y th row of the ( X - 1) th column),
       X - (the C th color of the Y th row of the ( X + 1) th column),
       X - (the C th color of the ( Y - 1) th row of the X th column),
       X - (the C th color of the ( Y + 1) th row of the X th column)
       ) 
    • Finally, add this difference M, and then N, to the current color value of the current pixel in the new sharper image, for example:
        V new = V old + M * N 

Adding

I hope I managed to exchange information so that someone from any programming language could understand. If you have a suggestion or a way to improve the readability of this answer, then go straight ahead.

+1
source

Source: https://habr.com/ru/post/896564/


All Articles