Что касается цифровой обработки, вам следует избегать использования универсальных методов повышения резкости, таких как маска нерезкости, так как эти методы будут только увеличивать локальный контраст - делая детали более заметными, но вы не вернете детали, которые стали невидимыми. Лучше использовать методы, основанные на реверсировании размытия из-за несовершенной фокусировки, и для этого вам нужно знать функцию разброса точек (поэтому в той части изображения, которая не находится в фокусе, появится одна точка быть маленьким диском с некоторым профилем яркости, это так называемая функция разброса точек).
Вы можете рассчитать функцию разброса точек путем увеличения областей изображения с высокой контрастностью. Если вы знаете, что есть резкий край, поперек которого яркость изменяется на некоторое количество, вы можете легко рассчитать, какова функция разброса точек, которая привела бы к профилю, который вы видите на изображении.
Грубое приближение получается, если предположить, что функция рассеяния точки представляет собой равномерный диск радиуса 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.