主要内容

imnlmfilt

非局部是指图像的滤波

描述

例子

J= imnlmfilt (对灰度图像或彩色图像应用非局部均值滤波器并返回生成的图像J

例子

J= imnlmfilt (名称,值使用名称-值对更改非本地均值筛选器的行为。

JestDoS= imnlmfilt(___也返回平滑度,estDoS,用于估计去噪后的像素值。

例子

全部折叠

读取灰度图像。

I = imread(“cameraman.tif”);

将0.0015方差的零均值高斯白噪声添加到图像中imnoise函数。

noisyImage = imnoise(I,“高斯”, 0, 0.0015);

通过非局部均值滤波去除图像中的噪声。的imnlmfilt函数根据图像中噪声的标准差估计平滑程度。

[filteredImage,estDoS] = imnlmfilt(noisyImage);

显示噪声图像(左)和非局部均值过滤图像(右)作为蒙太奇。显示估计的平滑度,estDoS,在图标题中。

非局部均值滤波器从输入图像中去除噪声,但保留了强边缘的清晰度,如人物和建筑物的轮廓。该函数还平滑纹理区域,例如图像前景中的草,与噪声图像相比,导致更少的细节。

蒙太奇({noisyImage, filteredImage})标题(["估计平滑度"'estDoS = 'num2str (estDoS)])

图中包含一个轴对象。标题为Estimated Degree of Smoothing, estDoS = 11.4833的坐标轴对象包含一个image类型的对象。

读一幅彩色图像。

imRGB = imread(“peppers.png”);

将均值为零,方差为0.0015的白高斯噪声添加到图像中imnoise函数。显示有噪声的RGB图像。

noisyRGB = imnoise(imRGB,“高斯”, 0, 0.0015);imshow (noisyRGB)

图中包含一个轴对象。axis对象包含一个image类型的对象。

将噪声RGB图像转换为L*a*b颜色空间,使非局部均值滤波器平滑感知上相似的颜色。

noisyLAB = rgb2lab(noisyRGB);

从噪声背景中提取一个均匀的L*a*b patch来计算噪声标准差。

ROI = [210,24,52,41];patch = imcrop(noisyLAB,roi);

在这个L*a*b补丁中,计算到原点的欧氏距离,edist.然后,计算的标准差edist来估计噪声。

patchSq = patch.^2;edist = sqrt(sum(patchSq,3));patchSigma = sqrt(var(edist(:)));

设置'DegreeOfSmoothing”值应高于补丁的标准差。使用非局部均值滤波对有噪声的L*a*b*图像进行滤波。

DoS = 1.5*patchSigma;噪声实验室= imnlmfilt(噪声实验室,“DegreeOfSmoothing”、DoS);

将过滤后的L*a*b图像转换为RGB颜色空间。显示过滤后的RGB图像。

降噪drgb = lab2rgb(降噪drgb,“出”“uint8”);imshow (denoisedRGB)

图中包含一个轴对象。axis对象包含一个image类型的对象。

比较噪声RGB图像中的一个补丁(左)和非本地均值过滤RGB图像中的同一个补丁(右)。

Roi2 = [178,68,110,110];蒙太奇({imcrop (noisyRGB roi2) imcrop (denoisedRGB roi2)})

图中包含一个轴对象。axis对象包含一个image类型的对象。

输入参数

全部折叠

要过滤的图像,指定为大小的2-D灰度图像——- - - - - -n或大小的二维彩色图像——- - - - - -n3。的大小必须大于等于21 × 21。

数据类型:||int8|int16|int32|uint8|uint16|uint32

名称-值参数

的可选逗号分隔对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:J = imnlmfilt(I,'DegreeOfSmoothing',10);

平滑度,指定为由逗号分隔的对组成“DegreeOfSmoothing”一个正数。随着这个值的增加,平滑的结果图像J增加。如果您没有指定“DegreeOfSmoothing”,则默认值为从图像估计噪声的标准差。有关更多信息,请参见默认平滑度

搜索窗口大小,由逗号分隔的对组成“SearchWindowSize”一个奇值正整数,年代.对像素进行相似邻域的搜索仅限于年代——- - - - - -年代像素周围的区域。SearchWindowSize在时间方面线性地影响性能。SearchWindowSize不能大于输入图像的大小,

比较窗口大小,指定为逗号分隔的对,由“ComparisonWindowSize”一个奇值正整数,c.的imnlmfilt函数计算相似度权重c——- - - - - -c围绕像素的邻域。ComparisonWindowSize必须小于或等于SearchWindowSize.有关更多信息,请参见估计去噪像素值

输出参数

全部折叠

非局部是指过滤后的图像,返回为与输入图像大小和数据类型相同的二维灰度图像或二维彩色图像,

估计的平滑度,返回为正数。如果你指定DegreeOfSmoothing,然后imnlmfilt中返回相同的值estDoS.否则,imnlmfilt返回估计使用的默认平滑度默认平滑度

提示

  • 为了平滑RGB图像中感知上接近的颜色,使用将图像转换为CIE L*a*b*颜色空间rgb2lab在应用非局部均值过滤器之前。要查看结果,首先将过滤后的L*a*b*图像转换为RGB颜色空间,使用lab2rgb

  • 的数据类型,然后以数据类型进行计算.否则,以数据类型执行计算

算法

全部折叠

默认平滑度

的默认值“DegreeOfSmoothing”是从图像估计噪声的标准偏差。要估计标准差,imnlmfilt用J. Immerkær提出的3 × 3滤波器对图像进行卷积[2].当是彩色图像,默认值为“DegreeOfSmoothing”是信道上噪声平均的标准差。

估计去噪像素值

非局部均值滤波算法估计像素去噪后的值p使用这些步骤。

  1. 对于一个特定的像素,,在搜索窗口中,计算像素值之间的加权欧式距离c——- - - - - -c比较窗口周边p而且.对于彩色图像,在欧几里得距离计算中包括所有通道。

    权重是一个递减的指数函数,其衰减速率由的平方决定“DegreeOfSmoothing”.当图像有噪声时,“DegreeOfSmoothing”是大的,所有像素都有助于欧几里得距离计算。当图像噪声很小时,“DegreeOfSmoothing”的值很小,只有具有相似值的像素才可以进行欧氏距离计算。

    的邻域之间的相似性的数值标量p附近的社区

    请注意

    在A. Buades等人的实现中。[1],两个比较窗口之间的欧几里得距离与大小的高斯核进行卷积c——- - - - - -c.这种卷积赋予了比较窗口中心附近像素值之间的欧氏距离更多的权重。的imnlmfilt函数为提高计算效率省略了这一步。

  2. 中的每个其他像素重复此计算年代——- - - - - -年代搜索窗口,求像素之间的加权欧氏距离p每一个像素点。结果是年代——- - - - - -年代相似度矩阵,表示邻域之间的相似度p还有搜索窗口里的其他街区。

  3. 归一化相似矩阵。

  4. 使用归一化相似矩阵中的权重,计算中像素值的加权平均值年代——- - - - - -年代围绕像素搜索窗口p.的去噪值p

参考文献

[1]布德斯,A., B.科尔,j - m。莫雷尔。图像去噪的非局部算法2005年IEEE®计算机视觉与模式识别计算机学会会议.第二卷,2005年6月,第60-65页。

[2] Immerkær;“快速噪声方差估计”计算机视觉与图像理解“,.第64卷第2期,1996年9月,第300-302页。

在R2018b中引入