主要内容

imbilatfilt

高斯核图像的双边滤波

描述

J= imbilatfilt (对灰度或RGB图像应用保边高斯双边滤波器,

例子

J= imbilatfilt (degreeOfSmoothing指定平滑量。当degreeOfSmoothing是一个很小的值,imbilatfilt平滑具有小方差(均匀区域)的邻域,但不平滑具有大方差的邻域,如强边缘。的值degreeOfSmoothing的增加,imbilatfilt平滑统一区域和具有较大方差的社区。

J= imbilatfilt (degreeOfSmoothingspatialSigma也指定了标准差,spatialSigma空间高斯平滑核的。更大的值spatialSigma增加更遥远的相邻像素的贡献,有效地增加邻域大小。

J= imbilatfilt (___名称,值使用名称-值对更改双边过滤器的行为。

例子

全部折叠

读取并显示灰度图像。观察天空区域的水平条纹神器。

我= imread (“cameraman.tif”);imshow(我)

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

从天空区域检查图像的一个补丁。计算补丁的方差,它近似于噪声的方差。

patch = imcrop(I,[170, 35, 50, 50]);imshow(补丁)

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

patchVar = std2(补丁)^ 2;

使用双边滤波对图像进行滤波。将平滑程度设置为大于噪声的方差。

DoS = 2 * patchVar;J = imbilatfilt(我,DoS);imshow (J)标题(“平滑度:”num2str (DoS)])

图中包含一个axes对象。标题为Degree of Smoothing: 51.9395的axes对象包含一个类型为image的对象。

条纹神器减少了,但没有消除。要改善平滑,增加的值spatialSigma2这样距离较远的相邻像素对高斯平滑核的贡献更大。这有效地增加了双边滤波器的空间范围。

K = imbilatfilt (DoS, 2);imshow (K)标题([“平滑度:”num2str (DoS),',空间Sigma: 2'])

图中包含一个axes对象。标题为Degree of Smoothing: 51.9395, Spatial Sigma: 2的axis对象包含一个类型为image的对象。

天空中的条纹神器被成功移除。锐利的强烈边缘,如男人的剪影,有质感的区域,如图像前景中的草,都被保留了下来。

读取RGB图像。

imRGB = imread (“coloredChips.png”);imshow (imRGB)

图中包含一个axes对象。坐标轴对象包含一个image类型的对象。

将图像转换为L*a*b*颜色空间,使双边滤波器平滑感知上相似的颜色。

imLAB = rgb2lab (imRGB);

提取一个没有锋利边缘的补丁。计算距离原点的欧几里得距离的方差,在L*a*b*颜色空间中。

补丁= imcrop (imLAB[71年34岁,60岁,55]);patchSq =补丁。^ 2;edist =√sum (patchSq, 3));patchVar = std2 (edist)。^ 2;

使用双边滤波对L*a*b*颜色空间中的图像进行滤波。设置DegreeOfSmoothing值应高于补丁的方差。

DoS = 2 * patchVar;smoothedLAB = imbilatfilt (imLAB, DoS);

将图像转换回RGB颜色空间,并显示平滑图像。

smoothedRBG = lab2rgb (smoothedLAB,“出去”“uint8”);蒙太奇({imRGB, smoothedRBG})标题(“原始图像与经过滤波的平滑度图像:”+ num2str (DoS))

图中包含一个axes对象。标题为Original Image vs. filter Image with smooth Degree: 7.9771的axis对象包含一个类型为Image的对象。

木片和黑笔的颜色显得更加均匀,但表中水平的颗粒仍然可见。增加过滤器的空间范围,使过滤器的有效邻域跨越水平颗粒之间的空间(这个距离大约是7个像素)。也增加了DegreeOfSmoothing以更积极地平滑这些区域。

DoS2 = 4 * patchVar;smoothedLAB2 = imbilatfilt (imLAB DoS2 7);smoothedRBG2 = lab2rgb (smoothedLAB2,“出去”“uint8”);蒙太奇({imRGB, smoothedRBG2})标题(“原始图像与经过滤波的平滑度图像:”+ num2str (DoS) +和空间Sigma: 7"

图中包含一个axes对象。标题为原始图像vs.平滑度为7.9771的滤波图像和空间Sigma: 7的轴对象包含一个类型为Image的对象。

木桌的颜色更均匀,邻域更大,平滑程度也更大。保留了芯片和笔的边缘锐度。

输入参数

全部折叠

要过滤的图像,指定为二维灰度图像的大小——- - - - - -n或大小相同的二维彩色图像——- - - - - -n3。

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

平滑度,用正数表示。的默认值。degreeOfSmoothing取决于图像的数据类型,计算为0.01 * diff (getrangefromclass(我))^ 2.例如,默认的平滑度为650.25对于数据类型的图像uint8,默认为0.01对于数据类型的图像像素值范围为[0,1]。

空间高斯平滑核的标准差,指定为正数。

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

例子:imbilatfilt(我NeighborhoodSize = 7)对图像进行双边滤波使用7 × 7像素的邻域

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

例子:imbilatfilt(我,“NeighborhoodSize”,7)对图像进行双边滤波使用7 × 7像素的邻域

邻域大小,指定为奇值正整数。缺省情况下,邻居大小为2 *装天花板(2 *SpatialSigma) + 1像素

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

填充,指定为以下值之一。

价值 描述
“复制” 在数组边界之外的输入数组值假定等于最近的数组边界值。
“对称”

数组边界之外的输入数组值通过跨数组边界的镜像反射计算。

数字标量,x 在图像边界之外的输入图像值被赋值x

例子:填充=“对称”

例子:填充= 128

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|字符|字符串

输出参数

全部折叠

过滤后的图像,作为与输入图像相同大小和数据类型的数字数组返回,

提示

  • 的价值degreeOfSmoothing对应双边滤波器的范围高斯核的方差[1].范围高斯应用于一个像素值与其相邻值的欧氏距离上。

  • 为了平滑RGB图像感知上接近的颜色,将图像转换为CIE L*a*b*空间使用rgb2lab在应用双侧滤波器之前。要查看结果,将过滤后的图像转换为RGBlab2rgb

  • 增加spatialSigma增加NeighborhoodSize,这会增加过滤器的执行时间。你可以指定一个更小的NeighborhoodSize用精确度换取更快的执行时间。

参考文献

[1] Tomasi, C.和R. Manduchi。灰色和彩色图像的双边滤波。1998年IEEE会议记录®计算机视觉国际会议.孟买,印度。1998年1月,第836-846页。

扩展功能

版本历史

介绍了R2018a

全部展开

Baidu
map