图像滤波算法总结[通俗易懂]

图像滤波算法总结[通俗易懂]该篇主要是对图像滤波算法一个整理,主要参考的大神的博客:https://blog.csdn.net/qq_15606489/article/details/527554441:图像滤波既可以在实域进行,也可以在频域进行。图像滤波可以更改或者增强图像。通过滤波,可以强调一些特征或者去除图像中一些不需要的部分。滤波是一个邻域操作算子,利用给定像素周围的像素的值决定此像素的最终的输出值。图像…

大家好,又见面了,我是你们的朋友全栈君。

该篇主要是对图像滤波算法一个整理,主要参考的大神的博客:
https://blog.csdn.net/qq_15606489/article/details/52755444
1:图像滤波既可以在实域进行,也可以在频域进行。图像滤波可以更改或者增强图像。通过滤波,可以强调一些特征或者去除图像中一些不需要的部分。滤波是一个邻域操作算子,利用给定像素周围的像素的值决定此像素的最终的输出值。
图像滤波可以通过公式:
O(i,j)=m,nI(i+m,j+n)K(m,n) O ( i , j ) = ∑ m , n I ( i + m , j + n ) ∗ K ( m , n )
其中K为滤波器,在很多文献中也称之为核(kernel)。常见的应用包括去噪、图像增强、检测边缘、检测角点、模板匹配等。

2:均值滤波
用其像素点周围像素的平均值代替元像素值,在滤除噪声的同时也会滤掉图像的边缘信息。在OpenCV中,可以使用boxFilter和blur函数进行均值滤波。均值滤波的核为:
这里写图片描述

3:中值滤波
中值滤波用测试像素周围邻域像素集中的中值代替原像素。中值滤波去除椒盐噪声和斑块噪声时,效果非常明显。在OpenCV中,可以使用函数medianBlur进行操作。

4:高斯滤波
这里参考一位大神的博客写的很细很好明白:https://blog.csdn.net/nima1994/article/details/79776802
总结一下:

  • 像均值滤波,是简单的取平均值,模板系数都是1。而图像上的像素实际上是坐标离散但是值却连续的,因为越靠近的点关系越密切,越远离的点关系越疏远。因此,加权平均更合理,距离越近的点权重越大,距离越远的点权重越小。
  • 既然是依据距离来加权平均,那么很容易想到高斯函数 f(x)=1σ2πe(xμ)22σ2 f ( x ) = 1 σ 2 π e − ( x − μ ) 2 2 σ 2 ,如图所示:
    这里写图片描述
    从高斯函数来看,离原点距离越近,得到的权重越高,越远离原点,得到的权重越小。
    上边是一维的高斯函数,当中心点为原地时, x x 的均值
    μ=0


    μ


    =


    0

    ,此时 f(x)=1σ2πex22σ2 f ( x ) = 1 σ 2 π e − x 2 2 σ 2
    由于图像是二维矩阵,则采用二维高斯函数 f(x,y)=12πσ2e(x2+y2)2σ2 f ( x , y ) = 1 2 π σ 2 e − ( x 2 + y 2 ) 2 σ 2 有了这个函数就可以计算滤波模板中每个点的权重了。
    权重矩阵:
    假定中心点是(0,0),那么距离它最近的8个点的坐标如下:
    这里写图片描述
    更远的点以此类推。
    将这模板中的坐标x,y代入到二维高斯函数中,假定 μ=0 μ = 0 σ σ 为1.5,则模糊半径为1的权重矩阵如下:
    这里写图片描述
    这9个点的权重总和等于0.4787147,如果只计算这9个点的加权平均,还必须让它们的权重之和等于1,因此上面9个值还要分别除以0.4787147,得到最终的权重矩阵。
    这里写图片描述
    计算高斯滤波的结果
    假设现在3*3高斯滤波器覆盖的图像的像素灰度值为:
    这里写图片描述
    每个点与上边计算得到的9个权重值相乘:
    这里写图片描述
    得到:
    这里写图片描述
    将这9个值加起来,就是中心点的高斯模糊的值。

对所有点重复这个过程,就得到了高斯模糊后的图像。如果原图是彩色图片,可以对RGB三个通道分别做高斯模糊。

边界处理
如果一个点处于边界,周边没有足够的点,怎么办?

一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。

5:双边滤波
参考了大神的博客:http://www.360doc.com/content/17/0306/14/28838452_634420847.shtml
高斯滤波只考虑了周边点与中心点的空间距离来计算得到权重。首先,对于图像滤波来说,一个通常的intuition是:(自然)图像在空间中变化缓慢,因此相邻的像素点会更相近。但是这个假设在图像的边缘处变得不成立。如果在边缘处也用这种思路来进行滤波的话,即认为相邻相近,则得到的结果必然会模糊掉边缘,这是不合理的,因此考虑再利用像素点的值的大小进行补充,因为边缘两侧的点的像素值差别很大,因此会使得其加权的时候权重具有很大的差别。可以理解成先根据像素值对要用来进行滤波的邻域做一个分割或分类,再给该点所属的类别相对较高的权重,然后进行邻域加权求和,得到最终结果。
双边滤波与高斯滤波相比,对于图像的边缘信息能够更好的保留,其原理为一个与空间距离相关的高斯核函数与一个灰度距离相关的高斯函数相乘。
空间距离: e(xixc)2+(yiyc)22σ2 e − ( x i − x c ) 2 + ( y i − y c ) 2 2 σ 2 ,其中 (xc,yc) ( x c , y c ) 是中心点坐标,比如为(0,0), (xi,yi) ( x i , y i ) 为当前点的坐标, σ σ 为空间域标准差。
灰度距离: e(gray(xi,yi)gray(xc,yc))22σ2 e − ( g r a y ( x i , y i ) − g r a y ( x c , y c ) ) 2 2 σ 2 ,其中 gray(xi,yi) g r a y ( x i , y i ) 是当前像素点的灰度值, gray(xc,yc) g r a y ( x c , y c ) 是模板中覆盖图片区域的中心点像素的灰度值,也就是(0,0)处的灰度值, σ σ 为值域标准差。
对于高斯滤波,仅用空间距离的权值系数核与图像卷积后确定中心点的灰度值。即认为离中心点越近,其权值系数越大。
双边滤波中加入了对灰度信息的权重,即在领域内,灰度值越接近中心点灰度值的点的权值更大,灰度值相差大的点权重越小。其权重大小则由值域高斯函数确定。
两者权重系数相乘,得到最终的卷积模板,由于双边滤波需要每个中心点领域的灰度信息来确定其系数,所以速度比一般的滤波慢得多,而且计算量增长速度为核的大小的平方。
这里写图片描述
参数的选择:空间域 σ σ 的选取,和值域 σ σ 的选取。
结论: σ σ 越大,边缘越模糊; σ σ 越小,边缘越清晰。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132377.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【11】进大厂必须掌握的面试题-持续集成面试

    Q1。持续集成是什么意思? 我将建议您通过对持续集成(CI)进行小的定义来开始此答案。这是一种开发实践,要求开发人员每天多次将代码集成到共享存储库中。然后,每个签入均由自动构建进行…

    2020年10月20日
  • class文件和dex文件「建议收藏」

    class文件和dex文件「建议收藏」Class文件1、什么是class文件能够被JVM识别,加载并执行的文件格式。2、class文件的生成![这里写图片描述](https://img-blog.csdn.net/20180817160829200?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RldmVsb3BBbmRyb2lk/font/5a6L5L2T/f…

  • RTX3060安装pytorch

    RTX3060安装pytorchRTX3060安装pytorch1安装anaconda2查看本机显卡支持的cuda最高版本(2)根据pytorch版本选择要安装的CUDA(3)下载安装CUDA(4)下载cudNN(5)下载安装刚刚选择的pytorch版本前不久刚刚入手了一台新电脑,显卡为RTX3060,在安装环境的时候,踩了不少坑,现在将经验总结如下:1安装anaconda这个可以看这个教程:https://blog.csdn.net/in546/article/details/117400839需要注意的是,要记得添加到环

  • drupal安装配置错误

    drupal安装配置错误安装配置错误#########################################################################1、403错误 查看errorlog发现:AH01630:clientdeniedbyserverconfiguration:F:/phpweb/drupal——————————-…

  • Unity+Android GET和POST方式的简单实现API请求(人像动漫化)

    Unity+Android GET和POST方式的简单实现API请求(人像动漫化)Unity与Android的简单交互,Unity打开Android相册并调用

  • php网页运行不出来_phpstudy启动后就停止

    php网页运行不出来_phpstudy启动后就停止phpstudy中的nginx无法启动,报错:10049最近使用phpstudy的nginx+php环境编写laravel项目,老是报错,nginx无法启动,闪了一下,又变成了红色。下面整理一下解决方案:1.查看nginx的配置文件,一般是80端口,我这里根据不同项目修改了,所以我的是8093:2.win+R键,输入cmd,输入端口查询命令netstat-aon|findstr80,查看响应端口是否被占用,这里举例80端口;3.可以看到占用80端口程序的pid是3364,然后输入命令task

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号