C语言实现bmp图像锐化
程序员文章站
2024-01-24 16:02:46
...
锐化(sharpening)和平滑恰恰相反,它是通过增强高频分量来减少图象中的模糊,因此又称为高通滤波(high pass filter)。锐化处理在增强图象边缘的同时增加了图象的噪声。
常用的锐化模板是拉普拉斯(Laplacian)模板,如下所示:
容易看出拉普拉斯模板的作法:以自身灰度值的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;
}
}
代码效果:
原图像:
锐化图像: