关于数字处理部分,您应该避免使用通用的锐化方法,例如不清晰的蒙版,因为这些方法只会增加局部对比度-使细节更加可见,但您不会找回变得不可见的细节。最好使用基于反转因聚焦不完美而造成的模糊的方法,为此,您需要知道点扩散函数(因此,在图像中未聚焦的部分中,将出现一个点成为具有某些亮度曲线的小磁盘,这就是所谓的点扩散功能)。
您可以通过放大图像的高对比度区域来计算点扩散函数。如果您知道存在一条锐利的边缘,亮度在该边缘上会发生一定程度的变化,那么您可以轻松地计算出点扩散函数是什么,它将产生您在图像中看到的轮廓。
通过假设点扩散函数是半径为R的均匀圆盘,可以得到一个近似的近似值。如果你在一些尖锐的边缘放大,然后弯曲将成为放大后的图片非常小的,所以你可以假设你有一条直线,在一侧的亮度是V1上线将是对方V2。图像中与线v(d)的距离为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) +...
因此,通过根据行附近图片的x和y坐标对函数g(d)-1/4进行线性拟合,您将获得以下形式的结果:
g(x,y) = A + b x + c y
然后得出:
1/(pi R) = sqrt[b^2 + c^2]
因此,如果您不太擅长数学运算,则可以通过图片轻松地计算出点扩散函数。
然后,如果您已经计算了点扩散函数,那么使用诸如Wiener反卷积或Richardson-Lucy反卷积之类的算法来反转散焦模糊是小菜一碟。此类算法通常包含在图像处理软件中,但是您应使用适用于图像的实际点扩展功能(而不是某些标准的高斯模糊)来运行它们。例如,此ImageJ插件具有各种反卷积算法,需要您指定点扩散函数。和ImageJ可以在这里获得。
我应该在这里补充一点,这应该在线性色彩空间中完成。因此,您需要先转换为线性RGB或XYZ颜色空间,在该处进行锐化操作,然后再转换回sRGB。