双边滤波器 保边滤波器 Bilateral Filters

2023-10-13 20:08

本文主要是介绍双边滤波器 保边滤波器 Bilateral Filters,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一. 背景

  1. 高斯滤波器根据邻域像素 (xi,yi) 和中心点像素 (x,y) 的空间距离作为权值. 为了方便描述, 假设中心点位于原点处 (0,0) , 一维高斯滤波器和二维高斯滤波器分别为:
    G(x,y)=12πσex22σ2
    G(x,y)=12πσ2ex2+y22σ2
  2. 实际使用中, 只计算指数项. 所有值计算出来后, 归一化使得算子和为1. 也可以使用查表法求算子值.
  3. 高斯滤波器去除背景噪声的同时会模糊边缘. σ 过大边缘模糊, σ 过小起不到去噪效果.
  4. 高斯滤波器只使用了空间距离作为权值, 其他的如灰度距离也可以作为权值. 后者正是被双边滤波器利用来实现保边功能.
  5. 双边滤波器使用空间距离算子(高斯)和灰度距离算子点乘的方式来生成滤波器算子. 显然不同像素的灰度距离算子是不同的.
    B(x,y)=12πσ2ex2+y22σ2ged(x,y)22σ2r
    σg 是高斯算子的标准差, σr 是灰度距离算子的标准差.
  6. 双边滤波是非线性的. 不需要迭代计算.

二. 2维双边滤波器

Matlab Function:

function [ ImgOut ] = BilateralFilter2D( ImgIn, sigma_g, sigma_r, kernel_half_size )
% BILATERALFILTER2D 灰度图双边滤波
% ImgIn, 输入图像,灰度图
% sigma_g, 高斯算子标准差
% sigma_r, 灰度距离算子标准差
% kernel_half_size, 双边算子半长,算子size为2*kernel_half_size+1
%   Detailed explanation goes here
n = kernel_half_size;
kernel_g = fspecial('gaussian',[2*n+1,2*n+1],sigma_g);
ImgIn = padarray(ImgIn,[n,n],'symmetric','both');
ImgOut = zeros(size(ImgIn));
for i = n+1:size(ImgIn,1)-nfor j = n+1:size(ImgIn,2)-nkernel_r = exp(-(ImgIn(i-n:i+n,j-n:j+n)-ImgIn(i,j)).^2/2/sigma_r^2);kernel_r = kernel_r/sum(sum(kernel_r));kernel = kernel_g.*kernel_r;kernel = kernel/sum(sum(kernel));ImgOut(i,j) = sum(sum(kernel.*ImgIn(i-n:i+n,j-n:j+n)));end
end
ImgOut = ImgOut(n+1:end-n,n+1:end-n);
end

测试Script:

clear;clc;close all;
ImgIn = imread('E:\图像处理\5.冈萨雷斯图片库\DIP3E_Original_Images_CH06\Fig0635(middle_row_left_chalk ).tif');
ImgIn = rgb2gray(ImgIn);
ImgOut = BilateralFilter2D(single(ImgIn),5,5,14);
figure;
subplot(121);imshow(ImgIn,[]);title('原图');
subplot(122);imshow(ImgOut,[]);title('双边滤波');

输出:
这里写图片描述

这里写图片描述
很细的纹理被滤掉, 比较明显的边缘都保留了下来.

三. 双边滤波的缺点

  1. 去噪能力远逊于高斯滤波器. σ 和算子直径要比较大才可以;
  2. 每个像素都要计算滤波器算子, 计算速度慢.

四. 使用Look Up Table 方法加速滤波过程

function [ ImgOut ] = BilateralFilter2D_U8_C1R( ImgIn, sigma_g, sigma_r, kernel_half_size )
%BILATERALFILTER2D 灰度图双边滤波
% ImgIn, 输入图像,灰度图
% sigma_g, 高斯算子标准差
% sigma_r, 灰度距离算子标准差
% kernel_half_size, 双边算子半长,算子size为2*kernel_half_size+1
n = kernel_half_size;
kernel_g = fspecial('gaussian',[2*n+1,2*n+1],sigma_g);
[X,Y] = meshgrid(0:255,0:255);
kernel_LUT = exp(-(X-Y).^2/2/sigma_r^2);
ImgIn = padarray(ImgIn,[n,n],'symmetric','both');
ImgOut = zeros(size(ImgIn));
for i = n+1:size(ImgIn,1)-nfor j = n+1:size(ImgIn,2)-n% kernel_r = exp(-(ImgIn(i-n:i+n,j-n:j+n)-ImgIn(i,j)).^2/2/sigma_r^2);kernel_idx = ImgIn(i-n:i+n,j-n:j+n)+(ImgIn(i,j)-1)*256;kernel_r = kernel_LUT(kernel_idx);% kernel_r = kernel_LUT(ImgIn(i-n:i+n,j-n:j+n),ImgIn(i,j)*ones(2*n+1,2*n+1));kernel_r = kernel_r/sum(sum(kernel_r));kernel = kernel_g.*kernel_r;kernel = kernel/sum(sum(kernel));ImgOut(i,j) = sum(sum(kernel.*ImgIn(i-n:i+n,j-n:j+n)));end
end
ImgOut = ImgOut(n+1:end-n,n+1:end-n);
end

五. 其他优化

  1. http://people.csail.mit.edu/sparis/bf/
  2. http://people.csail.mit.edu/jiawen/#code

这篇关于双边滤波器 保边滤波器 Bilateral Filters的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/205555

相关文章

Open3D 基于法线的双边滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 输入参数: 输出参数: 参数影响: 2.2完整代码 三、实现效果 3.1原始点云 3.2滤波后点云 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述         基于法线的双边

6.4双边滤波

目录 实验原理 示例代码1 运行结果1 实验代码2 运行结果2 实验原理 双边滤波(Bilateral Filtering)是一种非线性滤波技术,用于图像处理中去除噪声,同时保留边缘和细节。这种滤波器结合了空间邻近性和像素值相似性的双重加权,从而能够在去噪(平滑图像)的同时保留图像的边缘细节。双边滤波器能够在的同时,保持边缘清晰,因此非常适合用于去除噪声和保持图像特征。在Op

通信工程学习:什么是SSB单边带调制、VSB残留边带调制、DSB抑制载波双边带调制

SSB单边带调制、VSB残留边带调制、DSB抑制载波双边带调制        SSB单边带调制、VSB残留边带调制、DSB抑制载波双边带调制是三种不同的调制方式,它们在通信系统中各有其独特的应用和特点。以下是对这三种调制方式的详细解释: 一、SSB单边带调制 1、SSB单边带调制的定义:        单边带调制(Single Sideband Modulation,SSB)是

【MATLAB】FIR滤波器的MATLAB实现

FIR滤波器的MATLAB实现 FIR滤波器的设计fir1函数fir2函数 与IIR滤波器相比,FIR滤波器既有其优势也有其局限性。FIR滤波器的主要优点包括: 精确的线性相位响应;永远保持稳定性;设计方法通常是线性的;在硬件实现中具有更高的运行效率;启动传输仅需有限的时间。 然而,FIR滤波器也存在一些显著的缺点: 为了达到与IIR滤波器相同的性能要求,FIR滤波器通常需要

波导模式分析2 用于圆TE01模式高功率传输线的大型多模波导滤波器

摘要: 一种对于大型多模波导滤波器的设计方法,其能衰减掉(deteriorate)不想要的模式而不影响所需要的工作模式,被提出来抑制用于圆TE01模式高功率传输线的受限模式谐振。为了从TE10模式中分离出不期望的模式,引入了一种形变圆波导。在波导中的本征模式通过微扰分析理论推断,并且研究了一些公共模式的传输特性。此分析显示在工作TE01模式和其他模式之间通过变形圆波导可以获得显然的模式间隔,特别

简单理解滤波器(入门经典)

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

GAMES202——作业5 实时光线追踪降噪(联合双边滤波、多帧的投影与积累、À-Trous Wavelet 加速单帧降噪)

任务         1.实现单帧降噪         2.实现多帧投影         3.实现多帧累积         Bonus:使用À-Trous Wavelet 加速单帧降噪 实现         单帧降噪         这里实现比较简单,直接根据给出的联合双边滤波核的公式就能实现          Buffer2D<Float3> Denoiser::Fil

【FPGA数字信号处理】并行FIR滤波器

​​在数字信号处理领域,FIR(Finite Impulse Response)数字滤波器是一种非常重要的工具。它具有线性相位、稳定性好等优点,被广泛应用于通信、音频处理、图像处理等领域。 今天介绍一下并行 FIR 数字滤波器的原理以及实现。 一、FIR数字滤波器原理解析 1、数字滤波器 数字滤波器是数字信号处理领域的核心组件,它们对信号进行数学处理以增强或抑制某些特性。 数字滤波器按照

MQTT: Topic Names and Topic Filters

Topic Names and Topic Filters Topic wildcards Topic Name 和 Topic Filter 的区别就是 Topic Name 不能包含通配符,而 Topic Filter 可以包含通配符。 Topic Name 标识一个具体的主题,而 Topic Filter 可以标识一个或者一组主题。 Topic level separator

均值滤波器的原理及实现

1.均值滤波器 平滑线性空间滤波器的输出是包含在滤波器模板邻域内的像素的简单平均值,也就是均值滤波器。均值滤波器也是低通滤波器,均值滤波器很容易理解,即把邻域内的平均值赋给中心元素。 均值滤波器用来降低噪声,均值滤波器的主要应用是去除图像中的不相关细节,不相关是指与滤波器的模板相比较小的像素区域。模糊图片以便得到感兴趣物体的粗略描述,因此那些较小的物体的灰度就会与背景混合在一起,较大的物体则变