1.概述
图像增强就是采用某些技术把质量低的图像进行计算机处理,有选择的加强或者抑制图像中的某些信息,改善图像质量,提高人或机器对图像的分析与判别能力。
图像的增强处理方法一共有两种,分别是空间域方法和频域方法,空间域方法主要是运用空间滤波对图像增强进行处理,所谓滤波,就是过滤掉图像中的一些成分,对数字图像的直接滤波就是空间滤波(相对于频率域滤波),最大值最小值滤波就是其中之一,空间滤波就是在一个淋雨里,对该邻域包围的的像素进行操作,空间滤波器又叫模板,类似于矩阵,大小有3*3模板,5*5模板,9*9模板等。
1.1 最值滤波
最大最小值滤波是一种比较保守的图像处理手段,与中值滤波类似,首先要排序周围像素和中心像素值,然后将中心像素值与最小和最大像素值比较,如果比最小值小,则替换中心像素为最小值,如果中心像素比最大值大,则替换中心像素为最大值。一个Kernel矩阵为3X3的最大最小值滤波如下
2 调试
2.1 matlab调试结果及代码
最大值滤波可以去除图像中的暗斑,同时也会使亮斑增大;最小值滤波可以去除图像中的亮斑,同时也会增大暗斑。如下图所示:
MATLAB 进行最小值滤波:
MATLAB 进行最大值滤波:
MATLAB代码
I=imread('D:\Administrator\My Pictures\lenagray.bmp');
J1=imnoise(I,'salt & pepper',0.02); %椒盐噪声图像
J2=imnoise(I,'gaussian',0.02); %高斯噪声图像
subplot(2,2,1),imshow(J1);
subplot(2,2,2),imshow(J2);
I1=ordfilt2(J1,9,ones(3,3)) %椒盐噪声图像最大值滤波
I2=ordfilt2(J2,9,ones(3,3)) %高斯噪声图像最大值滤波
% I1=ordfilt2(J1,1,ones(3,3)) %椒盐噪声图像最小值滤波
% I2=ordfilt2(J2,1,ones(3,3)) %高斯噪声图像最小值滤波
subplot(2,2,3),imshow(I1);
subplot(2,2,4),imshow(I2);
2.2 ccs调试结果及代码
2.2.1 中值滤波
测试结果:
椒盐噪声图像滤波:
高斯图像滤波:
CCS代码:
同时进行最小值和最大值的滤波程序:
#include
#define IMAGEWIDTH 256
#define IMAGEHEIGHT 256
#define Uint8 unsigned char
void ReadImage(char *cFileName);
void bmpDataPart(FILE* fpbmp);
void ConservativeFilter();
unsigned char grey[IMAGEHEIGHT][IMAGEWIDTH];
void main()
{
ReadImage("D:\\Administrator\\My Pictures\\Lena1.bmp");
ConservativeFilter();
while (1);
}
void ReadImage(char *cFileName)
{
FILE *fp;
if ( fp=fopen(cFileName,"rb" ) )
{
bmpDataPart(fp);
fclose(fp);
}
}
void bmpDataPart(FILE* fpbmp)
{
int i, j=0;
unsigned char* pix=NULL;
fseek(fpbmp, 55L, SEEK_SET);
pix=(unsigned char*)malloc(256);
for(j=0;j
{
fread(pix, 1, 256, fpbmp);
for(i=0;i
{
grey[IMAGEHEIGHT-1-j][i] = pix[i];
}
}
}
void ConservativeFilter()
{
int i=0,j=0;
int wheight=1,wwidth=1; //窗口大小(2*wheight+1) * (2*wwidth+1)
int k=0,l=0;
Uint8 maxpix=0,minpix=0;
for(i=0;i
{
for(j=0;j
{
if((i>wheight-1) && (iwwidth-1) && (j
{
maxpix=minpix=grey[i-wheight][j-wwidth];
for(k=i-wheight;k<=i+wheight;k++)
for(l=j-wwidth;l<=j+wwidth;l++)
{
if((k!=i)&&(l!=j))
{
if(maxpix
maxpix = grey[k][l];
if(minpix>grey[k][l])
minpix = grey[k][l];
}
}
if(maxpix
grey[i][j] = maxpix;
if(minpix>grey[i][j])
grey[i][j] = minpix;
}
}
}
}