高斯模糊

1摘要

各类图像处理系统在图像的采集、获取、传送和转换(如成像、复制扫描、传输以及显示等)过程中,均处在复杂的环境中,光照、电磁多变,所有的图像均不同程度地被可见或不可见的噪声干扰。噪声源包括电子噪声、光子噪声、斑点噪声和量化噪声。如果信噪比低于一定的水平,噪声逐渐变成可见的颗粒形状,导致图像质量的下降。除了视觉上质量下降,噪声同样可能掩盖重要的图像细节,在对采集到的原始图像做进一步的分割处理时,我们发现有一些分布不规律的椒盐噪声,为此采取相应的对策就是对图像进行必要的滤波降噪处理。

高斯滤波器是平滑线性滤波器的一种,线性滤波器很适合于去除高斯噪声。而非线性滤波则很适合用于去除脉冲噪声,中值滤波就是非线性滤波的一种。平滑滤波器就是用滤波掩模确定的邻域内像素的平均灰度值去替代图像的每个像素点的值,这很容易用硬件实现。而高斯滤波器是带有权重的平均值,即加权平均,中心的权重比邻近像素的权重更大,这样就可以克服边界效应。高斯滤波如果采用3×3掩模的具体公式如下:
  g(x,y)={f(x-1,y-1)+f(x-1,y+1)+f(x+1,y-1)+f(x+1,y+1)+[f(x-1,y)+f(x,y-1)+f(x+1,y)+f(x,y+1)]*2+f(x,y)*4}/16;
  其中,f(x,y)为原图像中(x,y)像素点的灰度值,g(x,y)为经过高斯滤波和的值。

2系统软件部分

 2.1 matlab产生高斯噪声图片

  高斯模糊

噪声参数为1%

 

 

 

Matlab代码:

>> clear

>> g=imread('D:\Administrator\My Pictures\Lena.bmp');

figure(1);

imshow(g);

g2=imnoise(g,'gaussian',0.01);

figure(2);

imshow(g2);

imwrite(g2,'D:\Administrator\My Pictures\Lena0.01.bmp','bmp');

 

2.2 实验结果

1显示配置

 

 高斯模糊

2.图片处理结果

 

  高斯模糊

3 程序代码

 #include

#include"IMG_thr_le2min.h"

 

#define IMAGEWIDTH 256

#define IMAGEHEIGHT 256

 

void ReadImage(unsigned char *pImage,char *cFileName,int nWidth,int nHeight);

void Reverse(int nWidth,int nHeight);

void bmpDataPart(FILE* fpbmp);

void GaussSmooth();

 

#pragma DATA_SECTION(dbImage,"my_sect")

#pragma DATA_SECTION(dbTargetImage,"my_sect")

unsigned char dbImage[IMAGEWIDTH*IMAGEHEIGHT];

unsigned char dbTargetImage[IMAGEWIDTH*IMAGEHEIGHT];

 

unsigned char r[IMAGEHEIGHT][IMAGEWIDTH];

unsigned char g[IMAGEHEIGHT][IMAGEWIDTH];

unsigned char b[IMAGEHEIGHT][IMAGEWIDTH];

 

 

 

void main()

{

 

 

   short    rows, cols;      

   short    threshold_value;

   ReadImage(dbImage,"D:\\Administrator\\My Pictures\\55.bmp",IMAGEWIDTH,IMAGEHEIGHT);

   //Reverse(IMAGEWIDTH,IMAGEHEIGHT);

 

  

 

  

   threshold_value = 100;

   cols = IMAGEWIDTH;

   rows = IMAGEHEIGHT;

   IMG_thr_le2min(dbImage, dbTargetImage, cols, rows, threshold_value);

       

   while (1);                                               

}                                         

 

 

 

void ReadImage(unsigned char *pImage,char *cFileName,int nWidth,int nHeight)

{

 

 

        FILE *fp;

 

        if ( fp=fopen(cFileName,"rb" ) )

        {

          

                 bmpDataPart(fp);

                       GaussSmooth();

 

                fclose(fp);

        }

}

 

void bmpDataPart(FILE* fpbmp)

{

         int i, j=0;

int stride;

unsigned char* pix=NULL;

fseek(fpbmp, 0L, SEEK_SET);

stride=(24*IMAGEWIDTH+31)/8;

stride=stride/4*4;

pix=(unsigned char *)malloc(stride);

 

for(j=0;j

{

fread(pix, 1, stride, fpbmp);

 

   for(i=0;i

        {

            r[IMAGEHEIGHT-1-j][i]   =pix[i*3+2];

            g[IMAGEHEIGHT-1-j][i]   =pix[i*3+1];        

            b[IMAGEHEIGHT-1-j][i]   =pix[i*3];

        }

 

}

 

}

 

 

 

 

void GaussSmooth()

{

      int i,j;

      float btemp,gtemp,rtemp;

      int intbtemp,intgtemp,intrtemp;    

     

      for(i=1;i

      {

          for(j=1;j

          {

         

                             btemp =  (b[i-1][j-1] +

                                     2*b[i-1][j] +

                                       b[i-1][j+1] +

                                      2*b[i][j-1] +

                                     4*b[i][j]+

                                     2*b[i][j+1] +

                                    b[i+1][j-1] +

                                     2*b[i+1][j] +

                                       b[i+1][j+1]);   

                                       

                                       

 

                              gtemp =  (g[i-1][j-1] +

                                     2*g[i-1][j] +

                                       g[i-1][j+1] +

                                      2*g[i][j-1] +

                                     4*g[i][j]+

                                     2*g[i][j+1] +

                                    g[i+1][j-1] +

                                     2*g[i+1][j] +

                                       g[i+1][j+1]);

                                               

                                       

 

 

                              rtemp =  (r[i-1][j-1] +

                                     2*r[i-1][j] +

                                       r[i-1][j+1] +

                                      2*r[i][j-1] +

                                     4*r[i][j]+

                                     2*r[i][j+1] +

                                    r[i+1][j-1] +

                                     2*r[i+1][j] +

                                       r[i+1][j+1]);                             

                        

 

 

                intbtemp = (int)(btemp/16 + 0.5);

            intgtemp = (int)(gtemp/16 + 0.5);

            intrtemp = (int)(rtemp/16 + 0.5);

               

                if(intbtemp<0)

                {

                      intbtemp = 0;

                }

               

                if(intbtemp>255)

                {

                      intbtemp = 255;

                }

              

 

                      if(intgtemp<0)

                {

                      intgtemp = 0;

                }

               

                if(intgtemp>255)

                {

                      intgtemp = 255;

                }

              

 

 

                 if(intrtemp<0)

                {

                      intrtemp = 0;

                }

               

                if(intrtemp>255)

                {

                      intrtemp = 255;

                }

              

 

          b[i][j] = intbtemp;

            g[i][j] = intgtemp;

            r[i][j] = intrtemp;

         

              

          }

      }

                

}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity HDRP(High Definition Render Pipeline)是Unity引擎的一个高级渲染管线,用于实现高质量的图形渲染效果。高斯模糊是一种常用的图像处理技术,用于创建柔和、模糊的效果。在Unity HDRP中,可以使用Compute Shader来实现高斯模糊效果。 高斯模糊的基本原理是对图像中的每个像素进行加权平均,使得周围像素的颜色对当前像素的影响逐渐减小。这种加权平均的过程可以通过多次迭代来实现更加模糊的效果。 在Unity HDRP中,可以通过以下步骤来实现高斯模糊: 1. 创建一个Compute Shader:Compute Shader是一种在GPU上执行计算任务的程序。可以使用Compute Shader来实现高斯模糊算法。 2. 在Compute Shader中定义高斯模糊算法:在Compute Shader中,可以定义高斯模糊算法的具体实现。通常使用两个Pass来实现水平和垂直方向的模糊。 3. 创建一个Render Texture:Render Texture是一种特殊的纹理,可以用于在渲染过程中存储图像数据。创建一个Render Texture来存储模糊后的图像。 4. 在Compute Shader中使用Render Texture进行计算:在Compute Shader中,使用Render Texture作为输入和输出,对图像进行高斯模糊计算。 5. 在渲染过程中使用模糊后的图像:将模糊后的图像应用到需要模糊效果的对象上,可以通过将Render Texture作为材质的贴图来实现。 需要注意的是,高斯模糊是一种计算密集型的操作,对性能要求较高。在实际使用中,可以根据需求调整模糊的迭代次数和模糊半径,以平衡图像质量和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值