当前位置:   article > 正文

【数字图像处理】实验四 高斯滤波_设计一个标准差为2的图像高斯滤波器。 必做要求: ①给出所设计图像滤波器的二维数

设计一个标准差为2的图像高斯滤波器。 必做要求: ①给出所设计图像滤波器的二维数

一、实验内容

  • 在这里插入图片描述

二、理论准备

1、 产生高斯滤波模板。

  • 根据参数sigma计算模板大小,如下:
    s i z e = [ 6 ∗ s i g m a − 1 ] / 2 ∗ 2 + 1 size = [6*sigma-1]/2*2 + 1 size=[6sigma1]/22+1
  • 根据高斯函数产生滤波模板,高斯函数如下:
    h ( x , y ) = e − x 2 + y 2 2 σ 2 h(x,y) =e^{- \frac{x^2+y^2}{2\sigma^2}} h(x,y)=e2σ2x2+y2
    其中x,y应该按照以下格式输入:
    在这里插入图片描述
    根据模板大小不同依次类推就可以了。每个输入对应一个输出,对应该位置的权重。这是低通滤波,最后得出模板后,进行归一化处理,即将模板中所有权值相加,然后每个权值除以总和,得到最后的模板。

2、 一般形式的滤波

  • 把产生的模板和需要处理的图像传进滤波器进行滤波。

3、 加速高斯滤波

  • 加速原理:把二维高斯滤波分离成两个一维高斯滤波,分别沿行和列进行滤波
  • 效率分析:
    图像大小为mn, 模板大小为NN.
    加速之前,在每个像素点处都要按照模板进行一次计算所以它的复杂度是 m ∗ n ∗ N ∗ N m*n*N*N mnNN
    加速之后,每个像素点处也要进行处理,不过他的模板大小变成了N,然后行列要分别进行,所以他的复杂度变成了 2 ∗ m ∗ n ∗ N 2*m*n*N 2mnN

三、实验环境

  • windows10
  • vs2017 + opencv
  • c++语言

四、实验过程

  • 设计一个函数void Gaussian(const Mat &input, Mat &output, double sigma, bool accelerate = false);input传入将要处理的图片,output接受处理完后的图片,sigma高斯函数中的方差,accelerate是否加速,默认不加速
  • 不加速就是一般的空间滤波,这里面我使用了一个之前已经写好的一个空域图像处理的类里面的方法,进行滤波:

/*
	线性低通滤波器
	@image_in:将要处理的图片。
	@filter_in[]:使用的滤波器模板。
	@sizeOfFilter_in:滤波器大小
	@return:处理后的图片
	*/
	Mat linearFilter(const Mat &image_in, float filter_in[], int sizeOfFilter_in);
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 加速就是对行和列分别进行滤波,以降低算法时间复杂度,比较简单,直接看代码就可以了。

五、实验结果

  • 原图像
    原图像
  • 不加速结果
    在这里插入图片描述
  • 加速结果
    在这里插入图片描述

六、实验总结

  • 这次实验比较简单,只要弄清楚原理的话,实现上基本没有难度,当然这还是受益于之前写的代码,线性滤波器直接拿来用,节省了在写这部分代码的时间。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/458558
推荐阅读
相关标签
  

闽ICP备14008679号