10.图像高斯滤波的原理与FPGA实现思路

1.概念

高斯分布
图像滤波之高斯滤波介绍
图像处理算法|高斯滤波
  高斯滤波(Gaussian filter)包含很多种,包括低通、高通、带通等,在图像上说的高斯滤波通常是指的高斯模糊(Gaussian Blur),是一种高斯低通滤波。通常这个算法也可以用来模糊图像,提供模糊滤镜。也可以用来过滤自然界的高斯白噪声。
  高斯分布(正态分布)是一个常见的连续概率分布,正态分布的数学期望值或期望值 μ \mu μ等于位置参数,决定了分布的位置,其方差 σ 2 \sigma^2 σ2的开平方或者标准差 σ \sigma σ等于尺度参数,决定了分布的幅度。正态分布的概率密度函数曲线呈钟形,所以又被称为钟形曲线。我们常说的标准正态分布是位置参数 μ = 0 , 方差 σ 2 = 1 \mu=0,方差\sigma^2=1 μ=0,方差σ2=1的正态分布
  若随机变量 X X X服从一个位置参数为 μ 、方差为 σ 2 \mu、方差为\sigma^2 μ、方差为σ2的正态分布,可以记为 X N ( μ , σ 2 ) X~N(\mu,\sigma^2) X N(μ,σ2),其概率密度函数为:
g ( x ) = 1 2 π σ e ( − ( x − μ ) 2 2 σ 2 ) (1) g(x)=\frac{1} {\sqrt{2\pi} \sigma }e^{(-\frac{{(x-\mu)}^{2} }{2\sigma^{2}})}\tag{1} g(x)=2π σ1e(2σ2(xμ)2)(1)
  高斯滤波器是一种根据高斯函数的形状来选择权值的线性平滑滤波器,对于抑制服从正态分布的噪声非常有效,一维零均值高斯函数为:
g ( x ) = 1 2 π σ e − x 2 2 σ 2 (2) g(x)=\frac{1} {\sqrt{2\pi} \sigma }e^{-\frac{x^{2} }{2\sigma^{2}}}\tag{2} g(x)=2π σ1e2σ2x2(2).
  其中,高斯分布参数( σ \sigma σ)决定了高斯函数的宽度,一维高斯函数的图形如下图:
在这里插入图片描述
  二维高斯高斯分布的函数为:
g ( x , y ) = 1 2 π σ 2 e − x 2 + y 2 2 σ 2 (3) g(x,y)=\frac{1}{2\pi\sigma^2}e^{\frac{-x^2+y^2}{2\sigma^2}}\tag{3} g(x,y)=2πσ21e2σ2x2+y2(3)
  二维高斯分布的图像为:
在这里插入图片描述

2.高斯滤波性质

  高斯函数具有五个重要的性质,这些性质使得它在早期图像处理中特别有用.这些性质表明,高斯平滑滤波器无论在空间域还是在频率域都是十分有效的低通滤波器,且在实际图像处理中得到了工程人员的有效使用.高斯函数具有五个十分重要的性质,它们是:
  1.二维高斯函数具有旋转对称性,即滤波器在各个方向上的平滑程度是相同的.一般来说,一幅图像的边缘方向是事先不知道的,因此,在滤波前是无法确定一个方向上比另一方向上需要更多的平滑.旋转对称性意味着高斯平滑滤波器在后续边缘检测中不会偏向任一方向.
  2.高斯函数是单值函数.这表明,高斯滤波器用像素邻域的加权均值来代替该点的像素值,而每一邻域像素点权值是随该点与中心点的距离单调增减的.这一性质是很重要的,因为边缘是一种图像局部特征,如果平滑运算对离算子中心很远的像素点仍然有很大作用,则平滑运算会使图像失真.
  3.高斯函数的傅立叶变换频谱是单瓣的.正如下面所示,这一性质是高斯函数付立叶变换等于高斯函数本身这一事实的直接推论.图像常被不希望的高频信号所污染(噪声和细纹理).而所希望的图像特征(如边缘),既含有低频分量,又含有高频分量.高斯函数付立叶变换的单瓣意味着平滑图像不会被不需要的高频信号所污染,同时保留了大部分所需信号.
  4.高斯滤波器宽度(决定着平滑程度)是由参数σ表征的,而且σ和平滑程度的关系是非常简单的.σ越大,高斯滤波器的频带就越宽,平滑程度就越好.通过调节平滑程度参数σ,可在图像特征过分模糊(过平滑)与平滑图像中由于噪声和细纹理所引起的过多的不希望突变量(欠平滑)之间取得折衷.
  5.由于高斯函数的可分离性,较大尺寸的高斯滤波器可以得以有效地实现.二维高斯函数卷积可以分两步来进行,首先将图像与一维高斯函数进行卷积,然后将卷积结果与方向垂直的相同一维高斯函数卷积.因此,二维高斯滤波的计算量随滤波模板宽度成线性增长而不是成平方增长.

3.高斯滤波的原理与实现

  高斯滤波既能用来过滤高斯噪音,也可用来做高斯模糊。
  要模糊一张图像,可以直接用均值滤波来做简单的模糊,但是这样做显然不大合理,因为图像是连续的,离卷积核中心的点关系更加密切,越远的点关系越疏远,这个时候就需要加权平均。明显的离中心点越近的像素点权重越大。而正态分布显然是一种可取的权重分配方式,又由于图像是二维的,所以需要使用二维的高斯函数。所以高斯滤波的本质是利用高斯函数来生成高斯核(高斯卷积模板)来对图像进行卷积操作。
  理论上高斯分布在所有定义域上都有非负值,这就需要一个无限大的卷积核,但是实际上,仅需要取均值的三倍标准差(即 3 σ 3\sigma 3σ)内的值,以外的部分去掉即可。
  高斯滤波最重要的就是找到高斯模板然后进行卷积,以3X3高斯模板为例,假设中心点的坐标为(0,0),根据二维高斯函数 g ( x , y ) g(x,y) g(x,y),还需要设定 σ \sigma σ的值,假定 σ = 0.8 \sigma=0.8 σ=0.8(这个值不宜过大,否则就会变成均值滤波),可以根据坐标值来算出对应的高斯模板。
  假定中心点的坐标为(0,0),那么距离它最近的八个点的坐标如下:
在这里插入图片描述
  将坐标以及设定的 σ \sigma σ带入二维高斯函数中,可以得到对应点的坐标的权重如下:
在这里插入图片描述

  为了防止高斯滤波后的图像偏亮或者偏暗,我们还需要对图像进行归一化,这九个点的权重和等于0.9125991,因此需要分别对这九个数除以0.9125991,最终得到的高斯模板为:
在这里插入图片描述
  有了高斯模板就可以对图像进行卷积了,但是在FPGA中对于小数的运算不友好,于是我们将这个3X3模板扩大了16倍,得到了近似的整数模板,卷积完成后再除以16来做定浮点数的近似计算。16倍后的模板高斯卷积模板为:
在这里插入图片描述
  3X3的高斯模板生成与定浮点数的MATLAB算法实现为:

clear;
clc;
close all;
sigma = 0.8 ;
A = exp(-(1+1)/(2*sigma*sigma))/(2*pi*sigma*sigma);
B = exp(-(1+0)/(2*sigma*sigma))/(2*pi*sigma*sigma);
C = exp(-(0+0)/(2*sigma*sigma))/(2*pi*sigma*sigma);
D = A*4 + B*4 + C;gauss_double = [A,B,A;B,C,B;A,B,A];
gauss_normal = gauss_double / sum(sum(gauss_double));
gauss_integer = floor(gauss_normal/gauss_normal(1,1));

  生成卷积模板后的FPGA实现这里就不作过多介绍了,参考前几章的3X3卷积核以及均值滤波的实现方式改变参数即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/588834.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

02 - 全加器和加法器

---- 整理自B站UP主 踌躇月光 的视频 1. 全加器 用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器。一位全加器可以处理低位进位,并输出本位加法进位。全加器比半加器多了一位进位。 1.1 实验 1:通过两个半加器设计全加器 1.…

【游戏漏洞】逆向基础之进制

本文给大家讲解我们日后逆向学习和实践过程中息息相关的一些重要基础 我们要讲解的是 例如 111在什么时候是正确的? OD,CE,IDA等工具为什么都是16进制? 计算机只认识0和1,也就2进制。 我们现实生活中常用到的是10进…

【LeetCode热题100】79. 单词搜索(回溯)

一.题目要求 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平…

Vue3+Vite Nginx部署 跨域

打包项目 webstorm打开项目之后,在Terminal执行打包命令 pnpm run build:prod 复制到Nginx 打包完成之后,生成的包在根目录dist,把dist目录拷贝到Nginx放网站目录下:\nginx-1.25.2\html\divided ,dist改名了divided 修改配置…

Runes 生态一周要览 ▣ 2024.3.25-3.31|Runes 协议更新 BTC 减半在即

Runes 生态大事摘要 1、Casey 发布了 Runes 协议文档 RUNES HAVE DOCS,Github 代码库更新到 ord 0.17.0 版本,Casey 表示符文是一个“严肃”的代币协议。 2、Casey 公布了第一个硬编码的创世符文「UNCOMMONGOODS」 3、4月7日香港沙龙|聚焦「…

1,static 关键字.Java

目录 1.概述 2.定义格式和使用 2.1 静态变量及其访问 2.2 实例变量及其访问 2.3 静态方法及其访问 2.4 实例方法及其访问 3.小结 1.概述 static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量。被static修饰后的&#xff…

小明的背包-dp_python

用户登录 动态规划的思想是自底向上,先求局部最优解然后求全局最优解。 dp[i][j]代表的是当前状态物品的数量以及背包的容量。 N, V map(int,input().split()) dp [[0 for _ in range(V1)] for _ in range(N1)]for i in range(1,N1):v, w map(int,input().split(…

算法学习17:背包问题(动态规划)

算法学习17:背包问题(动态规划) 文章目录 算法学习17:背包问题(动态规划)前言一、01背包问题:1.朴素版:(二维)2.优化版:(一维&#xf…

Qt实现Kermit协议(三)

3 实现 3.2 KermitSendFile 该模块实现了Kermit发送文件功能。 序列图如下: 3.2.1 KermitSendFile定义 class QSerialPort; class KermitSendFile : public QObject, public Kermit {Q_OBJECT public:explicit KermitSendFile(QSerialPort *serial, QObject *…

【竞技宝jjb.lol】LOL:LPL春季常规赛荣誉评选出炉!

北京时间2024年4月3日,英雄联盟LPL2024春季季后赛正在如火如荼的进行之中,常规赛阶段的荣誉评选结果在近日出炉,除三个最佳阵容之外,其中BLG战队的中单选手knight斩获春季赛常规赛MVP,而FPX战队的打野选手milkway则拿到春季赛常规赛的最佳新秀。 春季常规赛最有价值选手:BLG.kn…

HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程

HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程 📍相关篇《STM32 软件I2C方式读取AS5600磁编码器获取角度例程》 ✨stm32使用硬件I2C去读取角度数据,通过STM32CubeMX工具配置工程,读取角度数据,只需要调用一个函数&#xf…

【学习】渗透测试有哪些重要性

随着信息技术的迅猛发展,网络安全问题日益凸显。渗透测试作为网络安全防御的重要手段之一,旨在模拟黑客攻击,发现并修复潜在的安全漏洞,提高网络系统的安全性。本文将介绍渗透测试的概念、重要性、实施步骤及实践案例,…