主要内容

deconvlucy

使用露西-理查森方法对图像进行去模糊处理

说明

J = deconvlucy(I,psf) 还原由点扩散函数 (PSF) psf 卷积以及可能存在的加性噪声而导致退化的图像 I。该算法基于在泊松统计下最大化结果图像 J 是原始图像 I 的实例的可能性。

为了改进还原,deconvlucy 支持几个可选参数,如下所述。如果不指定中间参数,请使用 [] 作为占位符。

示例

J = deconvlucy(I,psf,iter) 指定迭代次数 iter

示例

J = deconvlucy(I,psf,iter,dampar) 通过抑制偏差较小(与噪声相比)的像素的迭代来控制噪声放大,偏离量由阻尼阈值 dampar 指定。默认情况下,不发生阻尼。

J = deconvlucy(I,psf,iter,dampar,weight) 指定在复原图像时应考虑输入图像 I 中的哪些像素。weight 数组中元素的值指定在处理图像时输入图像中某位置处像素的参与度。例如,要将某个像素排除在考虑范围之外,请在 weight 数组中为其分配 0 值。您可以根据平场校正量调整分配给每个像素的权重值。

J = deconvlucy(I,psf,iter,dampar,weight,readout) 指定加性噪声(如背景或前景噪声)和读出的相机噪声的方差 readout

当 PSF 在比图像精细 subsample 倍的网格上给定时,J = deconvlucy(I,psf,iter,dampar,weight,readout,subsample) 使用子采样。

示例

全部折叠

读取并显示没有模糊或噪声的原始图像。此示例以可选方式将图像裁剪到大小为 256×256,左上角 (x,y) 坐标为 (2,50)。

I = imread("board.tif");
I = imcrop(I,[2 50 255 255]);
imshow(I)
title("Original Image")

Figure contains an axes object. The hidden axes object with title Original Image contains an object of type image.

创建一个 PSF,它表示标准差为 5、大小为 5×5 的滤波器的高斯模糊。

PSF = fspecial("gaussian",5,5);

对图像中的模糊进行仿真。

blurred = imfilter(I,PSF,"symmetric","conv");

添加仿真的零均值高斯噪声。

V = 0.002;
blurred_noisy = imnoise(blurred,"gaussian",0,V);
imshow(blurred_noisy)
title("Blurred and Noisy Image")

Figure contains an axes object. The hidden axes object with title Blurred and Noisy Image contains an object of type image.

使用 deconvlucy 还原模糊且含噪的图像。指定用于创建模糊的 PSF 并将迭代次数减少到 5。

luc1 = deconvlucy(blurred_noisy,PSF,5);
imshow(luc1)
title("Restored Image")

Figure contains an axes object. The hidden axes object with title Restored Image contains an object of type image.

创建一个示例图像并对其进行模糊处理。

I = checkerboard(8);
PSF = fspecial('gaussian',7,10);
V = .0001;
BlurredNoisy = imnoise(imfilter(I,PSF),'gaussian',0,V);

创建一个权重数组并使用几个可选参数调用 deconvlucy

WT = zeros(size(I));
WT(5:end-4,5:end-4) = 1;
J1 = deconvlucy(BlurredNoisy,PSF);
J2 = deconvlucy(BlurredNoisy,PSF,20,sqrt(V));
J3 = deconvlucy(BlurredNoisy,PSF,20,sqrt(V),WT);

显示结果。

subplot(221);imshow(BlurredNoisy);
title('A = Blurred and Noisy');
subplot(222);imshow(J1);
title('deconvlucy(A,PSF)');
subplot(223);imshow(J2);
title('deconvlucy(A,PSF,NI,DP)');
subplot(224);imshow(J3);
title('deconvlucy(A,PSF,NI,DP,WT)');

Figure contains 4 axes objects. Hidden axes object 1 with title A = Blurred and Noisy contains an object of type image. Hidden axes object 2 with title deconvlucy(A,PSF) contains an object of type image. Hidden axes object 3 with title deconvlucy(A,PSF,NI,DP) contains an object of type image. Hidden axes object 4 with title deconvlucy(A,PSF,NI,DP,WT) contains an object of type image.

输入参数

全部折叠

模糊图像,指定为任意维度的数值数组。您也可以将图像指定为元胞数组,以支持中断迭代。有关详细信息,请参阅 提示

数据类型: single | double | int16 | uint8 | uint16

点扩散函数,指定为数值数组。

数据类型: single | double | int16 | uint8 | uint16

迭代次数,指定为正整数。

数据类型: double

阻尼的阈值,指定为数值标量。迭代之间的偏差小于阈值的像素会出现阻尼。dampar 的数据类型与 I 相同。

每个像素的权重值,指定为由 [0, 1] 范围内的值组成的数值数组。weight 与输入图像 I 大小相同。默认情况下,weight 中的所有元素的值均为 1,因此在还原过程中所有像素的权重相同。

数据类型: double

噪声,指定为数值标量或数值数组。readout 的值对应于加性噪声(例如来自前景和背景的噪声)和读出的相机噪声的方差。readout 的数据类型与 I 相同。

子采样,指定为正标量。

数据类型: double

输出参量

全部折叠

去模糊后的图像,以数值数组或 1×4 元胞数组形式返回。J(当 J 是元胞数组时为 J{1})与 I 具有相同的数据类型。有关以元胞数组形式返回 J 以启用中断迭代的详细信息,请参阅提示

提示

  • 您可以使用 deconvlucy 从上一次反卷积停止处开始执行反卷积。要使用此功能,请将输入图像 I 作为元胞数组传递,即 {I}。在执行此操作时,deconvlucy 函数将输出图像 J 以元胞数组形式返回,然后您可以将其作为输入数组传递给下一个 deconvlucy 调用。输出元胞数组 J 包含四个元素:

    J{1} 包含原始图像 I

    J{2} 包含最后一次迭代的结果。

    J{3} 包含倒数第二次迭代的结果。

    J{4} 是由迭代算法生成的数组。

  • 输出图像 J 可能出现算法中使用的离散傅里叶变换引入的振铃效应。要减少振铃效应,请在调用 deconvlucy 之前使用 I = edgetaper(I,psf)

  • deconvlucy 将 PSF 转换为 double 而不进行归一化。

  • deconvlucy 可以返回输出图像中超出输入图像范围的值。

参考

[1] D. S. C. Biggs and M. Andrews, Acceleration of iterative image restoration algorithms, Applied Optics, Vol. 36, No. 8, 1997.

[2] R. J. Hanisch, R. L. White, and R. L. Gilliland, Deconvolutions of Hubble Space Telescope Images and Spectra, Deconvolution of Images and Spectra, Ed. P.A. Jansson, 2nd ed., Academic Press, CA, 1997.

扩展功能

全部展开

版本历史记录

在 R2006a 之前推出

全部展开