-
高斯模糊
2019-02-16 19:49:52高斯模糊 高斯模糊(英语:Gaussian Blur),也叫高斯平滑 ,通常用它来减少图像噪声以及降低细节层次。 从数学的角度来看,图像的高斯模糊过程就是图像与正态分布做卷积。由于正态分布又叫作“高斯分布”,所以这项...高斯模糊
高斯模糊(英语:Gaussian Blur),也叫高斯平滑 ,通常用它来减少图像噪声以及降低细节层次。 从数学的角度来看,图像的高斯模糊过程就是图像与正态分布做卷积。由于正态分布又叫作“高斯分布”,所以这项技术就叫作高斯模糊。
图像噪声是指存在于图像数据中的不必要的或多余的干扰信息。
既然知道了高斯模糊能减少图像噪声,那我们不妨动动手.
一、高斯模糊的原理
“模糊”,就是将图像中每个像素值进行重置的过程,这个过程采用将每一个像素都设置成周边像素的平均值。
假设周边的点对中间点的影响都是相同的,即构造的卷积算子如下:
不难计算得出中间点的2取平均值后变成10/9,这是一种"平滑化"。在图形上,就相当于产生"模糊"效果,"中间点"失去细节。
显然,计算平均值时,取值范围越大,"模糊效果"越强烈。接下来的问题就是,应该如何分配权重呢?因为图像都是连续的,越靠近的点关系越密切,越远离的点关系越疏远。
如果使用简单平均,显然不是很合理,因此,加权平均更合理,距离越近的点权重越大,距离越远的点权重越小。正态分布显然是一种可取的权重分配模式!
在μ 处取最大值,在正(负)无穷远处取值为0,形状呈现中间高两边低 。计算平均值的时候,我们只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。因为计算平均值的时候,中心点就是原点,所以μ等于0。上式可以简化为
上面的正态分布是一维的,图像都是二维的,所以我们需要二维的正态分布。
有了这个函数 ,就可以计算每个点的权重了。
二、计算高斯模糊
假定中心点的坐标是(0,0),那么其他点的坐标也能写出,假设σ的值 ,将坐标和σ带入上式得出权重矩阵,最后加权平均得到最终的权重矩阵。
将像素点的灰度值乘以对应的权重值之和就是中心点高斯模糊的值。
对所有点重复这个过程,就得到了高斯模糊后的图像。
下面我们尝试着自己动手试试高斯模糊吧!
三、C++实战体验高斯模糊
#include<opencv2/opencv.hpp> #define PI 3.1415926 using namespace std; using namespace cv; int main(int argc, char ** argv) { //由于只是尝试,我们就把图片直接读成单通道灰度图 Mat src = imread("E:/a.jpg", 0); namedWindow("src", WINDOW_AUTOSIZE); imshow("src", src); //5x5卷积模板 Mat model = Mat(5, 5, CV_64FC1); double sigma = 80; for (int i = -2; i <= 2; i++) { for (int j = -2; j <= 2; j++) { model.at<double>(i + 2, j + 2) = exp(-(i * i + j * j) / (2 * sigma * sigma)) / (2 * PI * sigma * sigma); } } //权重矩阵 double gaussSum = 0; gaussSum = sum(model).val[0]; for (int i = 0; i < model.rows; i++) { for (int j = 0; j < 5; j++) { model.at<double>(i, j) = model.at<double>(i, j) / gaussSum; } } //计算高斯模糊 Mat dst = Mat(src.rows - 4, src.cols - 4, CV_8UC1); for (int i = 2; i < src.rows - 2; i++) { for (int j = 2; j < src.cols - 2; j++) { double sum = 0; for (int m = 0; m < model.rows; m++) { for (int n = 0; n < model.cols; n++) { sum += (double)src.at<uchar>(i + m - 2, j + n - 2) * model.at<double>(m, n); } } dst.at<uchar>(i - 2, j - 2) = (uchar)sum; } } //输出高斯模糊后的图片 namedWindow("gaussBlur", WINDOW_AUTOSIZE); imshow("gaussBlur", dst); waitKey(0); }
如果想进一步了解更多计算机视觉代码,请移步七、参考文献
https://blog.csdn.net/weixin_41042404/article/details/81608178
-
Android实现图片转高斯模糊以及高斯模糊布局
2020-08-29 20:17:44主要为大家详细介绍了Android实现图片转高斯模糊的方法,以及高斯模糊布局,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
-
电商PC前后端分离项目Spring Boot后台实战第一期
-
基于Flink+Hudi构建企业亿级云上实时数据湖教程(PC、移动、小
-
用于文档聚类的半监督概念分解
-
(单细胞-SingleCell)单细胞标准流程(简化版)
-
【布道者】Linux极速入门
-
量子差分密码分析
-
两种新的具有最优修复的2位奇偶校验MDS阵列代码
-
基于流形结构的图像地理信息标注方法
-
P1005 [NOIP2007 提高组] 矩阵取数游戏(区间dp+__int128)
-
C++MFC开发远程控制软件教程(VS2013)
-
PTA 基础编程题目集 7-38 数列求和-加强版 (20 分)
-
响应式编程入门与实战(Reactor、WebFlux、R2DBC)
-
【Python-随到随学】FLask第二周
-
工程制图 AutoCAD 2012 从二维到三维
-
Session的使用
-
Liunx 优化思路与实操步骤
-
数据仓库多维数据模型设计
-
全光子晶体光纤单级直接放大产生34 W高功率飞秒脉冲
-
深究字符编码的奥秘,与乱码说再见
-
易意-源码