图像处理(一):平滑滤波

article/2025/8/24 13:42:34

平滑处理,有时也称模糊处理,是图像处理领域最常用的操作。平滑的目的主要是用来去除噪声。通常平滑操作是通过卷积操作(注:实际上是相关操作,后面的叙述对这两个操作不加区分)完成。下面介绍几种常用的平滑滤波操作。

均值滤波

  • 均值滤波是最简单的一种滤波操作,每个被滤波像素通过它邻近像素均值计算得到。

  • 均值滤波的kernel如下:

     

     

高斯滤波

  • 高斯滤波的核是通过高斯函数构建,越靠近中心的像素的值越大,这也反映了图像空域间关系,越邻近的像素相关性越强。

  • 二维高斯函数如下:

     

     

中值滤波

  • 以kernel里像素的中值作为被滤波后像素的值。

  • 中值滤波法是一种非线性平滑技术。

  • 中值滤波法对消除椒盐噪音非常有效。

双边滤波

  • 上面的滤波方法在平滑图像时不仅会平滑噪声,往往还会模糊图像边缘。这是由于它们构造kernel时只用了空间位置信息。

  • 双边滤波构造kernel不仅使用空间位置信息,还会使用颜色信息。

在opencv里提供了各种滤波器的调用接口,代码如下:

#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
​
int main()
{namedWindow("Smoothing Demo", WINDOW_AUTOSIZE);Mat src = imread("G:\\opencvDemo\\lena.jpg");Mat blurImg;Mat gaussianImg;Mat medianImg;Mat bilteralImg;Mat boxImg;Mat filter2DImg;
​blur(src, blurImg, Size(5, 5));boxFilter(src, boxImg, -1, Size(5, 5), Point(-1, -1), true);GaussianBlur(src, gaussianImg, Size(5, 5),0,0);medianBlur(src, medianImg, 5);bilateralFilter(src, bilteralImg, 5, 10, 2.5);Mat kernal = Mat::ones(Size(5, 5), CV_8UC1);filter2D(src, filter2DImg, -1, kernal);//imshow("Smoothing Demo", bilteralImg);imwrite("blurImg55.jpg", blurImg);imwrite("boxImg55.jpg", boxImg);imwrite("gaussianImg55.jpg", gaussianImg);imwrite("medianImg55.jpg", medianImg);imwrite("bilteralImg55.jpg", bilteralImg);imwrite("filter2DImg55.jpg", filter2DImg);//waitKey(0);
​return 0;
}

实验效果:

原始图像lena.jpg如下:

 

均值滤波:

滤波函数:blur()

​
void cv::blur   (   InputArray  src,OutputArray     dst,Size    ksize,Point   anchor = Point(-1,-1),int     borderType = BORDER_DEFAULT )   src   :  输入图像dst   :  输出图像ksize :  kernel尺寸anchor:  被滤波像素在kernel中的位置,默认Point(-1,-1)表示在kernel中心borderType:图像边界填充方式

下图分别是kernel大小为3x3和5x5时的实验效果:

 

 

高斯滤波:

滤波函数:GaussianBlur()

void cv::GaussianBlur   (   InputArray  src,OutputArray     dst,Size    ksize,double  sigmaX,double  sigmaY = 0,int     borderType = BORDER_DEFAULT )   src   :  输入图像dst   :  输出图像ksize :  kernel尺寸sigmaX:  Gaussian kernel在X方向的标准差sigmaY:  Gaussian kernel在Y方向的标准差,如果sigmaY=0则sigmaY会被设为和sigmaX相等。如果sigmaX和sigmaY都为0,则它们会根据ksize.width和ksize.height计算得出。borderType:图像边界填充方式

下图分别是kernel大小为3x3和5x5时的实验效果:

 

 

中值滤波:

滤波函数:medianBlur()

void cv::medianBlur (   InputArray  src,OutputArray     dst,int     ksize )   src   :  输入图像dst   :  输出图像ksize :  kernel尺寸

下图分别是kernel大小为3x3和5x5时的实验效果:

 

 

双边滤波:

函数:bilateralFilter()

void cv::bilateralFilter    (   InputArray  src,OutputArray     dst,int     d,double  sigmaColor,double  sigmaSpace,int     borderType = BORDER_DEFAULT )   src   :  输入图像dst   :  输出图像d     :  计算滤波时邻域像素的直径,如果非正数将通过sigmaSpace计算得到。sigmaColor:颜色空间的影响因子。sigmaSpace:空域的影响因子。borderType:图像边界填充方式

下图分别是kernel大小为3x3和5x5时的实验效果:

 

 

补充:

下面补充两个滤波函数:

boxFilter()和 filter2D()

1、boxFilter()

void cv::boxFilter  (   InputArray  src,OutputArray     dst,int     ddepth,Size    ksize,Point   anchor = Point(-1,-1),bool    normalize = true,int     borderType = BORDER_DEFAULT )   normalize = true时,计算结果和均值滤波相同normalize = false时,滤波后像素值为kernel内像素值的和

kernel如下:

 

下图是normalize = false,ksize为3x3时的结果:

 

2、filter2D()

void cv::filter2D   (   InputArray  src,OutputArray     dst,int     ddepth,InputArray  kernel,Point   anchor = Point(-1,-1),double  delta = 0,int     borderType = BORDER_DEFAULT )   kernel是要使用的滤波核,可以自己根据需求随意构建

下图构建了一个3x3全1的滤波核,可以验证结果与上图相同:

 

小结

以上便是平滑滤波的基本内容,关键在于滤波核的选择。

欢迎留言交流。

 


http://chatgpt.dhexx.cn/article/owiopC1f.shtml

相关文章

MATLAB自适应平滑滤波

% 自适应平滑滤波 clc,clear,close all % 清理命令区、清理工作区、关闭显示图形 warning off % 消除警告 feature jit off % 加速代码运行 [filename ,pathname]… uigetfile({‘.bmp’;.jpg’;},‘选择图片’); % 选择图片路径 str [pathname filename]; % 合成路径文件名 i…

平滑滤波器总结

平滑滤波器总结 本质&#xff1a;对像素点领域的像素值施于某种算法&#xff0c;以其结果替代锚点处对应的像素值。 平滑&#xff08;模糊&#xff09;目的&#xff1a;减少噪声和伪影。 opencv一共提供了5种平滑操作。 1.均值滤波器 算法原理&#xff1a;以邻域像素点的平均…

数字图像处理:线性和非线性滤波的平滑空间滤波器(Smoothing Spatial Filters)

引言 本系列文章记录老猿自学冈萨雷斯《数字图像处理》的感悟和总结&#xff0c;不过估计更新会比较慢&#xff0c;白天要工作&#xff0c;都是晚上抽空学习&#xff0c;学习完一章再回头总结&#xff0c;想学的朋友可以自己下载英文原版&#xff08;目前到第四版&#xff09;…

空间滤波(平滑滤波)

本实验所采用的空间滤波方法是平滑滤波&#xff0c;下图是两个3*3平滑&#xff08;均值&#xff09;滤波器模板&#xff0c;对图像进行平滑处理。 平滑线性空间滤波器的输出响应是包含在滤波器模板邻域内的像素的简单平均值。平滑滤波器多用于模糊处理和降低噪声。 第一个滤波…

群晖Synology Drive同步规则中过滤指定文件夹

学习Vue的过程中发现电脑上的Synology Drive同步文件时间变得超级长&#xff0c;检查发现是项目文件夹里的 node_modules 文件夹里文件非常多导致的&#xff0c;每个项目都有上万个文件&#xff0c;但是 Synology Drive 的文件过滤器并不能添加文件夹名 解决方案 进入这个路径…

Synology Drive 使用了哪些端口?

Drive的浏览器页面使用的是 5000/5001 DSM 端口 &#xff0c;而同步使用的是 6690 端口。请您确认是否有将您的自定义端口转发到 6690 上。 DSM 服务使用的网络端口检查 TCP 端口的状态

修复群晖Synology Drive Client右键菜单缺失

1. 关闭Drive程序。 2. 进入控制面板 3. 选择用户账户 4. 选择用户账户 5. 更改用户帐户控制设置 6. 将滑块拨动到下图所示 7. 然后重启电脑。 8. 重启完毕后&#xff0c;关闭Drive程序和杀毒软件&#xff0c; 在文件资源管理器管理器地址栏中输入 %localappdata%\Synology…

群晖NAS同步阿里云盘

近期阿里云盘还是比较香的&#xff0c;不说别的&#xff0c;就“容量大、不限速”两个优点&#xff0c;已经足够比某度盘好多了。通过在群晖Docker里安装容器&#xff0c;可以让阿里云盘变成一台带webdav协议的文件服务器&#xff0c;群晖通过Cloud Sync套件实时地把文件同步到…

玩转群晖NAS套件系列二:synology Drive的安装使用保姆级教程!

本章介绍&#xff1a; 上一章节我们讲解《玩转群晖NAS套件系列一&#xff1a;cloud sync套件的安装与使用保姆级教程&#xff01;》&#xff0c;此教程堪称史上手把手的保姆教程&#xff0c;受到广大网友的一致好评&#xff0c; 今天在这里介绍synology Drive&#xff0c;一款非…

群晖Cloud Station Serve/Drive登陆失败 解决方法

群晖Cloud Station Serve/Drive登陆失败 解决方法 内网登陆正常&#xff0c;外网登陆显示“连接失败。请检查您的网络设置并再设置一次。” 出现这种问题一般是端口没有映射导致&#xff0c;登陆路由器映射Cloud Station Serve插件的端口号6690&#xff0c;测试联机&#xff…

黑群晖drive套件的使用教程

黑群晖同步套件 前段时间心血来潮&#xff0c;组建了黑群晖。这个东西是早有耳闻&#xff0c;说的是文件管理的好东西。我组建本意是想作为一个云端存储个人文件的一个东西。但是要实现这个小小的目的&#xff0c;免不了一番折腾。 1、安装黑群晖 这个黑群晖是我花了90元在水…

群晖间备份Synology Drive ShareSync、Cloud Sync对比

两个群晖间的同步&#xff0c;目前有2种方式&#xff0c;Synology Drive ShareSync 和 CloudSync 。根据群晖的定位&#xff0c;Synology Drive ShareSync主要用于双群晖间的同步&#xff0c;而 CloudSync 主要用于群晖与各大网盘之间的同步。 Synology Drive ShareSync 的同步…

[NAS] Synology (群晖) DSM同步数据到阿里云盘

简介 群晖NAS通过webDAV同步阿里云盘的一些方法会因为某些开源项目的开发者放弃维护而失效&#xff0c;这里介绍一个最新同步到阿里云盘的方法 方法 / 步骤 一: 容器安装与配置 点击“注册表”&#xff0c;搜索aliyundrive&#xff0c;找到“messense/aliyundrive-webdav”…

群晖读取旧硬盘

无需格式化 解决文件系统 不支持 通过将旧硬盘挂载成为usb设备 1、进入系统后台 1.1开启群晖ssh功能 1.2 ssh连接到后台的liux系统 通过远程软件 我这边使用的是 mobaxterm 登录到群晖后台 在新页面中输入密码 1.2 切换为root用户 输入命令 sudo -i 回车后输入登录ssh的…

手把手教你创建群晖nas「共享文件夹」,从此告别 U 盘和低效传输

现如今&#xff0c;线上办公已经成为形势所趋&#xff0c;如何高效协作也成了职场人共同追求的目标&#x1f4c1; 为了便于线上的文件管理与分发&#xff0c;我们可以在群晖nas上创建共享文件夹。将成员邀请到共享文件夹内&#xff0c;各成员可上传文件到在线文件夹中&#xff…

群晖挂载Unraid NFS文件夹

最近将黑群晖资料转移到了Unraid上&#xff0c;但群晖的Drive和Photo等套件还是比较好用。为了保持同步&#xff0c;计划在群晖上挂载Unraid的NFS共享文件夹。国内的教程基本上是教如何在Unraid挂载群晖的共享文件夹&#xff0c;查找相关页面后得到解决方法如下&#xff1a; Un…

synology群晖存储手机drive上传文件

1.电脑登录synology存储&#xff0c;选择桌面的套件中心 2.在搜索栏中输入"drive server",选择安装套件 synology Drive Server 3.手机上下载synology drive 这个应用&#xff0c;下载成功后出现如下页面 第一行是局域网&#xff0c;输入IP&#xff1b;外网和该存…

【群晖nas】raidrive 极简教程

1.群晖套件重心下载并配置 webDav server 2.raidrive连接群晖&#xff0c;本地化使用 网盘下载 链接&#xff1a;https://pan.baidu.com/s/1eP9zBjlPjmL2-0MlWUlS3A 提取码&#xff1a;7890 官网下载 레이드라이브 (naver.com) 蓝色按钮一直点&#xff0c;然后就下载了 …

【群晖Drive私有云】利用cpolar内网穿透实现公网远程群晖Drive

目录 前言 1.群晖Synology Drive套件的安装 1.1 安装Synology Drive套件 1.2 设置Synology Drive套件 1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive 2.1 Cpolar云端设置 2.2 Cpolar本地设置 2.3 测试和使用 3. 结语 前言 群晖作为专业的数据…

群晖NAS软件之:Drive你会用吗?带你装逼!

原文网址&#xff1a;https://www.toutiao.com/a6664790105338675715/ 原作者&#xff1a;sabayonlinux 我的NAS我的地盘 篇六&#xff1a;群晖NAS软件介绍与应用之Drive篇 安装Drive的理由 Drive是一款团队协作的多平台能共存储并共享的协同办公套件&#xff0c;包括WIndow…