restoration

Module: restoration

图像恢复模块。

skimage.restoration.denoise_bilateral(图像)使用双边滤波器去噪图像。
skimage.restoration.denoise_nl_means(图像)对二维或三维灰度图像和二维RGB图像执行非局部平均去噪。
skimage.restoration.denoise_tv_bregman(...)使用分裂Bregman优化执行总变差去噪。
skimage.restoration.denoise_tv_chambolle(IM)对n维图像执行全变量去噪。
skimage.restoration.denoise_wavelet(img,...)对图像执行小波消噪。
skimage.restoration.estimate_sigma(im,...)(高斯)噪声标准差的鲁棒小波估计。
skimage.restoration.inpaint_biharmonic(img,mask)用双调和方程对图像进行蒙版。
skimage.restoration.nl_means_denoising(图像)弃用功能。改为使用skimage.restoration.denoise_nl_means。
skimage.restoration.richardson_lucy(image,psf)理查森 - 露西解卷积。
skimage.restoration.unsupervised_wiener(...)无监督Wiener-Hunt解卷积。
skimage.restoration.unwrap_phase(image,...)从包裹的阶段图像中恢复原件。
skimage.restoration.wiener(image,psf,balance)维纳 - 亨特解卷积
skimage.restoration.deconvolution实现恢复功能
skimage.restoration.inpaint
skimage.restoration.non_local_means
skimage.restoration.uft单位傅立叶变换和效用函数
skimage.restoration.unwrap

denoise_bilateral

skimage.restoration.denoise_bilateral(image, win_size=None, sigma_color=None, sigma_spatial=1, bins=10000, mode='constant', cval=0, multichannel=None, sigma_range=None)[资源]

使用双边滤波器去噪图像。

这是一个边缘保留的去噪滤波器。它根据它们的空间接近度和辐射测量相似性对像素进行平均[R419]。

空间贴近度是通过两个像素之间的欧几里德距离的高斯函数和一定的标准偏差(sigma_spatial)来测量的。

辐射测量相似性是通过两个颜色值和一定标准偏差(sigma_color)之间的欧几里得距离的高斯函数来测量的。

参数:图像:ndarray,形状(M,N,3)输入图像,2D灰度或RGB。win_size:int用于过滤的窗口大小。如果未指定win_size,则将其计算为max(5,2 * ceil(3 * sigma_spatial)+ 1)。sigma_color:float灰度值/颜色距离的标准差(辐射测量相似度)。较大的值会导致辐射测量差异较大的像素平均值。请注意,图像将使用img_as_float函数进行转换,因此标准偏差与范围0,1有关。如果值为None,则将使用图像的标准偏差。sigma_spatial:float距离距离的标准偏差。较大的值会导致空间差异较大的像素的平均值。bins:int颜色过滤的高斯权重的离散值数。数值越大,精确度越高。模式:{'constant','edge','symmetric','reflect','wrap'}如何处理图像边界外的值。有关详细信息,请参阅numpy.pad。cval:string与模式'常量'一起使用,即图像边界外的值。多通道:bool图像的最后一个轴是否被解释为多个通道或另一个空间维度。
返回:去噪:ndarray去噪图像。

参考

R419(1, 2) http://users.soe.ucsc.edu/~manduchi/Papers/ICCV98.pdf

例子

>>> from skimage import data, img_as_float >>> astro = img_as_float(data.astronaut()) >>> astro = astro[220:300, 220:320] >>> noisy = astro + 0.6 * astro.std() * np.random.random(astro.shape) >>> noisy = np.clip(noisy, 0, 1) >>> denoised = denoise_bilateral(noisy, sigma_color=0.05, sigma_spatial=15)

denoise_nl_means

skimage.restoration.denoise_nl_means(image, patch_size=7, patch_distance=11, h=0.1, multichannel=None, fast_mode=True)[source]

对二维或三维灰度图像和二维RGB图像执行非局部平均去噪。

参数:图像:二维或三维ndarray输入要去噪的图像,可以是二维或三维,灰度或RGB(仅适用于二维图像,请参阅多声道参数)。patch_size:int,可选用于去噪的修补程序大小。patch_distance:int,可选用于搜索用于去噪的修补程序的最大距离(以像素为单位)。h:浮动,可选的截止距离(灰色级别)。h越高,接受补丁越宽容。更高的h会导致更平滑的图像,但会造成图像模糊。对于标准偏差西格玛的高斯噪声,经验法则是选择h的值为略小于西格玛的值。多通道:bool,可选是否将图像的最后一个轴解释为多个通道或另一个空间维度。为3-D图像设置为False。fast_mode:bool,可选如果为True(默认值),使用非局部均值算法的快速版本。如果是False,则使用原始版本的非本地方式。有关这些算法的更多详细信息,请参阅注释部分。
返回:结果:ndarray去噪图像,与图像形状相同。

笔记

非局部均值算法非常适合对具有特定纹理的图像进行去噪。该算法的原理是平均在有限邻域的给定像素与其它的像素的值的值,条件是该补丁集中于其他像素将集中在感兴趣的像素的补丁足够相似。

在算法[R420]的原始版本中,对应fast=False的计算复杂度是

image.size * patch_size ** image.ndim * patch_distance ** image.ndim

因此,改变补丁的大小或其最大距离对计算时间有很大影响,特别是对于3D图像。

但是,默认行为对应于fast_mode=True使用另一版本的非本地方法[R421],对应于其复杂度

image.size * patch_distance ** image.ndim

计算时间仅取决于补丁大小,这要归功于计算给定移位的补丁距离积分,从而减少了操作次数[R420]。因此,该算法执行速度比经典算法(fast_mode=False)快,但是使用两倍的内存。与其他替代方案相比,这种实施已被证明效率更高,参见[R422]。

与经典算法相比,贴片的所有像素都有助于与具有相同权重的另一个贴片的距离,而不管它们与贴片中心的距离如何。这种较粗略的距离计算可能导致较差的去噪表现。而且,对于小图像(线性尺寸仅为贴片尺寸的几倍的图像),由于边界效应,经典算法可以更快。

图像使用去噪之前的reflect模式填充skimage.util.pad

参考

R420(1, 2, 3) Buades, A., Coll, B., & Morel, J. M. (2005, June). A non-local algorithm for image denoising. In CVPR 2005, Vol. 2, pp. 60-65, IEEE.

R421(1, 2) J. Darbon, A. Cunha, T.F. Chan, S. Osher, and G.J. Jensen, Fast nonlocal filtering applied to electron cryomicroscopy, in 5th IEEE International Symposium on Biomedical Imaging: From Nano to Macro, 2008, pp. 1331-1334.

R422(1, 2) Jacques Froment. Parameter-Free Fast Pixelwise Non-Local Means Denoising. Image Processing On Line, 2014, vol. 4, p. 300-326.

例子

>>> a = np.zeros((40, 40)) >>> a[10:-10, 10:-10] = 1. >>> a += 0.3 * np.random.randn(*a.shape) >>> denoised_a = denoise_nl_means(a, 7, 5, 0.1)

denoise_tv_bregman

skimage.restoration.denoise_tv_bregman(image, weight, max_iter=100, eps=0.001, isotropic=True)[source]

使用分裂Bregman优化执行总变差去噪。

总变差去噪(也称为总变差正则化)试图在与输入图像相似的约束下找到总变化较小的图像,该输入图像由正则化参数([R423],[R424], [R425],[R426])。

参数:image:ndarray输入要去噪的数据(使用img_as_float进行转换)。重量:浮动去重重量。重量越小,去噪越多(以与输入相似度较低为代价)。正则化参数lambda被选为2 *权重。eps:float,可选用于确定停止标准的成本函数值的相对差异。该算法在以下情况下停止:可选:用于优化的最大迭代次数。(可选)用于优化的最大迭代次数。各向同性:布尔型,可选在各向同性和各向异性电视去噪之间切换。|
返回:u:ndarray去噪图像。

参考

R423(1, 2) http://en.wikipedia.org/wiki/Total_variation_denoising

R424(1, 2) Tom Goldstein and Stanley Osher, “The Split Bregman Method For L1 Regularized Problems”, ftp://ftp.math.ucla.edu/pub/camreport/cam08-29.pdf

R425(1, 2) Pascal Getreuer, “Rudin–Osher–Fatemi Total Variation Denoising using Split Bregman” in Image Processing On Line on 2012–05–19, http://www.ipol.im/pub/art/2012/g-tvd/article_lr.pdf

R426(1, 2) http://www.math.ucsb.edu/~cgarcia/UGProjects/BregmanAlgorithms_JacquelineBush.pdf

denoise_tv_chambolle

skimage.restoration.denoise_tv_chambolle(im, weight=0.1, eps=0.0002, n_iter_max=200, multichannel=False)[source]

对n维图像执行全变量去噪。

参数:im:ints,uints或float的ndarray输入要去噪的数据。im可以是任何数字类型,但是它可以投射到一个浮点状态中,用于计算去噪后的图像。权重:浮动,可选去噪权重。权重越大,去噪越多(以牺牲输入的忠实度为代价)。eps:float,可选用于确定停止标准的成本函数值的相对差异。该算法在以下情况下停止:(E_(n-1) - E_n)
返回:out:ndarray去噪图像。

笔记

确保为彩色图像适当地设置多通道参数。

总变差去噪的原理在http://en.wikipedia.org/wiki/Total_variation_denoising中解释

总变差去噪的原理是尽量减少图像的总变化,这可以粗略地描述为图像梯度范数的积分。总变差去噪倾向于产生“卡通式”图像,即分段恒定图像。

该代码是由Chambolle在[R427]中提出的Rudin,Fatemi和Osher算法的实现。

参考

R427(1,2)A. Chambolle,一种用于总变差最小化和应用的算法,Journal of Mathematical Imaging and Vision,Springer,2004,20,89-97。

例子

关于宇航员图像的2D例子:

>>> from skimage import color, data >>> img = color.rgb2gray(data.astronaut())[:50, :50] >>> img += 0.5 * img.std() * np.random.randn(*img.shape) >>> denoised_img = denoise_tv_chambolle(img, weight=60)

关于合成数据的3D示例:

>>> x, y, z = np.ogrid[0:20, 0:20, 0:20] >>> mask = (x - 22)**2 + (y - 20)**2 + (z - 17)**2 < 8**2 >>> mask = mask.astype(np.float) >>> mask += 0.2*np.random.randn(*mask.shape) >>> res = denoise_tv_chambolle(mask, weight=100)

denoise_wavelet

skimage.restoration.denoise_wavelet(img, sigma=None, wavelet='db1', mode='soft', wavelet_levels=None, multichannel=False, convert2ycbcr=False)[source]

对图像执行小波消噪。

参数:img:ndarray([M,N [,... P]),整数或浮点数输入要去噪的数据。img可以是任何数字类型,但是它会被投射到一个用于计算去噪图像的浮动图标上。西格玛:浮点数或列表,可选在每个颜色通道中,如R428所述自适应计算阈值时使用的噪声标准偏差。当无(默认)时,噪音标准偏差通过R429中的方法估算。wavelet:string,可选要执行的小波的类型,可以是pywt.wavelist输出中的任何选项。缺省值是'db1'。例如,小波可以是任何{'db2','haar','sym9'}等等。模式:{'soft','hard'},可选可选参数,用于选择所执行的去噪类型。它指出,选择给定加性噪声的软阈值可以找到原始图像的最佳近似值。wavelet_levels:int或None,可选要使用的小波分解级别的数量。缺省值是小于最大可能分解级数的三个。多通道:bool,可选对每个通道单独应用小波消噪(其中声道对应于阵列的最终轴)。convert2ycbcr:bool,可选如果为True且多声道为True,请在YCbCr色彩空间中进行小波消噪,而不是RGB色彩空间。这通常会导致RGB图像更好的性能。bool,可选对每个通道分别应用小波消噪(其中通道对应于阵列的最终轴)。convert2ycbcr:bool,可选如果为True且多声道为True,请在YCbCr色彩空间中进行小波消噪,而不是RGB色彩空间。这通常会导致RGB图像更好的性能。bool,可选对每个通道分别应用小波消噪(其中通道对应于阵列的最终轴)。convert2ycbcr:bool,可选如果为True且多声道为True,请在YCbCr色彩空间中进行小波消噪,而不是RGB色彩空间。这通常会导致RGB图像更好的性能。
返回:out:ndarray去噪图像。

笔记

小波域是图像的稀疏表示,可以被认为与傅里叶变换的频域类似。稀疏表示的大部分值为零或接近零,并且真正的随机噪声(通常)由小波域中的许多小值表示。将低于某个阈值的所有值设置为0可降低图像中的噪点,但较大的阈值也会降低图像中的细节。

如果输入是3D,则此功能将分别对每个色彩平面执行小波消噪。输出图像根据输入图像范围在-1,1和0,1之间剪切。

当YCbCr转换完成时,每个颜色通道都在0和1之间缩放,并将sigma值应用于这些缩放的颜色通道。

参考

R428(1,2)Chang,S. Grace,Bin Yu和Martin Vetterli。“Adaptive wavelet thresholding for image denoising and compression”,Image Processing,IEEE Transactions on 9.9(2000):1532-1546。DOI:10.1109 / 83.862633

R429(1, 2) D. L. Donoho and I. M. Johnstone. “Ideal spatial adaptation by wavelet shrinkage.” Biometrika 81.3 (1994): 425-455. DOI: 10.1093/biomet/81.3.425

例子

>>> from skimage import color, data >>> img = img_as_float(data.astronaut()) >>> img = color.rgb2gray(img) >>> img += 0.1 * np.random.randn(*img.shape) >>> img = np.clip(img, 0, 1) >>> denoised_img = denoise_wavelet(img, sigma=0.1)

estimate_sigma

skimage.restoration.estimate_sigma(im, average_sigmas=False, multichannel=False)[source]

(高斯)噪声标准差的鲁棒小波估计。

参数:im:ndarray为估计噪声标准偏差的图像。average_sigmas:bool,可选如果为true,则对sigma的信道估计进行平均。否则,返回每个通道对应的sigma列表。多声道:bool为每个声道单独估算sigma。
返回:西格玛:浮点数或列表估计的噪声标准差(s)。如果多声道为True且average_sigmas为False,则会返回每个声道的单独噪声估计值。否则,返回单个频道估计的平均值。

笔记

该函数假定噪声遵循高斯分布。估计算法基于小波细节系数的中值绝对偏差,如[R430]的第4.2节所述。

参考

R430(1,2)DL Donoho和IM Johnstone。“通过小波缩小的理想空间适应”,Biometrika 81.3(1994):425-455。DOI:10.1093 /巴奥米特/ 81.3.425

例子

>>> import skimage.data >>> from skimage import img_as_float >>> img = img_as_float(skimage.data.camera()) >>> sigma = 0.1 >>> img = img + sigma * np.random.standard_normal(img.shape) >>> sigma_hat = estimate_sigma(img, multichannel=False)

inpaint_biharmonic

skimage.restoration.inpaint_biharmonic(img, mask, multichannel=False)[source]

用双调和方程对图像进行蒙版。

参数:img:(M,N [,...,P])ndarray输入图像。mask:(M [,N,...,P])ndarray要修复的像素阵列。必须与'img'频道的形状相同。未知像素必须用1表示,已知像素 - 用0表示。multichannel:boolean,可选如果为True,则最后一个img尺寸被视为颜色通道,否则为空间。
返回:out:(M,N [,...,P])ndarray输入带有蒙版像素的图像。

参考

R431NSHoang,SBDamelin,“在表面完成和双调和函数的图像修补:数字方面”

例子

>>> img = np.tile(np.square(np.linspace(0, 1, 5)), (5, 1)) >>> mask = np.zeros_like(img) >>> mask[2, 2:] = 1 >>> mask[1, 3:] = 1 >>> mask[0, 4:] = 1 >>> out = inpaint_biharmonic(img, mask)

nl_means_denoising

skimage.restoration.nl_means_denoising(image, patch_size=7, patch_distance=11, h=0.1, multichannel=None, fast_mode=True)[source]

弃用功能skimage.restoration.denoise_nl_means改为使用。

对二维或三维灰度图像和二维RGB图像执行非局部平均去噪。

参数:图像:二维或三维ndarray输入要去噪的图像,可以是二维或三维,灰度或RGB(仅适用于二维图像,请参阅多声道参数)。patch_size:int,可选用于去噪的修补程序大小。patch_distance:int,可选用于搜索用于去噪的修补程序的最大距离(以像素为单位)。h:浮动,可选的截止距离(灰色级别)。h越高,接受补丁越宽容。更高的h会导致更平滑的图像,但会造成图像模糊。对于标准偏差西格玛的高斯噪声,经验法则是选择h的值为略小于西格玛的值。多通道:bool,可选是否将图像的最后一个轴解释为多个通道或另一个空间维度。为3-D图像设置为False。fast_mode:bool,可选如果为True(默认值),使用非局部均值算法的快速版本。如果是False,则使用原始版本的非本地方式。有关这些算法的更多详细信息,请参阅注释部分。
返回:结果:ndarray去噪图像,与图像形状相同。

笔记

非局部均值算法非常适合对具有特定纹理的图像进行去噪。该算法的原理是平均在有限邻域的给定像素与其它的像素的值的值,条件是该补丁集中于其他像素将集中在感兴趣的像素的补丁足够相似。

在算法[R432]的原始版本中,对应fast=False的计算复杂度是

image.size * patch_size ** image.ndim * patch_distance ** image.ndim

因此,改变补丁的大小或其最大距离对计算时间有很大影响,特别是对于3D图像。

但是,默认行为对应于fast_mode=True使用另一版本的非本地方法[R433],对应于其复杂度

image.size * patch_distance ** image.ndim

计算时间仅取决于补丁大小,这要归功于计算给定移位的补丁距离积分,从而减少了操作次数[R432]。因此,该算法执行速度比经典算法(fast_mode=False)快,但是使用两倍的内存。与其他替代方案相比,这种实现已被证明更有效,参见[R434]。

与经典算法相比,贴片的所有像素都有助于与具有相同权重的另一个贴片的距离,而不管它们与贴片中心的距离如何。这种较粗略的距离计算可能导致较差的去噪表现。而且,对于小图像(线性尺寸仅为贴片尺寸的几倍的图像),由于边界效应,经典算法可以更快。

图像使用去噪之前的reflect模式填充skimage.util.pad

参考

R432(1,2,3)Buades,A.,Coll,B。和Morel,JM(2005年6月)。一种用于图像去噪的非局部算法。在CVPR 2005,Vol。2,第60-65页,IEEE。

R433(1,2)J. Darbon,A. Cunha,TF Chan,S. Osher和GJ Jensen,应用于电子低温显微术的快速非局部过滤,第5届IEEE国际生物医学成像研讨会:从纳米到宏,2008年, 1331-1334。

R434(1,2)Jacques Froment。无参数快速像素非局部均值去噪。图像处理在线,2014年,第一卷。4,p。300-326。

例子

>>> a = np.zeros((40, 40)) >>> a[10:-10, 10:-10] = 1. >>> a += 0.3 * np.random.randn(*a.shape) >>> denoised_a = denoise_nl_means(a, 7, 5, 0.1)

richardson_lucy

skimage.restoration.richardson_lucy(image, psf, iterations=50, clip=True)[source]

理查森 - 露西解卷积。

参数:image:ndarray输入降级图像(可以是N维)。psf:ndarray点扩散函数。迭代次数:int迭代次数。该参数起到正则化的作用。clip:布尔值,可选默认情况下为真。如果为true,则为大于1或小于-1的结果的像素值将为skimage管道兼容性设置阈值。
返回:im_deconv:ndarray解卷图像。

参考

R435http://en.wikipedia.org/wiki/Richardson%E2%80%93Lucy_deconvolution

例子

>>> from skimage import color, data, restoration >>> camera = color.rgb2gray(data.camera()) >>> from scipy.signal import convolve2d >>> psf = np.ones((5, 5)) / 25 >>> camera = convolve2d(camera, psf, 'same') >>> camera += 0.1 * camera.std() * np.random.standard_normal(camera.shape) >>> deconvolved = restoration.richardson_lucy(camera, psf, 5)

unsupervised_wiener

skimage.restoration.unsupervised_wiener(image, psf, reg=None, user_params=None, is_real=True, clip=True)[source]

无监督Wiener-Hunt解卷积。

使用Wiener-Hunt方法返回反卷积,其中超参数是自动估计的。该算法是下面参考文献中描述的随机迭代过程(吉布斯采样器)。另请参阅wiener功能。

参数:image:(M,N)ndarray输入降级的图像。psf:ndarray脉冲响应(输入图像的空间)或传递函数(傅立叶空间)。两者都被接受。传递函数自动识别为复杂(np.iscomplexobj(psf))。reg:ndarray,可选正则运算符。拉普拉斯默认。它可以是脉冲响应或传递函数,就像psf一样。user_params:字典吉布斯采样器的参数字典。见下文。clip:布尔值,可选默认情况下为真。如果为true,则高于1或低于-1的结果的像素值将为skimage管道兼容性设置阈值。
返回:x_postmean:(M,N)ndarray解卷图像(后验均值)。链:字典密钥噪声和先验分别包含噪声和先验精度的链表。

| 其他参数:|

| | 这些关键字user\_params是:threshold:float停止标准:与逐次逼近解(标准样本的经验平均值,请参见注释部分)之间的差值范数。1e-4默认。burnin:int要开始计算平均值的忽略的样本数。100默认。min_iter:int最小迭代次数。30默认。max_iter:int如果不满足阈值,则为最大迭代次数。默认150。回调:可调用(默认情况下为无)用户提供的可调用对象,如果函数存在,则传递该对象,用于任何目的的当前图像样本。用户可以存储样本,或计算除平均值之外的其他时刻。它对算法执行没有影响,仅用于检查。|

笔记

估计的图像被设计为概率法的后验均值(来自贝叶斯分析)。平均值被定义为对所有可能的图像加权的总和。鉴于问题的大小,确切的总和是不容易处理的。该算法使用MCMC在后验定律下绘制图像。实际的想法是只画出高度可能的图像,因为它们对平均值的贡献最大。相反,由于它们的贡献较低,不太可能的图像被较少地绘制。最后,这些样本的经验均值给了我们一个平均值的估计,以及一个无限样本集的精确计算。

参考

R436François Orieux, Jean-François Giovannelli, and Thomas Rodet, “Bayesian estimation of regularization and point spread function parameters for Wiener-Hunt deconvolution”, J. Opt. Soc. Am. A 27, 1593-1607 (2010) http://www.opticsinfobase.org/josaa/abstract.cfm?URI=josaa-27-7-1593 http://research.orieux.fr/files/papers/OGR-JOSA10.pdf

例子

>>> from skimage import color, data, restoration >>> img = color.rgb2gray(data.astronaut()) >>> from scipy.signal import convolve2d >>> psf = np.ones((5, 5)) / 25 >>> img = convolve2d(img, psf, 'same') >>> img += 0.1 * img.std() * np.random.standard_normal(img.shape) >>> deconvolved_img = restoration.unsupervised_wiener(img, psf)

unwrap_phase

skimage.restoration.unwrap_phase(image, wrap_around=False, seed=None)[source]

从包裹的阶段图像中恢复原件。

从包裹在[-pi,pi]区间的图像中,恢复出原始的,未包装的图像。

参数:图像:浮点数的一维,二维或三维图形,可选蒙版数组值应该在[-pi,pi)范围内。如果提供了一个被屏蔽的数组,被屏蔽的条目将不会被改变,它们的值不会被用来指导相邻的未被屏蔽的值的展开。被掩盖的一维数组是不允许的,并且会引发ValueError。wrap_around:bool或bool序列,可选当序列的元素为True时,展开过程将视图沿着图像的相应轴连接,并使用此连接来指导相位展开过程。如果只给出一个布尔值,它将应用于所有的轴。1D阵列不支持环绕。seed:int,可选解开2D或3D图像使用随机初始化。这为PRNG的种子设定了确定性行为。
返回:image_unwrapped:array_like,double与输入形状相同的Unwrapped图像。如果输入图像是一个蒙版数组,蒙版将被保留。
举:ValueError如果用掩码1D数组调用或用1D数组调用wrap_around = True。

参考

R437Miguel Arevallilo Herraez, David R. Burton, Michael J. Lalor, and Munther A. Gdeisat, “Fast two-dimensional phase-unwrapping algorithm based on sorting by reliability following a noncontinuous path”, Journal Applied Optics, Vol. 41, No. 35 (2002) 7437,

R438Abdul-Rahman, H., Gdeisat, M., Burton, D., & Lalor, M., “Fast three-dimensional phase-unwrapping algorithm based on sorting by reliability following a non-continuous path. In W. Osten, C. Gorecki, & E. L. Novak (Eds.), Optical Metrology (2005) 32–40, International Society for Optics and Photonics.

例子

>>> c0, c1 = np.ogrid[-1:1:128j, -1:1:128j] >>> image = 12 * np.pi * np.exp(-(c0**2 + c1**2)) >>> image_wrapped = np.angle(np.exp(1j * image)) >>> image_unwrapped = unwrap_phase(image_wrapped) >>> np.std(image_unwrapped - image) < 1e-6 # A constant offset is normal True

维纳

skimage.restoration.wiener(image, psf, balance, reg=None, is_real=True, clip=True)[source]

维纳 - 亨特解卷积

用维纳 - 亨特方法返回反卷积(即用傅立叶对角化)。

参数:图像:(M,N)ndarray输入降级图像psf:ndarray点扩散函数。如果数据类型为实数,则假定为脉冲响应(输入图像空间),如果数据类型非常复杂,则假定为传递函数(傅立叶空间)。脉冲响应的形状没有限制。如果is_real为真,则传递函数必须是形状(M,N),否则(M,N // 2 + 1)(见np.fft.rfftn)。balance:float调整提高频率恢复的数据充分性和降低频率恢复的先验充分性(避免噪声伪像)之间的平衡的正则化参数值。reg:ndarray,可选正则运算符。拉普拉斯默认。它可以是脉冲响应或传递函数,就像psf一样。形状约束与psf参数相同。是真实的 :布尔值,可选默认为true。指定psf和reg是否提供了埃米特假设,即仅提供了一半的频率平面(由于实信号的傅立叶变换的冗余性)。只有在psf和/或reg作为传递函数提供时才适用。对于埃尔米特房产,请参阅uft模块或np.fft.rfftn。clip:布尔值,可选默认情况下为真。如果为True,则高于1或低于-1的结果的像素值将为skimage管道兼容性设置阈值。可选默认为true。如果为True,则高于1或低于-1的结果的像素值将为skimage管道兼容性设置阈值。可选默认为true。如果为True,则高于1或低于-1的结果的像素值将为skimage管道兼容性设置阈值。
返回:im_deconv:(M,N)ndarray解卷图像。

笔记

该功能通过脉冲响应(或PSF)将维纳滤波器应用于噪声和降级图像。如果数据模型是

[y = Hx + n]

其中(n)是噪声,(H)PSF和(x)未知原始图像,维纳滤波器是

[\hat x = F^\dag (|\Lambda_H|^2 + \lambda |\Lambda_D|^2) \Lambda_H^\dag F y]

其中(F)和(F ^ \ dag)分别是傅里叶变换和反傅里叶变换,(\ Lambda_H)传递函数(或PSF的傅立叶变换,参见下面的Hunt)和(\ Lambda_D)恢复的图像频率(默认情况下是拉普拉斯算子,即惩罚高频)。参数(\ lambda)调整数据之间的平衡(倾向于增加高频率,甚至来自噪声的数据)和正则化。

这些方法对于之前的模型是特定的。因此,应用程序或真实图像的性质必须与先前的模型相对应。默认情况下,先验模型(拉普拉斯算子)引入图像平滑度或像素相关性。它也可以解释为高频处罚,以补偿解决方案相对于数据的不稳定性(有时称为噪声放大或“爆炸性”解决方案)。

最后,傅立叶空间的使用意味着(H)的循环性质,参见Hunt。

参考

R439François Orieux, Jean-François Giovannelli, and Thomas Rodet, “Bayesian estimation of regularization and point spread function parameters for Wiener-Hunt deconvolution”, J. Opt. Soc. Am. A 27, 1593-1607 (2010) http://www.opticsinfobase.org/josaa/abstract.cfm?URI=josaa-27-7-1593 http://research.orieux.fr/files/papers/OGR-JOSA10.pdf

R440B. R. Hunt “A matrix theory proof of the discrete convolution theorem”, IEEE Trans. on Audio and Electroacoustics, vol. au-19, no. 4, pp. 285-288, dec. 1971

例子

>>> from skimage import color, data, restoration >>> img = color.rgb2gray(data.astronaut()) >>> from scipy.signal import convolve2d >>> psf = np.ones((5, 5)) / 25 >>> img = convolve2d(img, psf, 'same') >>> img += 0.1 * img.std() * np.random.standard_normal(img.shape) >>> deconvolved_img = restoration.wiener(img, psf, 1100)