BilateralFilter[data,σ,μ]
对 data 应用一个具有空间传播 σ 和像素值传播 μ 的双边滤波器.
BilateralFilter
BilateralFilter[data,σ,μ]
对 data 应用一个具有空间传播 σ 和像素值传播 μ 的双边滤波器.
更多信息和选项
- BilateralFilter 是一个非线性局部滤波器,用于边缘保持平滑滤波. 平滑量取决于 σ 和 μ 的值.
- BilateralFilter 通过加权平均其邻域替代每个像素,使用归一化的高斯矩阵作为权.
- data 可为以下形式:
-
list 任意维度的数值数组 tseries 时态数据,如 TimeSeries、TemporalData、… image 任意 Image 或 Image3D 对象 audio Audio 对象 - 当应用于多通道图像时,计算通道向量之间的欧几里得距离.
- 在数据边界处,BilateralFilter 使用较小的邻域.
- 可以给出下列选项:
-
MaxIterations 1 最大迭代次数 WorkingPrecision MachinePrecision 使用的精度 - BilateralFilter 使用空间半径为 5/2 σ 的高斯矩阵.
- BilateralFilter 总是返回一个真实类型的图像.
- 对于 μ 的较大值,双边滤波产生与高斯滤波相似的结果.
背景
- BilateralFilter 是一个去除通常由噪音、粗糙材质等造成的局部差异,从而平滑图像的滤波器. BilateralFilter 常常是进行其它如图像分割之类图像分析操作前的预处理步骤. 双边滤波也可用于进行不尖锐的图像蒙板操作,只要从原图中减去过滤后的图像然后再加上原图即可.
- BilateralFilter 进行的是非线性的保边平滑运算. 平滑是通过把每个像素替换为其周边像素的加权平均来完成的,权重取自归一化的基于颜色相似性的高斯分布. 这里高斯分布的标准差 σ 和平均数 μ 被作为参数指定.
- BilateralFilter 适用于任意灰度和彩色图像,也同样适用于二维及三维图像. 当被应用于多通道图像时,BilateralFilter 并不是逐通道运算而是使用通道向量之间的欧几里得距离.
- 其它保边的滤波器包括 MeanShiftFilter 和 PeronaMalikFilter. 类似但不保边的滤波器则有 MeanFilter 及 GaussianFilter. 当高斯分布平均值较大时,双边滤波则会产生与高斯滤波相似的结果.
范例
打开所有单元 关闭所有单元基本范例 (3)
BilateralFilter[ {1, 0, 1, 4, 4, 5, 2, 1}, 3, 1]对 TimeSeries 进行滤波:
ts = TemporalData[TimeSeries, {{{0., -0.054108337548928784, 0.1280211704499059, 0.28162021808461324,
-0.2057320325139802, -0.4871901025739722, -0.7154387408784426, -0.7399660905024047,
-0.6981022018441507, -0.7178077145466483, -0.8034462541874 ... 7894984276149, 1.8851123992920942, 1.8341759268762767, 2.0335844117979263}},
{{0., 10., 0.1}}, 1, {"Continuous", 1}, {"Continuous", 1}, 1,
{ValueDimensions -> 1, ResamplingMethod -> {"Interpolation", InterpolationOrder -> 1}}}, False,
10.];filtered = BilateralFilter[ts, 5, 2]ListLinePlot[{ts, filtered}, PlotLegends -> {"original data", "filtered"}]BilateralFilter[[image], 7, .1]范围 (7)
数据 (7)
{ListLinePlot[data = Table[Sign[i - 1] + RandomReal[{-.2, .2}], {i, 0, 2, 0.01}]],
ListLinePlot[BilateralFilter[data, 10, .5]]}BilateralFilter[(| | | | |
| - | - | - | - |
| 0 | 3 | 2 | 2 |
| 3 | 9 | 9 | 6 |
| 5 | 8 | 7 | 0 |
| 3 | 1 | 1 | 2 |), 2, 2]//MatrixForm对 TimeSeries 进行滤波:
ts = TemporalData[TimeSeries, {{{0., -0.27267267057145633, -0.6672983789995302, -0.5338541947930846,
-0.6117404489279314, -0.6755527076595494, -0.02125421294486496, -0.10792797291843935,
-0.6138271235477938, -0.3248568606554575, -0.08843449054 ... 2053424, -0.49980440691873723, -0.5388679788215971,
-0.4101602764645551}}, {{0, 1., 0.01}}, 1, {"Continuous", 1}, {"Continuous", 1}, 1,
{ValueDimensions -> 1, ResamplingMethod -> {"Interpolation", InterpolationOrder -> 1}}}, False,
10.1];filtered = BilateralFilter[ts, 3, 1]ListLinePlot[{ts, filtered}, PlotLegends -> {"original data", "filtered"}]对 Audio 信号进行滤波:
a = Import["ExampleData/rule30.wav"];b = BilateralFilter[a, 25, 0.5]AudioPlot[{a, b}]BilateralFilter[[image], 2, 0.2]BilateralFilter[[image], 5, 0.1]BilateralFilter[{a, b, c}, 1, .1]选项 (6)
MaxIterations (2)
i = [image];
BilateralFilter[i, 2, .05, MaxIterations -> 1]BilateralFilter[i, 2, .05, MaxIterations -> 10]反复对 TimeSeries 进行滤波:
ts = TemporalData[TimeSeries, {{{0., -0.27267267057145633, -0.6672983789995302, -0.5338541947930846,
-0.6117404489279314, -0.6755527076595494, -0.02125421294486496, -0.10792797291843935,
-0.6138271235477938, -0.3248568606554575, -0.08843449054 ... 2053424, -0.49980440691873723, -0.5388679788215971,
-0.4101602764645551}}, {{0, 1., 0.01}}, 1, {"Continuous", 1}, {"Continuous", 1}, 1,
{ValueDimensions -> 1, ResamplingMethod -> {"Interpolation", InterpolationOrder -> 1}}}, False,
10.1];filtered = BilateralFilter[ts, 3, .3, MaxIterations -> 100]ListLinePlot[{ts, filtered}, PlotLegends -> {"original data", "filtered"}]WorkingPrecision (4)
默认情况下,MachinePrecision 用于整数数组:
BilateralFilter[{3, 4, 4, 3, 2}, 2, 1]BilateralFilter[{3, 4, 4, 3, 2}, 2, 1, WorkingPrecision -> ∞]BilateralFilter[{1.0000000000000000000, 2.0000000000000000000, 3.0000000000000000000, 4.0000000000000000000}, 2, 1]BilateralFilter[{1.0000000000000000000, 2.0000000000000000000, 3.0000000000000000000, 4.0000000000000000000}, 2, 1, WorkingPrecision -> MachinePrecision]BilateralFilter[{a, b, c}, 1, 1]WorkingPrecision 在滤波图像时被忽略:
BilateralFilter[[image], 2, .5, WorkingPrecision -> Infinity]ImageType[%]应用 (5)
BilateralFilter[[image], 2, .2]BilateralFilter[[image], 2, .05, MaxIterations -> 10]ImageSubtract[ #, BilateralFilter[#, 4, 0.9]] & [[image]]ClusteringComponents[BilateralFilter[[image], 4, 0.3], 5]// Colorizeimg = [image];
ImageAdd[img, ImageSubtract[img, BilateralFilter[img, 5, .2]]]属性和关系 (2)
data = Table[Sign[i - 1] + RandomReal[{-.2, .2}], {i, 0, 2, 0.01}];
{ListLinePlot[data], ListLinePlot[BilateralFilter[data, 20, .5]]}MeanFilter 也可以降噪,但不保留边缘
MeanFilter[data, 20]//ListLinePlot高斯分布均值较大的情况下,双边滤波给出的结果与高斯滤波的结果类似:
{BilateralFilter[[image], 2, 2], GaussianFilter[[image], 5]}文本
Wolfram Research (2010),BilateralFilter,Wolfram 语言函数,https://reference.wolfram.com/language/ref/BilateralFilter.html (更新于 2016 年).
CMS
Wolfram 语言. 2010. "BilateralFilter." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2016. https://reference.wolfram.com/language/ref/BilateralFilter.html.
APA
Wolfram 语言. (2010). BilateralFilter. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/BilateralFilter.html 年
BibTeX
@misc{reference.wolfram_2026_bilateralfilter, author="Wolfram Research", title="{BilateralFilter}", year="2016", howpublished="\url{https://reference.wolfram.com/language/ref/BilateralFilter.html}", note=[Accessed: 13-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_bilateralfilter, organization={Wolfram Research}, title={BilateralFilter}, year={2016}, url={https://reference.wolfram.com/language/ref/BilateralFilter.html}, note=[Accessed: 13-August-2026]}