视频剪辑软件 Linux软件安装 高阶函数 自承式光缆 html forms checkbox arduino architecture datagrid vue自定义组件 管理后台框架 查看kafka消费情况 java解析pdf flutter项目案例 mysql数据库 python中文手册 python写文件 python图形化编程 python免费教程 python插件 java方法的重载 java类和对象 java环境包 java的特性 python教程视频 python教程下载 信息系统项目管理师教程 js四舍五入 销售单打印软件 stata软件 零基础学python winhex使用教程 extjs视频教程 微信彩色字 英雄联盟崩溃 unity3d中文版 小米8游戏模式 苹果手机不弹出信任 求字符串长度
当前位置: 首页 > 学习教程  > 编程语言

图像处理之高斯滤波

2021/1/28 23:31:35 文章标签:

1. 高斯函数与高斯滤波 一维高斯函数我们都熟悉,形式如下: G(x)12πσexp⁡(−x22σ2)G(x) \frac{1}{\sqrt{2\pi}\sigma} \exp(-\frac{x^2}{2\sigma^2})G(x)2π​σ1​exp(−2σ2x2​) 计算机视觉中,高斯滤波使用的高斯核为x和y两个一维高…

1. 高斯函数与高斯滤波

一维高斯函数我们都熟悉,形式如下:

G ( x ) = 1 2 π σ exp ⁡ ( − x 2 2 σ 2 ) G(x) = \frac{1}{\sqrt{2\pi}\sigma} \exp(-\frac{x^2}{2\sigma^2}) G(x)=2π σ1exp(2σ2x2)

计算机视觉中,高斯滤波使用的高斯核为x和y两个一维高斯的乘积,两个维度上的标准差σ通常相同,形式如下:
G ( x , y ) = 1 2 π σ 2 exp ⁡ ( − x 2 + y 2 2 σ 2 ) G(x, y) = \frac{1}{2\pi\sigma^2}\exp(-\frac{x^2+y^2}{2\sigma^2}) G(x,y)=2πσ21exp(2σ2x2+y2)

高斯滤波(平滑),即用某一尺寸的二维高斯核与图像进行卷积。高斯核是对连续高斯函数的离散近似,通常对高斯曲面进行离散采样和归一化得出,这里,归一化指的是卷积核所有元素之和为1,下图为标准高斯和σ=1.4大小为5×5的高斯核。
在这里插入图片描述

2. 标准差

μ = 0 μ=0 μ=0时,唯一需要控制的参数就是标准差 σ σ σ,多少合适呢?σ的确定十分依赖于问题背景,需要具体问题具体分析。但理解σ的作用,可以指导调整的方向。

高斯核可以看成是与中心距离负相关的权重。平滑时,调整σ实际是在调整周围像素对当前像素的影响程度,调大σ即提高了远处像素对中心像素的影响程度,滤波结果也就越平滑。高斯曲线随σ变化的曲线如下:
在这里插入图片描述
从频域角度看,高斯函数的傅立叶变换仍是高斯,两者标准差间的关系如下:
σ x = 1 2 π σ w \sigma_x = \frac{1}{2\pi \sigma_w} σx=2πσw1
其中, σ x σ_x σx为空域高斯的标准差, σ w σ_w σw为对应频域高斯的标准差,在空域进行高斯平滑相当于频域低通滤波, σ x σ_x σx越大, σ w σ_w σw越小,频域高斯越集中,高频成分削弱得越多,图像越平滑。

从低通滤波角度考虑,可以对图像做傅立叶变换进行频谱分析,叠加上频域高斯并调整查看效果,找到适合的 σ w σ_w σw,再推算出空域高斯所需的 σ x σ_x σx

3. 窗口大小

标准差 σ σ σ确定后,接下来需要确定窗口大小。上面讲了高斯核是对连续高斯的离散近似,窗口越大自然近似越好,但高斯函数是钟形曲线,距离中心越远数值越小,足够远处可以忽略不计,但多远算远呢?

钟型曲线在区间 ( μ − σ , μ + σ ) (μ−σ,μ+σ) (μσ,μ+σ)范围内的面积占曲线下总面积的68%, ( μ − 2 σ , μ + 2 σ ) (μ−2σ,μ+2σ) (μ2σ,μ+2σ)范围占95%, ( μ − 3 σ , μ + 3 σ ) (μ−3σ,μ+3σ) (μ3σ,μ+3σ)范围占99.7%,一般 3 σ 3σ 3σ外的数值已接近于0,可忽略,半径为 3 σ 3σ 3σ即窗口大小为 6 σ × 6 σ 6σ×6σ 6σ×6σ即可,通常取最近的奇数。上述3个范围在一维和二维高斯中示意如下:
在这里插入图片描述

4. OpenCV中标准差与窗口大小的换算

在OpenCV函数createGaussianFilter中,若未指定窗口大小,通过σ推算窗口大小方式如下,半径为σ的3或4倍:
在这里插入图片描述
若指定了窗口大小,但未指定σ大小,则通过窗口大小推算σ的方式如下:
σ = 0.3 × ( ( k s i z e − 1 ) × 0.5 − 1 ) + 0.8 \sigma = 0.3\times((ksize - 1)\times0.5 - 1) + 0.8 σ=0.3×((ksize1)×0.51)+0.8

具体地,在函数getGaussianKernel中,当ksize不大于7时,直接从内部的small_gaussian_tab取对应大小的高斯核,若大于7,则使用上式计算出σ然后套用高斯公式,最后再归一化。
在这里插入图片描述
在实际使用时,为了高效,卷积核通常取[0,255]范围内的整数(1个Byte),因此高斯核中心最大取值为255时,窗口尺寸的选取只需让高斯核边界值刚好大于0即可。令高斯核尺寸为n,半径为r,r=n−12,高斯核x轴上边界(r,0)处与中心(0,0)处数值之比如下:

G ( r , 0 ) G ( 0 , 0 ) = exp ⁡ ( − r 2 2 × ( 0.3 ( r − 1 ) + 0.8 ) 2 ) \frac{G(r, 0)}{G(0, 0)} = \exp(-\frac{r^2}{2 \times (0.3(r-1)+0.8)^2}) G(0,0)G(r,0)=exp(2×(0.3(r1)+0.8)2r2)

当r足够大,其极限为 exp ⁡ ( − 1 2 × 0. 3 2 ) = 0.00386592 \exp(-\frac{1}{2\times0.3^2})=0.00386592 exp(2×0.321)=0.00386592,若中心值为255,则边界值为255∗0.00386592=0.9858096≈1,是合适的。但公式是如何设计出来的还不清楚,这里只是校验了其性质。

5. 最后


本文链接: http://www.dtmao.cc/news_show_650233.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?