如其他答案所述,衍射导致不清晰。为了对此进行测试,可以尝试使用与F / 29相对应的点扩展函数,通过反卷积来锐化图像。对于衍射,我们有(直到整体归一化)
P(s)= {J 1 [ πrs /(λF)] / [ πrs /(λF)]} 2
其中J 1是第一种阶数的Bessel函数,
s是图像中以像素为单位测量的距离,
r是一个像素的大小(对于作物传感器,通常约为4.2 * 10 ^(-6)米),
λ是光的波长,
F是F数,在这种情况下为29。
对于单色光,这是正确的,为了近似颜色通道的点扩散函数,我们可以在某个适当的波长范围内取平均值。同样,应该在由s指定的像素区域上积分P(s)。
如果我们以此方式为3个颜色通道编译3个点扩散函数,则可以通过将图像转换为线性颜色空间并应用反卷积算法然后转换回sRGB来锐化图像。我得到以下结果:
因此,仅使用有关F数的数据和有关像素大小的假设,面部就已经明显变清晰。带状伪像在图像的黑暗部分可见,这是由于转换回sRGB后的后代化。
根据要求,我将在使用的程序上添加更多详细信息。我使用了ImageJ和ImageMagick,也使用了Mathematica来计算点扩散函数,但是它也可以在ImageJ中完成。我将首先说明当我已经具有点扩展功能时如何使用ImageJ进行反卷积。要进行反卷积,您需要为ImageJ安装一个插件,在这种情况下,我使用了此插件,但是还有其他可用的插件,例如DeconvolutionLab插件。
首先,您需要转换为线性色彩空间,我使用ImageMagick使用以下命令将不清晰的图像(input.jpg)转换为线性色彩空间:
convert input.jpg -colorspace RGB output.tif
然后使用ImageJ,然后打开文件output.tif。然后,从菜单选项中选择“图像”,然后选择“颜色”,然后选择“ Spit Channels”。然后从菜单中选择“插件”,然后选择“并行迭代解卷积”,然后选择“二维迭代解卷积”。
然后,您将获得反卷积窗口,然后选择图像,“ PSF”表示点扩展功能,然后在其中选择包含点扩展功能的图像文件。对于该方法,我选择基于Wiener滤波器的“ WPL”,通常对于低噪声图像效果较好。在WPL选项中,选中“归一化PSF”,对于低通滤波器,将该值更改为0.2,默认情况下为1,但是对于低噪点图像,较低的值更好(如果选择较大的值,则会得到不太清晰的图像)。其他选项:“边界”可以选择为自反的,“大小调整”可以设置为“ next power of 2”,输出可以设置为32位,精度可以设置为double。我选择最大迭代次数为15
然后,您可以通过单击“解卷积”来运行该程序。然后,您将获得一个32位图像文件作为输出。通常,像素值与原始图片中的像素值非常相似,但是您可以使某些像素超出原始图像格式的最大值。因此,在这种情况下,我们从8位图像开始,但是在反卷积图像中,您可以具有超过255的灰度值,这将导致整个图像变得太暗。必须通过将这些像素裁剪为255来解决此问题,您可以通过在菜单中选择“处理”,然后选择“数学”,然后选择“最大”来完成。然后,最大值将用于裁剪超出该值的灰度值。请注意,这将对您最后单击的图像完成。您还可以通过选择“
然后,对3种颜色分量进行反卷积后,可以通过在菜单中选择“图像”,“颜色”和“合并通道”来组合它们。然后,您将获得一个合成图像,可以使用在那里找到的“ Stack to RGB”命令将其转换为8位RGB。
然后保存该图像,我们将其称为im.tif。最后,您必须将其转换为sRGB,您可以使用ImageMagick使用以下命令执行此操作:
convert im.tif -set colorspace RGB -colorspace sRGB output.tif
剩下的问题是如何获得点扩散函数。实际上,如果您像在这里讨论的那样拍摄了一张照片,则可以简单地拍摄一个点源的照片,例如F / 29上的一颗星,并将其用作点扩展功能。另外,您可以查看高对比度边界并从灰度值从边界值从一个值变为另一个值的方式中提取点扩散函数。但是,然后您尝试尽可能地锐化图像。
在这种情况下,目标是根据您期望的F / 29编译颜色通道的点扩散函数,对图像进行反卷积,然后查看结果是否改善得足够好。我使用Mathematica进行了一些计算,使用这种先进的计算机代数程序可以很容易地进行各种操作,包括平均波长间隔和积分像素区域以使PSF更加逼真。
但是ImageJ还允许您创建一个新图像,可以用作点扩散功能。如果单击“文件”,然后单击“新建”,则可以创建大小为32位的图像,例如64 x 64,并用黑色填充。然后,您可以通过选择“处理”,“数学”和“宏”为灰度值编写公式。要获得此处涉及贝塞尔函数的这种情况下的点扩散函数,您可以使用以下事实:级数展开的前几个术语对此进行了很好的描述。我链接到的MathWorld页面为您提供了该系列的展开,因此, x = πrs /(λF)的J 1(x)2 / x 2可以由形式为A + B s 2 + C s 4的函数代替。。如果s太大,则这种近似将变得无效。现在,我们知道PSF趋于零,例如,在大约5或6像素的距离处,可以将其设置为零。假设多项式在这些值上仍然很小,则可以将Macro编写为:
if(d<7) v = A + B * pow(d,2) + B * pow(d,4)
然后,您创建3个图像,例如lambda = 650 nm,500 nm和400 nm,或者您认为适合表示3个颜色通道中衍射的任何其他值。然后,您可以通过为不同的lambda创建图片,然后依次选择“处理”,“图像计算器”和“添加”,在几个不同的波长上进行平均。然后,您可以将另一个图像添加到该结果中,添加完成后,可以依次选择“处理”,“数学”和“除法”以求平均值。