Что касается цифровой обработки, вам следует избегать использования универсальных методов повышения резкости, таких как маска нерезкости, так как эти методы будут только увеличивать локальный контраст - делая детали более заметными, но вы не получите обратно детали, которые стали невидимыми. Лучше использовать методы, основанные на реверсировании размытия из-за несовершенной фокусировки, и для этого вам нужно знать функцию разброса точек (поэтому в той части изображения, которая не находится в фокусе, появится одна точка быть маленьким диском с некоторым профилем яркости, это так называемая функция разброса точек).
Вы можете рассчитать функцию разброса точек, увеличив масштаб изображения в областях с высокой контрастностью. Если вы знаете, что есть резкий край, поперек которого яркость изменяется на некоторое значение, вы можете легко рассчитать, какова функция разброса точек, которая даст профиль, который вы видите на изображении.
Грубое приближение получается, если предположить , что функция рассеяния точки является однородным диском радиуса R . Если вы увеличите изображение до некоторого острого края, то кривизна на увеличенном изображении станет очень маленькой, поэтому вы можете предположить, что у вас есть прямая линия, с одной стороны яркость равна v1, а с другой стороны линии она будет равна v2 . Яркость на расстоянии d от линии v (d) на изображении будет плавной функцией из-за нерезкости, которая стремится к v1 с одной стороны и v2 с другой стороны. Вблизи d = 0 функция g (d) = [v (d) - v1] / [2 (v2 - v1)] ведет себя следующим образом:
g(d) = 1/4 - d/(pi R) + d^3/(6 pi R^3) +...
Итак, выполнив линейное приближение функции g (d) - 1/4 по координатам x и y изображения рядом с линией, вы получите результат в виде:
g(x,y) = A + b x + c y
а затем следует, что:
1/(pi R) = sqrt[b^2 + c^2]
Таким образом, функция разброса точек может быть вычислена с некоторыми усилиями из рисунка, если вы не слишком плохи в математике.
Затем, если вы вычислили функцию разброса точек, то инвертирование размытия расфокусировки - это очень просто, используя такие алгоритмы, как деконволюция Винера или деконволюция Ричардсона-Люси . Такие алгоритмы обычно включены в программное обеспечение для обработки изображений, но вы должны запускать их, используя функцию фактического разброса точек, которая применяется к вашему изображению, а не стандартное размытие по Гауссу. Например, этот плагин ImageJ имеет различные алгоритмы деконволюции, которые требуют от вас указать функцию разброса точек. И ImageJ можно получить здесь .
Я должен добавить здесь, что это должно быть сделано в линейном цветовом пространстве. Итак, вам нужно сначала преобразовать в линейное цветовое пространство RGB или в цветовое пространство XYZ, выполнить операцию повышения резкости, а затем преобразовать обратно в sRGB.