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

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


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

实现代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma pack(1)   //全紧凑模式typedef struct {unsigned char bfType[2];unsigned int bfSize;unsigned short bfReserved1;unsigned short bfReserved2;unsigned int bfOffBits;
}bitmapFileHeader;typedef struct {unsigned int biSize;unsigned int biWidth;unsigned int biHeight;unsigned short biPlanes;unsigned short biBitCount;unsigned int biCompression;unsigned int biSizeImage;unsigned int biXPixPerMeter;unsigned int biYPixPerMeter;unsigned int biClrUsed;unsigned int biClrImportant;
}bitmapInfoHeader;typedef struct{unsigned char rgbBlue;unsigned char rgbGreen;unsigned char rgbRed;unsigned char rgbReserved;}rgbQUAD;typedef struct{bitmapFileHeader bfHeader;bitmapInfoHeader biHeader;rgbQUAD palette[256];unsigned char *imgData;
}bmp;int main(){FILE *fp;if((fp=fopen("d:\Temp\\test_gray.bmp","rb"))==NULL){perror("can not open file!");return -1;}//读入彩色bmp图像文件头,信息头和图像数据bitmapFileHeader bfHeader;fread(&bfHeader,14,1,fp);bitmapInfoHeader biHeader;fread(&biHeader,40,1,fp);int imSize=biHeader.biSizeImage;int width=biHeader.biWidth;int height=biHeader.biHeight;int bitCount=biHeader.biBitCount;int lineBytes=(width*bitCount+31)/32*4;fseek(fp,bfHeader.bfOffBits,SEEK_SET);unsigned char*imageData=(unsigned char*)malloc(imSize*sizeof(unsigned char));fread(imageData,imSize*sizeof(unsigned char),1,fp); fclose(fp);bmp b;memcpy(&(b.bfHeader),&bfHeader,sizeof(bfHeader));memcpy(&(b.biHeader),&biHeader,sizeof(biHeader));b.imgData=(unsigned char*)malloc(sizeof(unsigned char)*imSize);memset(b.imgData,0,sizeof(unsigned char)*imSize);for(int i=0;i<256;i++){b.palette[i].rgbBlue=i;b.palette[i].rgbGreen=i;b.palette[i].rgbRed=i;}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-2for(j=1;j<width-1;j++){ //1~width-2temp=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;}}char savePath[]="D:\Temp\\save_test.bmp";FILE *f_save=fopen(savePath,"wb");if(f_save==NULL){perror("can not open file!");return -2;}fwrite(&b.bfHeader,sizeof(bitmapFileHeader),1,f_save);fwrite(&b.biHeader,sizeof(bitmapInfoHeader),1,f_save);fwrite(&b.palette,1024,1,f_save);fwrite(b.imgData,sizeof(unsigned char)*b.biHeader.biSizeImage,1,f_save);fclose(f_save);free(imageData);free(b.imgData);getchar();return 0;
}

代码效果:

原图像:

锐化图像:

C语言实现bmp图像锐化相关推荐

  1. C语言实现bmp图像几何变换(移动,旋转,镜像,转置,缩放)

    C语言实现bmp图像几何变换(移动,旋转,镜像,转置,缩放) 移动 旋转 镜像 转置 缩放 自定义结构及函数如下: #define pi 3.1415926 typedef struct {unsig ...

  2. C语言读取bmp图像并做简单显示

    C语言读取bmp图像并做简单显示) bmp文件格式 读取bmp文件信息并展示 bmp文件格式 bmp文件大体上分为四个部分: bmp文件构成 位图文件头BITMAPFILEHEADER 位图信息头BI ...

  3. C语言实现bmp图像对比度扩展

    假设有一幅图,由于成象时光照不足,使得整幅图偏暗(例如,灰度范围从0到63):或者成象时光照过强,使得整幅图偏亮(例如,灰度范围从200到255),我们称这些情况为低对比度,即灰度都挤在一起,没有拉开 ...

  4. C语言读取bmp图像

    BMP图像编码 BMP即bitmap,也就是位图,一般由4部分组成:文件头信息块.图像描述信息块.颜色表(在真彩色模式无颜色表)和图像数据区. 在图像数据之前,如图所示,共有54位数据 其中,0x42 ...

  5. 【图像处理作业】用C语言对bmp图像使用中值滤波、Prewitt算子进行平滑、锐化操作

    相关原理 使用C语言打开8bit灰度图bmp文件并读出相应的每个像素亮度值,因为任何一个图像都可看成单个像素的组合.程序实现了1×1的图像和一个3×3的图像做卷积,并将结果输出成为新的bmp文件 平滑 ...

  6. C语言黑白bmp转字节流,纯C语言对BMP图像的灰度化二值化

    #include "Windows.h" #include #include //using namespace std; // 这个动态申请二维内存(指针数组)的函数很有意思 t ...

  7. c语言bmp图片拉普拉斯锐化,图像锐化算法(Image sharpening):拉普拉斯增强和Unsharp Masking(附代码)...

    图像锐化算法(Image sharpening):拉普拉斯增强和Unsharp Masking(附代码) (y(m,n)=x(m,n)+lambda*z(m,n)) 其中(x(m,n))是处理前图片, ...

  8. C语言数字图像处理---3.3图像锐化

    本篇将介绍图像增强范畴中的图像锐化部分,以经典的LAPLACE锐化和Photoshop USM锐化为例,通过C语言编程实现,教会大家这两种锐化算法,增强大家对图像锐化的理解以及对图像增强范畴的认知. ...

  9. c语言怎么计算bmp图像大小,C语言如何取出一张256色位的bmp图像的某个像素的颜色...

    C语言怎么取出一张256色位的bmp图像的某个像素的颜色 我想实现的是:将一张256色位图的bmp图像(1.bmp)上下左右移动N个像素(比如向右移5个像素,最左边的5个像素全涂成黑色)生成另一张图像 ...

最新文章

  1. 服务器用户设置备份,用户管理的备份
  2. 深入JVM锁机制2-Lock
  3. Python3学习笔记2:简易Web爬虫
  4. java poll()是什么方法,JAVA学习中的一点小发现:LinkedList中.poll()方法在输出时使用应注意的小点...
  5. Linux版本的SVN客户端,linux 下安装 subversion(svn) 客户端
  6. 对俄罗斯应用“一刀切”,乌克兰知名开发商推出 Mac 专用反间谍软件
  7. 学习分布式技术,技术人看这里
  8. CSS(网页样式语言)基础
  9. 每日算法之三十五:Wildcard Matching
  10. MySQL 使用utf8mb4代替utf8
  11. 英雄联盟大区测试稳定软件,英雄联盟官方公布新界面,部分大区展开测试,你最希望改什么?...
  12. 人脸识别产品问题及改进方法
  13. 冰汽朋克侦查机器人_冰汽时代机器人与人力效率对比分析 寒霜朋克机器人与人力哪个效率高...
  14. 大数据早报:阿里巴巴收购以色列创业公司 迅雷再次回应玩客云用户维权事件(12.1)
  15. 《痞子衡嵌入式半月刊》 第 63 期
  16. 天猫精灵接入ESP8266+DHT11(blink)
  17. think-swoole简易使用教程--websocket
  18. Spring、SpringMVC、Mybatis常见面试题总结
  19. 卷积神经网络(conv2d参数含义、卷积层、池化层)
  20. An internal error occurred during: Add Deployment.

热门文章

  1. onAttach 显示过时的处理方法
  2. RxJava 过滤操作符 distinct 和 distinctUntilChanged
  3. DS博客作业04--树大作业
  4. LOJ 2537 「PKUWC2018」Minimax
  5. (转载)(官网)UE4--Character
  6. 树形结构在关系数据库中的设计
  7. Java for LeetCode 067 Add Binary
  8. Await, and UI, and deadlocks! Oh my!
  9. recover 没有捕获异常_GO语言异常处理机制panic和recover分析
  10. c语言使能,什么是锁存使能输入