欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言实现bmp图像锐化

程序员文章站 2024-01-24 16:02:46
...

锐化(sharpening)和平滑恰恰相反,它是通过增强高频分量来减少图象中的模糊,因此又称为高通滤波(high pass filter)。锐化处理在增强图象边缘的同时增加了图象的噪声。

常用的锐化模板是拉普拉斯(Laplacian)模板,如下所示:

C语言实现bmp图像锐化
容易看出拉普拉斯模板的作法:以自身灰度值的9倍减去周围像素点灰度值作为自身新的灰度值。可见,如果一片暗区出现了一个亮点,那么锐化处理的结果是这个亮点变得更亮,增加了图象的噪声。因为图象中的边缘就是那些灰度发生跳变的区域,所以锐化模板在边缘检测中很有用。

实现代码:

int i,j,temp;
	int sharpen[9]={-1,-1,-1,-1,9,-1,-1,-1,-1};//拉普拉斯锐化模板
	for(i=1;i<height-1;i++){  //1~height-2
		for(j=1;j<width-1;j++){ //1~width-2
			temp=imageData[lineBytes*(i+1)+j-1]*sharpen[0];
			temp+=imageData[lineBytes*(i+1)+j]*sharpen[1];
			temp+=imageData[lineBytes*(i+1)+j+1]*sharpen[2];
			temp+=imageData[lineBytes*i+j-1]*sharpen[3];
			temp+=imageData[lineBytes*i+j]*sharpen[4];
			temp+=imageData[lineBytes*i+j+1]*sharpen[5];
			temp+=imageData[lineBytes*(i-1)+j-1]*sharpen[6];
			temp+=imageData[lineBytes*(i-1)+j]*sharpen[7];
			temp+=imageData[lineBytes*(i-1)+j]*sharpen[8];
			if(temp>255)b.imgData[lineBytes*i+j]=255;
			else if(temp<0)b.imgData[lineBytes*i+j]=abs(temp);
			else b.imgData[lineBytes*i+j]=temp;
		}
	}

代码效果:

原图像:

C语言实现bmp图像锐化锐化图像:

C语言实现bmp图像锐化