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系统软件部分
噪声参数为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"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()
{
}
void ReadImage(unsigned char *pImage,char *cFileName,int nWidth,int nHeight)
{
}
void bmpDataPart(FILE* fpbmp)
{
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);
}
}
void GaussSmooth()
{
}