【数字图像处理】图像的平滑处理
图像平滑的目的
- 模糊:在提取较大目标前,去除太小细节,或将目标内的小间断连接起来。
- 消除噪声:改善图像质量,降低干扰。
平滑处滤波对图像的低频分量增强,同时削弱高频分量,用于消除图像中的随机噪声,起到平滑作用。
图像平滑处理的基本方法
- 领域平均法
- 领域加权平均法
- 选择式掩模法
- 中值滤波
领域平均法
模板在图像上移动,模板的中心对应目标像素点,在模板范围内对目标像素点进行卷积运算(对应系数乘对应像素点),然后相加除上模板大小得到均值,这个均值就是目标像素点处理后的值。
如图,对5行四列的图像进行3*3模板的邻域平均法处理:
邻域平均法存在的问题
抑制了高频成分,使用图像变得模糊,平滑效果不好,减少噪音的同时,损失了高频信息。
注意:模板不宜过大,因为模板越大对速度有直接影响,且模板大小越大变换后图像越模糊,特别是在边缘和细节处
优点:算法简答,计算速度快。
缺点:造成图像一定程度上的模糊。
3*3模板邻域平均法示例:
Use_ROWS:行
Use_Line:列
图像边界不处理:只处理1-----n-1。
int count = 0; for(int i = 1; i < Use_ROWS-1; i++) { for(int j = 1; j < Use_Line-1; j++) { //邻域平均法 count=0; count = Image_Use[i][j]+Image_Use[i][j-1]+Image_Use[i][j+1]+Image_Use[i-1][j]+Image_Use[i-1][j-1]+Image_Use[i-1][j+1]+Image_Use[i+1][j]+Image_Use[i+1][j-1]+Image_Use[i+1][j+1]; Image_Use[i][j] = (int)(count/9); } }
邻域加权平均法
加权:系数不再全部为1。
选择式掩模法
中值滤波
中值滤波器,使用滤波器窗口包含区域的像素值的中值来得到窗口中心的像素值,本质上是一种非线性平滑滤波器。
中值滤波:抑制噪声又可以尽量保持图像细节,对滤除脉冲干扰及图像扫描噪声最为有效。不
注意:对一些细节多,特别是点,线,尖顶细节多的图像不宜采用中值滤波。
不同的窗口选择
常用窗口
复合型中值滤波介绍
3*3模板的中值滤波处理
int cmp(const void *a,const void *b) { return *(int *)a-*(int *)b;//这是从小到大排序,若是从大到小改成: return *(int *)b-*(int *)a; }
int temp[9],index=0; for(int i = 1; i < Use_ROWS-1; i++) { for(int j = 1; j < Use_Line-1; j++) { //中值滤波 memset(temp, 0, sizeof(temp)); temp[index]=Image_Use[i][j]; temp[index+1]=Image_Use[i-1][j]; temp[index+2]=Image_Use[i-1][j-1]; temp[index+3]=Image_Use[i-1][j+1]; temp[index+4]=Image_Use[i][j-1]; temp[index+5]=Image_Use[i][j+1]; temp[index+6]=Image_Use[i+1][j]; temp[index+7]=Image_Use[i+1][j-1]; temp[index+8]=Image_Use[i+1][j+1]; qsort(temp,9,sizeof(temp[0]),cmp);//(数组,需要排序的数字个数,单个数字所占内存大小,比较函数) Image_Use[i][j] = temp[4]; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2018-09-11 网络二层,三层的区别和寻址过程