图像处理之中值滤波介绍及C实现
1 中值滤波概述
中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号平滑处理技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。
中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是用某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为3*3,5*5区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。
2 中值滤波算法原理
中值滤波数学实现:对一个数字信号序列xj(-∞<j<∞)进行滤波处理时,首先要定义一个长度为奇数的L长窗口,L=2N+1,N为正整数。设在某一个时刻,窗口内的信号样本为x(i-N),…,x(i),…,x(i+N),其中x(i)为位于窗口中心的信号样本值。对这L个信号样本值按从小到大的顺序排列后,其中值,在i处的样值,便定义为中值滤波的输出值。
在实际应用中,随着所选用窗口长度的增加,滤波的计算量将会迅速增加。因此,寻求中值滤波的快速算法,是中值滤波理论的一个重要研究内容。中值滤波的快速算法,一般采用下述三种方式:①直方图数据修正法;②样本值二进制表示逻辑判断法;③数字和模拟的选择网络法。
对中值滤波的理论研究,还集中于统计特性分析和根序列的描述方面。当一个信号序列经一特定窗口长度的中值滤波反复处理后,它会收敛于某一个不再变化的序列,这个序列称为中值滤波的根序列。根序列是描述中值滤波特性的一个重要概念。通过对根序列结构的研究,可以确定原信号序列中,哪些成分可以经中值滤波后保留下来,哪些成分将被抑制。这对确定中值滤波器的窗口长度,提供了重要依据。用VLSI实现的中值滤波器芯片,可供实时处理中应用。
3 中值滤波算法流程
4 中值滤波应用及优势
中值滤波法对消除椒盐噪声非常有效,在光学测量条纹图象的相位分析处理方法中有特殊作用,但在条纹中心分析方法中作用不大.
中值滤波在图像处理中,常用于保护边缘信息,是经典的平滑噪声的方法。
5 中值滤波代码实现
1 // zhongzhilvbo.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include <stdio.h> 5 #include <math.h> 6 #include <memory.h> 7 #include <conio.h> 8 #include <stdlib.h> 9 #include <windows.h> 10 #include "stdafx.h" 11 //原图象的宽度和高度 12 #define width 352 13 #define higth 288 14 15 int lvbo(unsigned char D[9]) 16 { 17 unsigned int temp; 18 int i,j; 19 20 for(i=0;i<9;i++) 21 { 22 for(j=0;j<9-i;j++) 23 { 24 if(D[i]>D[j+1]) 25 { 26 temp=D[i]; 27 D[i]=D[j+1]; 28 D[j+1]=temp; 29 } 30 } 31 } 32 33 return D[4]; 34 } 35 36 void main() 37 { 38 FILE *fp,*newfp; 39 int i,j; 40 41 if(!(fp=fopen("fmh1.bmp","rb"))) 42 { 43 printf("Open file %s error!\n","k.bmp"); 44 return ; 45 } 46 47 if(!(newfp=fopen("fmout.bmp","wb"))) 48 { 49 printf("Open file %s error!\n","result.bmp"); 50 return ; 51 } 52 53 unsigned char buffer[54+1024];//定义原图像头缓冲区 54 fread(buffer,1,54+1024,fp);//读取文件头54个字节 55 56 unsigned long length=width*higth;//图像的总象素个数 57 unsigned char readData[higth][width]; //用于存储原图数据的数组 58 unsigned char writeData[higth][width]; //用于存储原图数据的数组 59 60 fread(&readData[0][0], sizeof(unsigned char),length, fp);//从原图读入数据 61 62 for(i=0;i<higth;i++) 63 { 64 for(j=0;j<width;j++) 65 { 66 writeData[i][j]=readData[i][j]; 67 } 68 } 69 70 unsigned char D[9]; //定义选取框 71 for(i=1;i<higth-1;i++) 72 { 73 for(j=1;j<width-1;j++) 74 { 75 D[0]=readData[i-1][j+1]; 76 D[1]=readData[i][j+1]; 77 D[2]=readData[i+1][j+1]; 78 D[3]=readData[i-1][j]; 79 D[4]=readData[i][j]; 80 D[5]=readData[i+1][j]; 81 D[6]=readData[i-1][j-1]; 82 D[7]=readData[i][j-1]; 83 D[8]=readData[i+1][j-1]; 84 writeData[i][j]=lvbo(D); 85 } 86 } 87 88 fwrite(buffer,sizeof(unsigned char),54+1024,newfp); 89 fwrite(writeData,sizeof(unsigned char),length,newfp); 90 fclose(newfp); 91 fclose(fp); 92 93 return ; 94 }
经过中值滤波处理后的对比图片:
图像处理之中值滤波介绍及C实现相关推荐
- 使用c语言实现图像中值滤波,图像处理之中值滤波介绍及C实现
原标题:图像处理之中值滤波介绍及C实现 1.中值滤波概述 中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号平滑处理技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. ...
- OpenCV-数字图像处理之中值滤波
OpenCV-数字图像处理之中值滤波 中值滤波(median filter)在数字图像处理中属于空域平滑滤波的内容(spatial filtering).对消除椒盐噪声具有很好的效果. 数学原理 为了 ...
- 图像处理之均值滤波介绍及C算法实现
1 均值滤波介绍 滤波是滤波是将信号中特定波段频率滤除的操作,是从含有干扰的接收信号中提取有用信号的一种技术. 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临 ...
- 数字图像处理——中值滤波及其改进算法
一.算法介绍 中值滤波器是非线性滤波器的一个例子,它在保留图像特征方面非常有效. 但是,滤波器的窗口大小直接影响中值滤波器的性能. 较小的窗口保留了特征,但会导致噪声抑制的减少. 在较大窗口的情况下, ...
- Qt creator5.7 OpenCV249之中值滤波(含源码下载)
首先介绍下中值滤波的原理 函数 void cv::medianBulr( InputArray src, OutputArray dst, int Ksize) 下面是程序代码 void Widget ...
- 中值滤波_Halcon联合C#编程自学笔记三之中值滤波
[前言] 在图像预处理过程中有中值滤波.均值滤波.高斯滤波等,本次主要研究中值滤波.中值滤波是消除图像噪声最常见的手段之一,特别是消除椒盐噪声,中值滤波比均值滤波更好.它的基本原理是计算出数字图像中的 ...
- python中值滤波介绍_Python 实现中值滤波、均值滤波的方法
红包: Lena椒盐噪声图片: # -*- coding: utf-8 -*- """ Created on Sat Oct 14 22:16:47 2017 @auth ...
- 数字图像处理 中值滤波 MATLAB实验
一.原理_中值滤波 中值滤波的基本思想是将图像中每个像素的灰度值用其邻域内像素灰度的中值代替,它是一种非线性平滑滤波算法. 设加噪图像为 f(x,y) ,经中值滤波处理后的图像为g(x,y) ,则: ...
- matlab图像处理-中值滤波原理
中值滤波原理 中值滤波本质上是一种统计排序滤波器.对于原图像中某点(i,j),中值滤波以该点为中心的邻域内的所有像素的统计排序中值作为(i,j)点的响应. 中值不同于均值,是指排序队列中位于中 ...
最新文章
- android 记一次富文本加载之路
- 搜索和搜索形式(SEARCHING and its forms)
- gdb C++程序coredump不显示行号问题
- PHP笔记-用户登录权限拦截说明
- 汤阳光 Hibernate笔记
- 基于BAE微信公众账号管理系统答辩PPT免费下载
- mysql如何从两个表取出内容_如何从mysql中的两个表中获取数据?
- matlab 的滤波器分析,基于MATLAB仿真软件对有源滤波器进行分析研究
- 面试被问到你的优点和缺点时,该如何完美的回答
- GitHub的Fork 是什么意思
- 独孤思维:哇,看到三点式又激动了
- 【学习笔记】monitor
- JVM菜鸟进阶高手之路十(基础知识开场白)
- android平板屏幕碎了触摸失灵,小白瞎折腾:从此手机与平板自己维修,拒绝被忽悠!...
- EDM数据之大数据是什么
- 【干货福利】67个拯救web开发者的工具、库和资源!——爱创课堂
- sphinx在windows下的简单安装与使用
- Excel二维交叉表恢复为一维表
- 小米笔记本粉丝感恩狂欢趴【慎入!!】
- python要学什么英文歌_可以读英语课文的软件
热门文章
- boost::mpl模块实现if相关的测试程序
- boost::mp11::mp_sort相关用法的测试程序
- boost::hana::range_c用法的测试程序
- boost::function_types::components用法的测试程序
- GDCM:gdcm::Version的测试程序
- VTK:非结构化网格之UGrid
- VTK:图表之ConstructGraph
- Qt Creator使用自定义着色器
- Qt Creator编辑2D内容
- 经典C语言程序100例之八六