主要内容

适应各种图像失真的盲反褶积

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

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

  • 减少噪声对恢复的影响

  • 考虑到不均匀的图像质量(如糟糕的像素)

  • 处理摄像头读出噪声

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

使用盲反褶积去模糊图像

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

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

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

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

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

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

图中包含一个axes对象。原始PSF包含一个类型为image的对象。

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

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

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

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

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

INITPSF = ones(size(PSF));[J] =中华医学杂志(英文版);图imshow(J)标题(恢复图像的

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

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

图中包含一个axes对象。标题恢复PSF的axis对象包含一个类型为image的对象。

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

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

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

图中包含一个axes对象。标题为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)标题(“新去模糊的图像”);

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

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

图中包含一个axes对象。标题为new reconstruction PSF的axis对象包含一个类型为image的对象。

精炼结果

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

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

元素

描述

输出{1}

原始输入图像

输出{2}

最后一次迭代生成的图像

输出{3}

下一个迭代生成的图像

输出{4}

使用的内部信息deconvblind以知道在哪里重新启动进程

PSF输出单元格数组包含类似的元素。

另请参阅

|

相关的例子

更多关于