精华内容
下载资源
问答
  • 高斯模糊

    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);
    }
    
    

    高斯更模糊
    如果想进一步了解更多计算机视觉代码,请移步

    Barack Bao的github

    七、参考文献

    https://blog.csdn.net/weixin_41042404/article/details/81608178

    https://www.jianshu.com/p/302a895c12dd

    展开全文
  • 主要为大家详细介绍了Android实现图片转高斯模糊的方法,以及高斯模糊布局,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,256
精华内容 2,102
关键字:

高斯模糊