主要内容

针对各种图像畸变的盲反卷积

使用deconvblind函数使用盲反卷积算法来消除图像的模糊。该算法最大限度地提高了结果图像的可能性,当与结果PSF卷积时,是一个模糊图像的实例,假设泊松噪声统计。在不知道失真(模糊和噪声)信息的情况下,盲反褶积算法可以有效地应用。的deconvblind函数同时恢复图像和PSF,使用类似于加速、阻尼Lucy-Richardson算法的迭代过程。

deconvblind函数,就像deconvlucy函数,实现了对原始Lucy-Richardson最大似然算法的几个改进,以解决复杂的图像恢复任务。利用这些适应性,你可以做到

  • 减少噪音对恢复的影响

  • 说明图像质量不均匀(如像素差)

  • 处理摄像机读出噪音

有关这些适应性的更多信息,请参见适应Lucy-Richardson反卷积的各种图像失真.的deconvblind函数还支持可以通过用户指定的金宝app函数提供的PSF约束。

使用盲反卷积去模糊图像

这个例子展示了如何使用盲反卷积去模糊图像。该示例演示了该操作的迭代性质,使用可选参数对图像进行了两次去模糊处理。

将图像读入工作区并显示它。

我= imread (“cameraman.tif”);图imshow(我)标题(原始图像的

图中包含一个轴对象。标题为“Original Image”的axis对象包含一个类型为Image的对象。

创建点扩展函数(PSF)。PSF描述了光学系统使光点模糊(扩散)的程度。

PSF = fspecial (“运动”13、45);图imshow (PSF, [],“InitialMagnification”“健康”)标题(“原始PSF”

图中包含一个轴对象。标题为“Original PSF”的轴对象包含一个类型为image的对象。

使用PSF在图像中创建一个模拟模糊,并显示模糊的图像。

模糊= imfilter (PSF,我“保监会”“conv”);图imshow(模糊)标题(模糊图像的

图中包含一个轴对象。标题为模糊图像的轴对象包含一个类型为图像的对象。

删除模糊图像使用deconvblind函数。你必须对PSF做一个初步的猜测。为了确定PSF的大小,检查模糊图像,并测量一个明显尖锐物体周围的模糊(像素)的宽度。因为PSF的大小比它包含的值更重要,所以通常可以指定一个包含1的数组作为初始PSF。

在最初的修复过程中,deconvblind能够在很大程度上消除图像的模糊。然而,请注意,在恢复的图像中,围绕着强烈对比度区域的环形。(这个例子通过使用“circular”选项消除了与边缘相关的铃声imfilter当创建模拟模糊图像时。)为了获得更满意的结果,重新运行操作,用不同尺寸的psf进行实验。每个反褶积返回的恢复PSF也可以为最佳PSF大小提供有价值的提示。

INITPSF = 1(大小(PSF));[J] = deconvblind(模糊,INITPSF,30);图imshow (J)标题(恢复图像的

图中包含一个轴对象。标题为restore Image的axes对象包含一个Image类型的对象。

图imshow (P []“InitialMagnification”“健康”)标题(“恢复了PSF”

图中包含一个轴对象。标题为restore PSF的轴对象包含一个类型为image的对象。

改进结果的一种方法是创建权重数组,从去模糊操作中排除高对比度的区域。这可以减少结果中的对比相关铃声。

要创建权重数组,请创建与图像大小相同的数组,并将值0赋给数组中的像素,这些像素对应于您想要排除在处理之外的原始图像中的像素。该示例使用边缘检测和形态学处理的结合来检测图像中的高对比度区域。因为图像中的模糊是线性的,这个例子将图像放大了两次。为了从处理中排除图像边界像素(高对比度区域),示例使用padarray将值赋给所有边框像素为0。

重量=边缘(我“索贝尔”陈霞);se1 = strel (“磁盘”1);se2 = strel (“行”13、45);WEIGHT = ~imdilate(WEIGHT,[se1 se2]);WEIGHT = padarray(WEIGHT(2:end-1,2:end-1),[1 1]);图imshow(重量)标题(权重数组的

图中包含一个轴对象。标题为Weight Array的axes对象包含一个类型为image的对象。

优化PSF的猜测。反褶积时第一次返回的重构PSF,P,显示出清晰的线性关系。对于第二次传递,示例使用一个新的PSF,它与返回的PSF相同,但小振幅像素设置为0。

P1 = P;P1(find(P1 < 0.01))= 0;

再次运行反褶积,这次指定权重数组和修改后的PSF。注意,与第一次通过的结果相比,恢复后的图像在锐度区域周围有更少的环。

[J2 P2] = deconvblind(Blurred,P1,50,[],double(WEIGHT));图中,imshow (J2)标题(“新解模糊的图像”);

图中包含一个轴对象。标题为“新去模糊图像”的轴对象包含一个类型为“图像”的对象。

图,imshow (P2, [],“InitialMagnification”“健康”)标题(“新重建PSF”

图中包含一个轴对象。标题为“新重构PSF”的轴对象包含一个类型为image的对象。

改进的结果

deconvblind函数,默认情况下,执行多个清除模糊过程的迭代。您可以在一定数量的迭代之后停止处理以检查结果,然后从处理停止的位置重新启动迭代。要使用此功能,必须将模糊图像和PSF作为单元格数组传入,例如:{模糊}{INITPSF}

deconvblind函数以单元格数组的形式返回输出图像和恢复的PSF。输出图像单元格数组包含以下四个元素:

元素

描述

输出{1}

原始输入图像

输出{2}

最后一次迭代生成的图像

输出{3}

由倒数第二个迭代产生的图像

输出{4}

使用的内部信息deconvblind了解在何处重新启动进程

PSF输出单元阵列包含类似的元素。

另请参阅

|

相关的例子

更多关于