Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

deconvblind

使用盲反卷积对图像进行去模糊处理

说明

[J,psfr] = deconvblind(I,psfi) 使用最大似然算法和点扩散函数 (PSF) psfi 的初始估计值对图像 I 进行反卷积。deconvblind 函数返回去模糊后的图像 J 和还原后的 PSF psfr

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

[J,psfr] = deconvblind(I,psfi,iter) 指定迭代次数 iter

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

示例

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

[J,psfr] = deconvblind(I,psfi,iter,dampar,weight,readout) 指定加性噪声(如背景和前景噪声)和读出的相机噪声 readout 的方差。

[J,psfr] = deconvblind(___,fun),其中 fun 是描述 PSF 上附加约束的函数的句柄。每次迭代结束时都会调用 fun。有关函数句柄的详细信息,请参阅创建函数句柄

示例

全部折叠

创建一个含噪示例图像。

% Set the random number generator back to its default settings for
% consistency in results.
rng default;

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

创建一个权重数组以指定处理中包含哪些像素。

WT = zeros(size(I));
WT(5:end-4,5:end-4) = 1;
INITPSF = ones(size(PSF));

执行盲反卷积。

[J P] = deconvblind(BlurredNoisy,INITPSF,20,10*sqrt(V),WT);

显示结果。

subplot(221);imshow(BlurredNoisy);
title('A = Blurred and Noisy');
subplot(222);imshow(PSF,[]);
title('True PSF');
subplot(223);imshow(J);
title('Deblurred Image');
subplot(224);imshow(P,[]);
title('Recovered PSF');

Figure contains 4 axes. Axes 1 with title A = Blurred and Noisy contains an object of type image. Axes 2 with title True PSF contains an object of type image. Axes 3 with title Deblurred Image contains an object of type image. Axes 4 with title Recovered PSF contains an object of type image.

输入参数

全部折叠

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

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

PSF 的初始估计值,指定为数值数组。PSF 还原受初始估计值 psfi 的大小的影响很大,受其中包含的值的影响较小。因此,请指定由 1 组成的数组作为您的 psfi

您还可以将 psfi 指定为元胞数组以支持中断迭代。有关详细信息,请参阅提示

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

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

数据类型: double

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

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

数据类型: double

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

函数句柄,指定为句柄。fun 必须接受 PSF 作为其第一个参数。该函数必须返回一个参数:一个与原始 PSF 大小相同且满足正性和归一化约束的 PSF。

输出参数

全部折叠

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

还原后的 PSF,以正数数组或 1×4 元胞数组形式返回。psfr 的大小与 PSF 的初始估计值 psfi 的大小相同,并且它经过了归一化,因此元素的总和为 1。有关以元胞数组形式返回 psfr 以启用中断迭代的详细信息,请参阅提示

数据类型: double

提示

  • 您可以使用 deconvblind 从上一次反卷积停止处开始执行反卷积。要使用此功能,请将输入图像 I 和 PSF 的初始估计值 psfi 作为元胞数组 {I}{psfi} 进行传递。当您这样做时,deconvblind 函数将以元胞数组形式返回输出图像 J 和还原后的点扩散函数 psfr。然后,可以将这些元胞数组作为输入数组传递给下一个 deconvblind 调用。输出元胞数组 J 包含四个元素:

    J{1} 包含原始图像 I

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

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

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

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

参考

[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.

[3] Timothy J. Holmes, et al, Light Microscopic Images Reconstructed by Maximum Likelihood Deconvolution, Handbook of Biological Confocal Microscopy, Ed. James B. Pawley, Plenum Press, New York, 1995.

在 R2006a 之前推出