数字图像处理_领域平均滤波_中值滤波
均值滤波和中值滤波
均值滤波和中值滤波
均值滤波和中值滤波是图像处理的两种常用的滤波算法,它们的目的都是为了去掉图像中的噪声,以使图像变得更清晰,以满足下一步处理所需。
均值滤波是一种很常见的滤波算法。
该算法通过统计一定形状的邻域窗口内像素的灰度值,将窗口中各点像素的灰度值求平均,然后将新的灰度值赋给窗口中的每一点像素,从而进行滤波。
由于噪声的特性,噪声点往往灰度值低于其它像素,因此采用均值滤波的过滤效果良好,能够很好的消除噪声,但是也会消除掉有帮助的图像信息,因此多数情况下只是用于滤除少量的随机噪声,而不能用于去除椒盐噪声。
中值滤波则是另一种常用的滤波算法。
它的原理是通过统计一定范围内像素的中位数来进行滤波。
先以块为单位,确定该块中某一点处的灰度值。
然后,把该点所在连通区域的所有点的灰度值读取出来排序,去掉最大值和最小值,再求中间的中位数,将这个中位数作为该点处的灰度值,从而进行滤波处理。
中值滤波主要用于滤除椒盐噪声,可以更好的保留原始图像的信息,但是它的耗时较多,且由于中位数的计算,比较麻烦。
总之,均值滤波和中值滤波作为图像滤波的两种常用技术,具有他们各自良好的应用特点和优势,根据不同的情况和需求,可以采用适当的技术进行滤波,以满足下一步处理的条件。
数字图像处理------中值滤波
数字图像处理------中值滤波⼀中值滤波概念中值滤波算法以某像素的领域图像区域中的像素值的排序为基础,将像素领域内灰度的中值代替该像素的值[1];如:以3*3的领域为例求中值滤波中像素5的值图11)int pixel[9]中存储像素1,像素2...像素9的值;2)对数组pixel[9]进⾏排序操作;3)像素5的值即为数组pixel[9]的中值pixel[4]。
中值滤波对处理椒盐噪声⾮常有效。
⼆中值滤波代码实现//中值滤波:本算法采⽤3*3的领域范围void MyImage::MedianFilterOper(){//0. 准备:获取图⽚的宽,⾼和像素信息,int const num = 3 * 3;unsigned char pixel[num] = { 0 }; //保存领域的像素值int width = m_bmpInfo.biWidth;int height = m_bmpInfo.biHeight;int widthbyte = (width * m_bmpInfo.biBitCount / 8 + 3) / 4 * 4; //保证为4的倍数//相对于中⼼点,3*3领域中的点需要偏移的位置int delta[3 * 3][2] = {{ -1, -1 }, { -1, 0 }, { -1, 1 }, { 0, -1 }, { 0, 0 }, { 0, 1 }, { 1, -1 }, { 1, 0 }, {1, 1}};//1. 中值滤波,没有考虑边缘for (int i = 1; i < height-1; ++i){for (int j = 1; j < widthbyte-1; ++j){//1.1 提取领域值for (int k = 0; k < num; ++k){pixel[k] = m_imagedata[(i + delta[k][0])*widthbyte + j + delta[k][1]];}//1.2 排序qsort(pixel, num, sizeof(unsigned char), compa);//1.3 获取该中⼼点的值m_imagedata[i*widthbyte + j] = pixel[num / 2];}}}3 中值滤波概述 滤波是基于排序统计理论的⼀种能有效抑制噪声的⾮线性信号平滑处理技术,它将每⼀点的设置为该点某邻域窗⼝内的所有像素点灰度值的。
利用digitalmicrograph进行滤波处理的方法_概述说明
利用digitalmicrograph进行滤波处理的方法概述说明1. 引言1.1 概述本文旨在介绍利用Digital Micrograph(以下简称DM)进行滤波处理的方法。
随着数字图像处理技术的发展,滤波处理在图像分析和增强中扮演着重要角色。
而DM作为一款强大的图像处理软件,具有丰富的功能和灵活的操作性,提供了几种滤波器算法的实现,可广泛应用于各个领域。
本文将对DM进行简介,并讨论其在滤波处理中的应用价值。
1.2 文章结构本文将按照以下结构展开讨论:第2部分:DigitalMicrograph简介- 介绍DM的基本概念与功能,并探讨其在不同领域中所具有的优势;- 探究DM在滤波处理领域中所能提供的功能和应用价值。
第3部分:滤波处理基础知识- 解释信号与噪声的概念,并探讨二者之间关系;- 介绍滤波器原理及其分类;- 总结数字图像滤波处理方法并进行概述。
第4部分:在DigitalMicrograph中实现滤波处理- 着重说明图像导入与数据准备阶段的操作;- 提供常用滤波器算法的具体实现方法示例;- 探讨滤波效果评估与参数调优的方法和技巧。
第5部分:结论- 总结基于DigitalMicrograph的滤波处理方法;- 讨论方法的应用限制以及未来发展方向。
1.3 目的本文的目标是为读者提供在DM中进行滤波处理时所需的基础知识、操作流程以及一些实用技巧。
通过学习本文,读者将能够了解DM软件工具的使用方式,并且能够根据自身需求从多个滤波器算法中选择合适的方法进行图像处理。
我们希望本文能够为使用DM进行滤波处理的研究人员和工程师提供一定的参考和指导。
2. DigitalMicrograph简介2.1 基本概念与功能介绍:DigitalMicrograph是一款专业的图像处理软件,主要用于对数字图像进行分析、处理和可视化。
它以强大的算法和丰富的功能而闻名。
该软件提供了一系列底层操作与高级处理工具,可适用于各种科学研究领域。
中值滤波和均值滤波
中值滤波和均值滤波中值滤波和均值滤波是数字图像处理中常用的两种滤波方法,它们在图像去噪和平滑处理中起着重要的作用。
本文将从原理、应用以及优缺点等方面介绍这两种滤波方法。
一、中值滤波中值滤波是一种非线性滤波方法,其基本原理是用像素点周围邻域内的中值来代替该像素点的灰度值。
中值滤波可以有效地去除图像中的椒盐噪声和脉冲噪声,同时能够保持图像的边缘信息。
其处理过程如下:1.选取一个模板,模板的大小根据噪声的程度来确定;2.将模板中的像素点按照灰度值大小进行排序,取其中位数作为中心像素点的灰度值;3.将中心像素点的灰度值替换为中值;4.重复以上步骤,对整个图像进行滤波。
中值滤波的优点是能够有效地去除椒盐噪声和脉冲噪声,同时保持图像的边缘信息。
然而,中值滤波也存在一些缺点,例如不能处理高斯噪声和均匀噪声,对图像细节信息的保护效果较差。
二、均值滤波均值滤波是一种线性平滑滤波方法,其基本原理是用像素点周围邻域内的平均值来代替该像素点的灰度值。
均值滤波可以有效地去除高斯噪声和均匀噪声,同时能够保持图像的整体平滑。
其处理过程如下:1.选取一个模板,模板的大小根据滤波效果来确定;2.计算模板内所有像素点的灰度值的平均值;3.将中心像素点的灰度值替换为平均值;4.重复以上步骤,对整个图像进行滤波。
均值滤波的优点是能够有效地去除高斯噪声和均匀噪声,同时能够保持图像的整体平滑。
然而,均值滤波也存在一些缺点,例如不能处理椒盐噪声和脉冲噪声,对图像细节信息的保护效果较差。
中值滤波和均值滤波在图像处理中各有优劣。
中值滤波适用于去除椒盐噪声和脉冲噪声,能够保持图像的边缘信息,但在处理高斯噪声和均匀噪声时效果较差。
而均值滤波适用于去除高斯噪声和均匀噪声,能够保持图像的整体平滑,但对于细节信息的保护效果较差。
在实际应用中,根据图像的特点和噪声的类型选择合适的滤波方法是很重要的。
如果图像受到椒盐噪声和脉冲噪声的影响,可以选择中值滤波进行去噪处理;如果图像受到高斯噪声和均匀噪声的影响,可以选择均值滤波进行平滑处理。
数字图像加权平均滤波与中值滤波计算
加权平均滤波:
给出下面5x5的图像和一个滤波模版
右图给的是4领域加权平均滤波模版
加权均值滤波计算答案:
计算步骤:先选取左上角这个区域,计算加权均值替换中心点0的值。
原图像每个点对应值与滤波模版的值对应相乘求和取均值,依次往后 计算其它8个点。
计算方法:(0x0+4x1+2x0+1x1+0x1+1x1+2x0+0x1+4x0)x0.25=1.5 取2 注意: 1. 周围的像素值保持不变
2. 计算每个点的值时都应该按照原图像的灰度值计算
3. 计算结果四舍五入
0 4 2 3 4 1 2 2 2 3 2 3 2 2 2 4 3 4 3 3 0 5 6 7 3 042310112041440143230567301111141000
中值滤波:
1. 选取邻域
2. 计算中值替换中心点的像素值
例如对于下面的5x5图像,选取菱形邻域
求中值: 1 2 2 3 4 中值为2,替换原来的2 后面的依次计算剩下的8点 最后结果:
注意: 1. 周围的像素值保持不变
2. 计算每个点的值时都应该按照原图像的灰度值参与计算
0 4 2 3 4 1 2 2 2 3 2 3 2 2 2 4 3 4 3 3 0 5 6 7 3 0 4 2 3 4 1 2 2 2 3
2 2 2 2 2 4 4
3 3 3 0 5 6 7 3。
中值滤波的名词解释
中值滤波的名词解释在数字图像处理领域,中值滤波是一种经典的非线性滤波方法。
它的原理是通过统计图像中每个像素周围邻域内像素灰度值的中间值,将该中间值作为该像素的新灰度值,从而达到减少图像噪声和平滑图像的目的。
1. 中值滤波的背景和动机在图像获取或传输过程中,由于环境灯光、传感器噪声等因素,图像中可能会出现各种类型的噪声,如椒盐噪声、高斯噪声等。
这些噪声会严重影响图像的质量和可视化效果,甚至会干扰后续的图像处理和分析。
因此,对于数字图像的处理与分析来说,去噪是一个重要的预处理步骤。
中值滤波作为一种常用的去噪方法,因其简单、高效和较好的抗噪能力,被广泛应用于各种领域。
2. 中值滤波的原理和过程中值滤波的基本原理是基于排序统计的思想。
对于输入图像的每个像素,先定义一个邻域大小(常见的有3×3、5×5等),然后将该像素周围邻域内的所有像素按照灰度值大小进行排序。
接下来,将排序后的像素值组成一个序列,选择序列中的中间值作为该像素的新灰度值。
3. 中值滤波的优点和缺点中值滤波作为一种非线性滤波方法,具有以下几个优点:(1)对于椒盐噪声和脉冲噪声有较好的去噪效果,能够有效消除极值噪声;(2)在滤波过程中不会对图像的边缘和细节造成模糊效果,保持图像的清晰度;(3)计算简单、速度快,适用于实时图像处理和实时视频处理等领域。
然而,中值滤波也存在一些缺点:(1)对于高斯噪声等其他类型的噪声,去噪效果相对较差,可能会造成图像细节的模糊;(2)邻域大小的选择会影响滤波效果,如果邻域过大,可能会使图像部分细节丢失;(3)存在计算复杂度较高的问题,尤其是对于大尺寸的图像和多通道图像处理。
4. 中值滤波在实际应用中的案例中值滤波在图像处理领域有着广泛的应用,下面列举几个常见的案例:(1)数字相机中的图像去噪:在相机拍摄的图像中,可能会存在各种类型的噪声,使用中值滤波可以去除其中的椒盐噪声和脉冲噪声,提高图像质量。
均值滤波,高斯滤波,中值滤波
均值滤波,高斯滤波,中值滤波均值滤波,高斯滤波和中值滤波是数字图像处理中常用的三种平滑滤波技术,用于降低图像噪声和去除图像中的不相关细节。
本文将对这三种滤波方法进行介绍、比较和分析。
一、均值滤波均值滤波是一种简单的平滑滤波方法,它的原理是用滤波窗口内像素的平均值来代替中心像素的值。
具体来说,对于滤波窗口内的每个像素,计算其邻域内所有像素的平均值,然后将结果作为中心像素的值。
这样可以有效地平滑图像并去除高频噪声。
然而,均值滤波的缺点是它不能很好地保留图像的边缘信息,使得图像看起来模糊且失去细节。
二、高斯滤波高斯滤波是一种基于高斯分布的平滑滤波方法,它认为像素点的邻域内的像素值与中心像素点的距离越近,其权重越大。
它的滤波过程是在滤波窗口内,对每个像素点进行加权平均。
加权的权重由高斯函数决定,距离中心像素点越近的像素点的权重越大,距离越远的像素点的权重越小。
通过这种加权平均的方式,可以更好地保留图像的细节和边缘信息,同时有效地去除噪声。
高斯滤波的唯一缺点是计算复杂度较高,特别是对于大型滤波窗口和高分辨率图像来说。
三、中值滤波中值滤波是一种统计滤波方法,它的原理是用滤波窗口内像素的中值来代替中心像素的值。
具体来说,对于滤波窗口内的每个像素,将其邻域内的像素按照大小进行排序,然后将排序后像素的中值作为中心像素的值。
中值滤波对于椒盐噪声和脉冲噪声有很好的去噪效果,能够保持图像的边缘信息,避免了均值滤波和高斯滤波的模糊问题。
然而,中值滤波的缺点是不能去除高斯噪声和高频噪声,因为当滤波窗口内的像素含有这些噪声时,中值滤波会产生失真效果。
比较和分析:三种滤波方法各有优劣,应根据实际需求选择合适的滤波方法。
均值滤波是最简单、计算复杂度最低的方法,在去除高斯噪声和低频噪声方面效果较差,但对边缘信息的保留效果较差。
高斯滤波通过加权平均的方式更好地保留了图像的细节和边缘信息,适用于处理高斯噪声并且具有一定的平滑效果。
中值滤波对于椒盐噪声和脉冲噪声有很好的去噪效果,并保持了图像的边缘信息,但对于高斯噪声和高频噪声则效果较差。
计算机视觉中的图像处理与滤波算法
计算机视觉中的图像处理与滤波算法图像处理是计算机视觉领域的一个重要研究方向,它通过对图像的预处理和后处理来改善图像的质量,并提取出图像中的有用信息。
图像处理的核心是图像滤波算法,它可以消除图像中的噪声、增强图像的细节、改变图像的亮度和对比度等。
图像处理的基本任务包括图像增强、图像去噪、图像恢复和图像分割等。
而图像滤波算法是这些任务的一个重要组成部分。
下面我将介绍一些常见的图像处理滤波算法。
1.均值滤波器均值滤波器是最简单的图像滤波器之一。
它通过计算图像像素周围邻域的平均值来平滑图像。
均值滤波器可以有效地去除高斯噪声,但会导致图像模糊。
2.中值滤波器中值滤波器是一种非线性滤波器,它通过计算图像像素周围邻域的中值来平滑图像。
中值滤波器对于去除椒盐噪声和脉冲噪声具有很好的效果,并且可以保持图像的细节。
3.高斯滤波器高斯滤波器是一种基于高斯函数的线性滤波器。
它通过计算图像像素周围邻域的加权平均值来平滑图像。
高斯滤波器可以在平滑图像的同时保持图像的边缘。
4. Sobel算子Sobel算子是一种常用的边缘检测算子,它通过计算图像像素在水平和垂直方向上的梯度来检测图像中的边缘。
Sobel算子对于提取图像中的垂直边缘和水平边缘都有很好的效果。
5. Canny边缘检测算法Canny边缘检测算法是一种基于梯度的边缘检测算法,它通过对图像像素进行梯度计算和非极大值抑制来检测图像中的边缘。
Canny边缘检测算法能够检测出图像中的细微边缘,并且对噪声具有很好的鲁棒性。
6.直方图均衡化直方图均衡化是一种用于增强图像对比度的方法。
它通过重新分布图像的像素灰度级来增强图像的对比度。
直方图均衡化可以使图像的明暗区域更加清晰。
除了以上介绍的几种常见的图像处理滤波算法,还有很多其他的滤波算法用于不同的图像处理任务。
例如,维纳滤波器用于恢复受损图像,霍夫变换用于检测图像中的直线和圆等。
图像处理与滤波算法在计算机视觉领域有着广泛的应用。
数字图形处理 实验 图像的平滑与锐化
XXXXXXXX 大学(数字图形处理)实验报告 实验名称 图像的平滑与锐化 实验时间 年 月 日专 业 姓 名 学 号 预 习 操 作 座 位 号 教师签名 总 评一、实验目的:1.了解图像平滑的邻域平均和中值滤波以及锐化的梯度法和Sobel 法的基本思想;2.掌握图像平滑的邻域平均和中值滤波以及锐化的梯度法和Sobel 法的基本步骤;二、实验原理:1. 邻域平均法的思想是用像素及其指定邻域内像素的平均值或加权平均值作为该像素的新值,以便去除突变的像素点,从而滤除一定的噪声。
邻域平均法的数学含义可用下式表示:∑∑==⎪⎭⎫ ⎝⎛=mn i imn i i i w z w y x g 11),( (1) 上式中:i z 是以),(y x 为中心的邻域像素值;i w 是对每个邻域像素的加权系数或模板系数; m n 是加权系数的个数或称为模板大小。
邻域平均法中常用的模板是:⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡*=11111111191Box T (2) 为了解决邻域平均法造成的图像模糊问题,采用阈值法(又叫做超限邻域平均法,如果某个像素的灰度值大于其邻域像素的平均值,且达到一定水平,则判断该像素为噪声,继而用邻域像素的均值取代这一像素值;否则,认为该像素不是噪声点,不予取代),给定阈值0T :⎩⎨⎧≥-<-=00),(),(),(),(),(),(),(T y x g y x f y x g T y x g y x f y x f y x h (3) (3)式中,),(y x f 是原始含噪声图像,),(y x g 是由(1)式计算的平均值,),(y x h 滤波后的像素值。
2.中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。
方法是去某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。
MATLAB图像邻域运算,去除噪声,模板运算中值滤波,均值滤波
1.列出常用的卷积模板2.基于3×3的模板,编写均值滤波的处理程序,处理含有加性高斯噪声和椒盐噪声的图像,观察处理结果3.编写中值滤波程序,处理相同的图像与均值滤波进行比较;改变模板尺寸观察处理结果4.编程实现利用一阶微分算子和二阶拉普拉斯算子进行图像锐化的程序5.对比不同的邻域运算结果,体会图像锐化与图像平滑的区别均值滤波处理含有椒盐噪声图像程序代码(1):模板运算f=imread('lena sp.bmp');f=double(f);[row,col]=size(f);r=1;for i=2:row-1for j=2:col-1g(i,j)=(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j)+f(i,j+1)+f (i+1,j-1)+f(i+1,j)+f(i+1,j+1))/9;g=uint8(g);endendsubplot(121);imshow(uint8(f));title('椒盐噪声图像');subplot(122);imshow(g);title('均值滤波处理后的图像')椒盐噪声图像均值滤波处理后的图像(2):mean函数均值滤波f=imread('lena sp.bmp');f=double(f);[row,col]=size(f);g=size(f);for i=2:row-1for j=2:col-1t=f(i-1:i+1,j-1:j+1);t=double(t);g(i,j)=mean(mean(t));g(i,j)=uint8(g(i,j));endendsubplot(121);imshow(uint8(f));title('椒盐噪声图像');subplot(122);imshow(uint8(g));title('均值滤波处理后的图像')均值滤波处理后的图像(3)可变模板处理f=imread('lena gauss.bmp');f=double(f);[row,col]=size(f);r=1;g=size(f);for i=2:row-1for j=2:col-1s=0;s=double(s);for m=-r:rfor n=-r:rs=s+f(i+m,j+n);endendg(i,j)=s/power((r+2),2);endendsubplot(121);imshow(uint8(f));title('椒盐噪声图像');subplot(122);imshow(uint8(g));title('均值滤波处理后的图像')椒盐噪声图像均值滤波处理后的图像均值滤波处理含有加性高斯噪声图像程序代码(1):模板运算f=imread('lena gauss.bmp');f=double(f);[row,col]=size(f);r=1;for i=2:row-1for j=2:col-1g(i,j)=(f(i-1,j-1)+f(i-1,j)+f(i-1,j+1)+f(i,j-1)+f(i,j)+f(i,j+1)+f (i+1,j-1)+f(i+1,j)+f(i+1,j+1))/9;g=uint8(g);endendsubplot(121);imshow(uint8(f));title('加性高斯噪声图像');subplot(122);imshow(g);title('均值滤波处理后的图像')加性高斯噪声图像均值滤波处理后的图像(2):mean函数均值滤波f=imread('lena gauss.bmp');f=double(f);[row,col]=size(f);r=1;g=size(f);for i=2:row-1for j=2:col-1t=f(i-1:i+1,j-1:j+1);t=double(t);g(i,j)=mean(mean(t));g(i,j)=uint8(g(i,j));endendsubplot(121);imshow(uint8(f));title('加性高斯噪声图像');subplot(122);imshow(uint8(g));title('均值滤波处理后的图像')均值滤波处理后的图像(3):可变模板处理f=imread('lena gauss.bmp');f=double(f);[row,col]=size(f);r=1;g=size(f);for i=2:row-1for j=2:col-1s=0;s=double(s);for m=-r:rfor n=-r:rs=s+f(i+m,j+n);endendg(i,j)=s/power((r+2),2);endendsubplot(121);imshow(uint8(f));title('加性高斯噪声图像');subplot(122);imshow(uint8(g));title('均值滤波处理后的图像')椒盐噪声图像均值滤波处理后的图像中值滤波(椒盐噪声图像处理)f=imread('lena sp.bmp');f=double(f);[row,col]=size(f);g=size(f);r=1;for i=r+1:row-rfor j=r+1:col-rt=f(i-r:i+r,j-r:j+r);id=0;for tm=1:5m=0;for k=1:9if(m<t(k))m=t(k);id=k;endendt(id)=0;endg(i,j)=m;endendsubplot(121);imshow(uint8(f));title('原图像');subplot(122);imshow(uint8(g));title('中值滤波处理后的图像')R=1时的图像原图像中值滤波处理后的图像R=5原图像中值滤波处理后的图像中值滤波(加性高斯噪声)f=imread('lena gauss.bmp');f=double(f);[row,col]=size(f);g=size(f);r=1;for i=r+1:row-rfor j=r+1:col-rt=f(i-r:i+r,j-r:j+r);id=0;for tm=1:5m=0;for k=1:9if(m<t(k))m=t(k);id=k;endendt(id)=0;endg(i,j)=m;endendsubplot(121);imshow(uint8(f));title('原图像');subplot(122);imshow(uint8(g));title('中值滤波处理后的图像')原图像中值滤波处理后的图像R=5原图像中值滤波处理后的图像不同领域运算结果比较r=2f=imread('lena sp.bmp');f=double(f);[row,col]=size(f);r=2;g=size(f);for i=r+1:row-rfor j=r+1:col-rs=0;s=double(s);for m=-r:rfor n=-r:rs=s+f(i+m,j+n);endendg(i,j)=s/power((r+2),2);endendsubplot(121);imshow(uint8(f));title('椒盐噪声图像');subplot(122);imshow(uint8(g));title('均值滤波处理后的图像')均值滤波处理后的图像R=3椒盐噪声图像均值滤波处理后的图像R=8椒盐噪声图像均值滤波处理后的图像。
数字图像处理实验三(邻域平均法和中值滤波)
数字图像处理 实验三
邻域平均法(box 模板)和中值滤波处理
加入脉冲噪声后的图像:testnoise.bmp 去噪过程 结果图像
请设计程序,分别用邻域平均法,其模板为:
和中值滤波法对testnoise 图像进行去噪处理(中值滤波的模板的大小也设为3×3)。
得出实验结果图像后,比较这两种方法去噪的效果好坏,并分析具体原因。
完成上述工作后,使用程序进行验证分析:使用邻域平均法时,3×3和5×5模板大小对图像进行处理的效果有何差别?并分析原因。
附加说明:程序框架可以参考第二次实验指导书上给出的示例程序。
邻域平均法 中值滤波法
⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡1111*1111191。
数字图像处理中的数字滤波算法
数字图像处理中的数字滤波算法数字图像处理是一门涉及对图像进行数字化处理的学科,它在计算机视觉、图像识别、医学影像等领域有着广泛的应用。
而数字滤波算法是数字图像处理中的重要组成部分,它能够对图像进行去噪、增强、边缘检测等操作,提高图像质量和信息提取能力。
数字滤波算法的基本原理是通过对图像进行数学运算,改变图像的像素值,从而实现对图像的处理。
常用的数字滤波算法包括均值滤波、中值滤波、高斯滤波等。
均值滤波是最简单的一种滤波算法,它通过计算像素周围邻域内像素值的平均值来得到滤波后的像素值。
均值滤波的优点是简单快速,能够有效去除图像中的噪声。
然而,均值滤波也存在一些缺点,比如对边缘信息的模糊化处理。
中值滤波是一种非线性滤波算法,它通过对像素周围邻域内像素值进行排序,然后取中间值作为滤波后的像素值。
中值滤波的优点是能够有效去除椒盐噪声等脉冲噪声,同时保持图像的边缘信息。
然而,中值滤波也存在一些缺点,比如对高斯噪声等连续噪声的去除效果不佳。
高斯滤波是一种基于高斯函数的线性滤波算法,它通过对像素周围邻域内像素值进行加权平均,从而得到滤波后的像素值。
高斯滤波的优点是能够有效去除高斯噪声,同时保持图像的细节信息。
然而,高斯滤波也存在一些缺点,比如对图像中的边缘信息进行模糊化处理。
除了上述常用的数字滤波算法,还有一些其他的滤波算法,如锐化滤波、边缘增强滤波等。
锐化滤波通过增强图像的高频成分,使得图像的边缘更加明显。
边缘增强滤波通过增强图像的边缘信息,使得图像的边缘更加清晰。
数字滤波算法在数字图像处理中有着广泛的应用。
在图像去噪方面,数字滤波算法能够有效去除图像中的噪声,提高图像质量。
在图像增强方面,数字滤波算法能够增强图像的细节信息,使得图像更加清晰。
在边缘检测方面,数字滤波算法能够提取图像中的边缘信息,为后续的图像分割、目标识别等任务提供基础。
然而,数字滤波算法也存在一些挑战和问题。
首先,不同的滤波算法适用于不同类型的噪声和图像。
图像去除噪声方法
图像去除噪声方法图像去噪是数字图像处理的一种重要技术,在数字图像传输、存储和分析过程中都会遇到噪声的干扰。
目前图像去噪的方法主要分为基于空域的滤波方法和基于频域的滤波方法。
基于空域的滤波方法是指直接对图像的像素进行处理,常见的方法有均值滤波、中值滤波和高斯滤波等。
1. 均值滤波是一种简单的图像平滑方法,它通过对图像的每个像素值周围像素的平均值进行计算来减小噪声。
具体步骤是,对于图像中的每个像素,以该像素为中心取一个固定大小的窗口,然后计算窗口内所有像素的平均灰度值作为该像素的新值。
由于均值滤波是线性滤波器,因此它对于高斯噪声具有一定的去噪效果,但对于细节部分的保护能力较弱。
2. 中值滤波是一种非线性滤波方法,它通过在窗口内对像素值进行排序,将中间值作为该像素的新值来减小噪声。
相比于均值滤波,中值滤波更能保护图像的细节,对椒盐噪声(指图像中的黑白颗粒噪声)有较好的去噪效果。
3. 高斯滤波是基于高斯函数的一种线性滤波方法,它通过对图像像素的邻域像素进行加权平均来减小噪声。
高斯滤波的核函数是一个二维高斯函数,它具有旋转对称性和尺度不变性。
高斯滤波可通过调整窗口的大小和标准差来控制平滑程度,窗口越大、标准差越大,平滑程度越高。
高斯滤波对高斯噪声的去噪效果较好,但对于椒盐噪声则效果较差。
基于频域的滤波方法是指通过将图像进行傅立叶变换后,在频率域对图像进行滤波,然后再进行逆傅立叶变换得到去噪后的图像。
这种方法的优点是可以同时处理图像中的各种频率成分。
1. 傅立叶变换是一种将图像从空间域转换为频率域的方法,它将图像表示为了频率和相位信息的叠加。
在频率域中,图像可以分解为不同频率的成分,其中低频成分代表图像的平滑部分,高频成分代表图像的细节部分。
因此,通过滤除高频成分可以达到去噪的效果。
2. 基于小波变换的图像去噪方法利用小波变换的多分辨率分析特性来实现。
小波变换将图像分解成不同尺度的频带,通过选择合适的阈值来滤除噪声分量,然后再进行逆变换得到去噪后的图像。
数字图像处理_邻域平均法和中值滤波处理_实验报告
};
struct bmphdr *get_header(char filename[]);
#endif
6.
#include <stdio.h>
#include <memory.h>
#include "hdr.h"
struct bmphdr *get_header(char filename[])//获取位图头文件信息
}
hdr = (struct bmphdr *)malloc(sizeof(struct bmphdr));//分配空间
fread(hdr->signature, 2, 1, fp);
if (hdr->signature[0] != 'B' || hdr->signature[1] != 'M')//如果打开文件的扩展名不是.BMP,则说明不是
BMP位图文件
{
printf("Not a bmp file!\n");
return NULL;
}
//以下都是读位图头文件信息
fread(&hdr->size, 4, 1, fp);
fread(hdr->reserved, 4, 1, fp);
fread(&hdr->offset, 4, 1, fp);
可以让系统获取当前时间,让其转换为int值,再从这个范围内通过对nr_pixels取整,获得一个从0~nr_pixels范围内的随机数
srand((unsigned int)time(NULL));
i = ( rand() %nr_pixels);
图像处理中的各类滤波器及应用技巧
图像处理中的各类滤波器及应用技巧图像处理是指对数字图像进行操作和处理,以改善图像质量、提取图像特征或实现其他特定目标。
在图像处理过程中,滤波器是一种重要的工具,用于增强图像细节、去除图像中的噪声或者实现其他特定的图像处理目标。
本文将介绍图像处理中常见的各类滤波器及其应用技巧。
1. 均值滤波器均值滤波器是最简单的滤波器之一,它通过取邻域内像素的平均值来平滑图像。
均值滤波器主要用于去除图像中的高频噪声,例如椒盐噪声。
在实践中,可以通过调整滤波器的大小来控制平滑的程度,但过大的滤波器会导致图像细节的丢失。
2. 中值滤波器中值滤波器是一种非线性滤波器,它通过取邻域内像素的中值来平滑图像。
中值滤波器主要适用于去除图像中的椒盐噪声,特别是对于小区域内的噪声点优势明显。
与均值滤波器不同,中值滤波器不会导致图像细节的丢失。
3. 高斯滤波器高斯滤波器是一种线性平滑滤波器,它通过对邻域内的像素进行加权平均来平滑图像。
高斯滤波器的特点是通过调整滤波器的标准差来控制平滑的程度。
与均值滤波器相比,高斯滤波器可以更好地保留图像中的细节信息。
4. 边缘检测滤波器边缘检测滤波器主要用于提取图像中的边缘信息。
常见的边缘检测滤波器包括Sobel滤波器、Prewitt滤波器和Laplacian滤波器等。
这些滤波器通过计算邻域内像素的梯度或者二阶导数来检测图像中的边缘。
边缘检测滤波器在图像识别、目标检测和边缘增强等领域具有广泛的应用。
5. 锐化滤波器锐化滤波器主要用于增强图像中的细节,使图像更加清晰。
常见的锐化滤波器包括拉普拉斯锐化滤波器和Unsharp Masking滤波器。
拉普拉斯锐化滤波器通过计算邻域内像素的二阶导数来增强图像的高频成分。
Unsharp Masking滤波器通过将原始图像与模糊图像进行相减来增强图像的细节。
在应用滤波器时,有一些技巧可以帮助我们获得更好的图像处理结果。
首先,合理选择滤波器的大小。
滤波器的大小应该适当,不能过大或者过小。
均值滤波、中值滤波、高斯滤波公式
均值滤波、中值滤波、高斯滤波的公式如下:
1.均值滤波:使用邻域平均法,用均值代替原图像中的各个像素值。
设有一个滤波
模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度g(x,y),即g(x,y)=∑f(x,y)/m m为该模板中包含当前像素在内的像素总个数。
2.中值滤波:其数学公式为y[n]=median(x[n-k],…,x[n],…,x[n+k]) 其中x xx是原始
信号,y yy是滤波后的信号,n nn是当前位置,k kk是窗口大小。
3.高斯滤波:高斯函数可以用来模拟存在噪声的图像。
假设有一幅大小为N×N像
素的图像f(x,y),那么任意一点(x,y)上的像素值可以用高斯函数来描述:
f(x,y)=∫∫f(u,v)exp[-{(u-x)^2+(v-y)^2}/2σ^2]dudv 其中,f(u,v)是原始图像上(u,v)点的像素值,σ是高斯滤波参数,表示高斯函数的“宽度”。
以上信息仅供参考,如有需要,建议咨询专业人士。
数字图像处理知识点与考点(经典)
第 1 章 导论(知识引导)
1. 图像、数字图像和数字图像处理: 答: “图”是物体投射或反射光的分布,是客观存在的。“像”是人的视觉系统对图在大脑中形成的 印象或认识。图像(image)是图和像的有机结合,即反映物体的客观存在,又体现人的心理因素;是 客观对象的一种可视表示,它包含了被描述对象的有关信息。 数字图像是指由被称作像素(pixel)的小块区域组成的二维矩阵。将物理图像行列划分后,每个小 块区域称为像素。 数字图像处理是指用数字计算机及其它有关数字技术,对图像施加某种运算和处理,从而达到某种 预想目的的技术. 2. 数字图像处理一般包括图像处理、图像分析、图像理解三个层次。 图像处理是对图像本身进行加工,以改善其视觉效果或表现形式,为图像分析打下基础,图像处理 的输出仍是图像。 图像分析是目标图像进行检测和各种物理量的计算,以获取对图像的客观描述。 图像理解是在图像分析的基础上。理解图像所表现的内容,分析图像间的相互联系,得出对客观场 景的解释。 3. 数字图像处理主要包括哪些研究内容? 答:图像处理的任务是将客观世界的景象进行获取并转化为数字图像、进行增强、变换、编码、恢复、 重建、编码和压缩、分割等处理,它将一幅图像转化为另一幅具有新的意义的图像。 4. 一个数字图像处理系统由哪几个模块组成?试说明各模块的作用。 答: 一个基本的数字图像处理系统由图像输入、图像处理和分析、图像存储、图像通信、图像输出5 个模块组成,如下图所示。
说明:通过细心调整折线拐点的位置及控制分段直线的斜率,可对任一灰度区间进行拉伸或压缩。 4.曝光不足或过度的情况下,图像灰度可能会局限在一个很小的范围内,故采用线性变换拉伸图像。 5.直方图的均衡化(考)(习题第四章 6 题,如下示例)与规定化
数字图像处理中的去噪与增强技术探究
数字图像处理中的去噪与增强技术探究数字图像处理是计算机科学领域中的一个重要研究方向,其涉及诸多技术,其中包括去噪与增强技术。
在数字图像处理中,去噪与增强是两个相互关联但又有不同目标的任务。
去噪的目的是消除图像中的噪声,使图像更加清晰和可观察,而图像增强的目的是提高图像的视觉效果,以更好地展示图像的细节和特征。
本文将探究数字图像处理中的去噪与增强技术。
对于数字图像处理中的去噪技术,常见的方法包括平均、中值滤波和小波变换。
平均滤波是一种简单且广泛应用的方法,它通过计算邻域像素的平均值来减少噪声。
这种方法适用于基本的噪声类型,例如加性高斯噪声。
中值滤波则通过将像素值替换为其邻域像素值的中值来去除图像中的异常噪声。
相比于平均滤波,中值滤波能够更好地保留图像的细节。
小波变换是另一种常用的去噪方法,它基于频域分析,能够对不同频率的噪声进行分离和消除。
小波变换的优势在于其可调控的阈值方法,可以根据具体图像的特性进行去噪处理。
在数字图像处理中,增强技术的目标是提高图像的视觉效果和观察性,以更好地展示图像中的特征和细节。
常见的图像增强方法包括直方图均衡化、灰度拉伸和滤波处理。
直方图均衡化方法通过调整图像的像素值分布,增强图像的对比度和亮度。
这种方法对于图像的整体增强效果较好,但可能会导致图像的细节丢失。
灰度拉伸则是通过重新映射图像的灰度级别,将像素值在新的灰度范围内进行重新分布,从而增强图像的对比度。
滤波处理方法则采用各种滤波器对图像进行处理,例如边缘增强、锐化和模糊等,以突出或平滑图像中的特定特征。
除了传统的去噪和增强技术,近年来深度学习的兴起也为数字图像处理带来了新的思路和方法。
通过卷积神经网络(CNN)和生成对抗网络(GAN)等深度学习模型,研究者们在图像去噪和增强任务上取得了显著的成果。
深度学习可以通过大量的数据训练来学习图像中的噪声和特征模式,并在测试阶段对图像进行矫正和增强。
这种基于数据驱动的方法能够在一定程度上提高图像处理的准确性和效果。
中值滤波和均值滤波
中值滤波和均值滤波中值滤波和均值滤波是数字图像处理中常用的两种滤波方法。
它们都是为了去除图像中的噪声而设计的,但在实际应用中有不同的特点和适用场景。
中值滤波是一种非线性滤波方法,其基本思想是用窗口内所有像素的中值来代替中心像素的灰度值。
中值滤波的优点是能有效地去除椒盐噪声等孤立噪声点,同时能保持图像的边缘信息。
在中值滤波中,窗口的大小是一个关键参数,一般选择3×3、5×5等大小的窗口。
中值滤波的过程可以通过以下步骤来实现:1. 对图像进行遍历,对于每个像素点,以其为中心取一个窗口。
2. 将窗口内的像素值排序,取中间值作为滤波结果。
3. 将中值赋给中心像素。
均值滤波是一种线性滤波方法,其基本思想是用窗口内所有像素的平均值来代替中心像素的灰度值。
均值滤波的优点是简单、快速,但其对椒盐噪声等孤立噪声点的去除效果较差,同时会对图像的边缘信息进行模糊处理。
均值滤波的过程可以通过以下步骤来实现:1. 对图像进行遍历,对于每个像素点,以其为中心取一个窗口。
2. 将窗口内的像素值求平均,作为滤波结果。
3. 将平均值赋给中心像素。
中值滤波和均值滤波在去除图像噪声方面有着各自的适用场景。
中值滤波适用于椒盐噪声等孤立噪声点比较严重的图像,能够有效地去除这些噪声点,同时保持图像的边缘信息。
而均值滤波适用于噪声点比较均匀分布的图像,能够对整幅图像进行平滑处理,但对于孤立噪声点的去除效果较差。
在实际应用中,我们需要根据图像的具体情况来选择使用哪种滤波方法。
如果图像中存在着孤立噪声点比较严重,可以采用中值滤波来去除这些噪声点;如果图像中的噪声点比较均匀分布,可以考虑使用均值滤波来平滑整幅图像。
在进行滤波操作时,窗口的大小也是需要考虑的因素。
如果窗口太小,可能无法有效地去除噪声;而如果窗口太大,可能会模糊图像的细节信息。
因此,选择合适的窗口大小也是一个需要注意的问题。
中值滤波和均值滤波是数字图像处理中常用的滤波方法,它们在去除图像噪声方面具有不同的特点和适用场景。
2空域图像滤波实验(邻域平均法、中值滤波法)
《图像处理技术》课程 第2次实验报告试验名称:空域图像滤波实验(邻域平均法、中值滤波法)一、试验目的1.培养学生理解中值滤波的方法2.掌握图像处理的基本方法二、试验设备1、PC 机一台,windows 操作系统;2、CCS 编程环境;三、试验原理中值滤波是由图基(Turky )在1971年提出的,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近真实值,从而消除孤立的噪声点。
对于奇数个元素,中值是指按大小排序后中间的数值;对于偶数个元素,中值是指排序后中间两个元素灰度值的平均值。
对序列而言,中值的定义是这样的:若1,...,n x x 为一组序列,先把其按大小排列为:123i i i in x x x x ≤≤≤≤ 则该序列的中值y 为:{}12121221n 2n i n n n i i x n y Med x x x x x +⎛⎫⎪⎝⎭+⎛⎫ ⎪⎝⎭⎧⎪⎪==⎨⎡⎤⎪+⎢⎥⎪⎢⎥⎣⎦⎩ 为奇数为偶数(11.5)公式11.2.5中,若把一个点的特定长度或形状的邻域作为窗口,在一维情况下,中值滤波器是一个含有奇数个像素的滑动窗口。
窗口中中间那个像素的值用窗口各像素值的中值来代替,设输入序列为{},∈i x i I ,I 为自然数集合或子集,窗口长度为n ,且令12-=n u ,则滤波器的输出为:{}{}-+==i i i u i i u y Med x Med x x x(11.6)公式11.2.6表明i 点的中值仅与窗口前后个点的中值有关,i y 为序列i x 的中值。
若把公式11-2中,中值滤波的概念推广到二维并利用某种形式的二维窗口。
则可对二维中值滤波做如下定义:设(){}2,,∈ij x i j I 表示数字图像各点的灰度值,滤波窗口为A ,ij x 点的中值,则:{}()()(){}2+*+==,,,i,j,I ij ij j r j s Ay Med x Med x r s A ∈∈(11.7)公式11.7为窗口是A的x点的中值表达式,二维中值滤波的窗口通常选为3*3,5*5ij区域,可以取方形,也可以取近似圆形或十字形。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
东华大学实验报告课程 数字图像处理 名称 数字图像变换实验名称: 邻域平均法(box 模板)和中值滤波处理 一、 实验目的图像变换是数字图像处理中的一种综合变换,如直方图变换、几何变换等。
通过本实验,使得学生掌握两种变换的程序实现方法。
二、 实验任务请设计程序,分别用邻域平均法,其模板为:和中值滤波法对testnoise 图像进行去噪处理(中值滤波的模板的大小也设为3×3)。
三、实验环境本实验在Windows 平台上进行,对存及cpu 主频无特别要求,使用VC 或者MINGW (gcc )编译器均可。
四、设计思路 介绍代码的框架结构、所用的数据结构、各个类的介绍(类的功能、类中方法的功能、类的成员变量的作用)、各方法间的关系 试验要求中以给出大致的编程思路和源代码以及代码注释,只有黑框部分需要自己填⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡1111*1111191写。
在此不进行赘述。
五、具体实现实现设计思路中定义的所有的数据类型,对每个操作给出实际算法。
对主程序和其他模块也都需要写出实际算法。
注意:源代码中要加上注释。
代码:(红色为重点代码)<邻域平均法>(3*3)/*------利用第一次实验课提供的 dhc.h 和 dhc.c文件以获取位图的高宽以及从文件头到实际的位图数据的偏移字节数,从而实现对位图实际数据的操作。
------*/#include <stdio.h>#include <stdlib.h>#include <memory.h>#include "hdr.h"/*------定义结构指针------*/struct bmphdr *hdr;//定义用于直方图变量unsigned char *bitmap,*count,*new_color;/*------main()函数编写------*/int main(){//定义整数 i, j 用于函数循环时的,nr_pixels为图像中像素的个数int i, j ,nr_pixels,nr_w,nr_h;//定义两个文件指针分别用于提取原图像的数据和生成直方图均衡化后的图像FILE *fp, *fpnew;//定义主函数的参数包括:输入的位图文件名和输出的位图文件名,此处容可以不要,在DOS下执行命令的时候再临时输入也可,为了方便演示,我这里直接把函数的参数确定了。
// argc=3;// argv[1]="test.bmp";// argv[2]="testzf.bmp";//参数输入出错显示/* if (argc != 3) {printf("please input the name of input and out bitmap files\n");exit(1);}*/// 获取位图文件相关信息// hdr = get_header(argv[1]);hdr = get_header("testnoise.bmp");if (!hdr) exit(1);//以二进制可读方式打开输入位图文件fp = fopen("testnoise.bmp", "rb");if (!fp) {printf("File open error!\n");exit(1);}// 文件指针指向数据区域fseek(fp, hdr->offset, SEEK_SET);//计算位图像素的个数nr_pixels = hdr->width * hdr->height;nr_w = hdr->width;nr_h = hdr->height;bitmap = malloc(nr_pixels);new_color = malloc(nr_pixels);count = malloc((nr_w+2)*(+nr_h+2));//读取位图数据到bitmap中fread(bitmap, nr_pixels, 1, fp);fclose(fp);//因为图像边缘无法使用邻域平均,所以根据邻近颜色填补图像的周围一圈,存入count[]数组中//中心图像存入count[]for(i=nr_w+3;i<(nr_w+2)*(+nr_h+2)-nr_w-3;i++){j=i/(nr_w+2);if(i%(nr_w+2)!=0&&(i+1)%(nr_w+2)!=0) count[i]=bitmap[i-nr_w-1-2*j];}//填补第一排for(i=1;i<nr_w+1;i++){count[i]=bitmap[i-1];}//填补最后一排for(i=1;i<nr_w+1;i++){count[(nr_w+2)*(nr_h+1)+i]=bitmap[nr_w*(nr_h-1)+i-1];}//填补左边一排for(i=0;i<nr_h+3;i++){count[i*(nr_w+2)]=count[i*(nr_w+2)+1];}//填补右边一排for(i=0;i<nr_h+3;i++){count[(i+1)*(nr_w+2)-1]=count[(i+1)*(nr_w+2)-2];}//邻域平均3*3for(j=nr_w+3,i=0;j<(nr_w+2)*(+nr_h+2)-nr_w-3;j++){if(j%(nr_w+2)!=0&&(j+1)%(nr_w+2)!=0)new_color[i]=(count[j]+count[j-1]+count[j+1]+count[j-nr_w-2]+count[j-1-nr_w -2]+count[j+1-nr_w-2]+count[j+nr_w+2]+count[j-1+nr_w+2]+count[j+1+nr_w+2])/9,i++;}//结果存入bitmap[]中for (i = 0; i < nr_pixels; i++)bitmap[i]=new_color[i];// 打开一个以输出文件名命名的文件,设为可写的二进制形式fpnew = fopen("test_lynoise.bmp", "wb+");//由于位图文件的头部信息并没有因直方图均衡化而改变,因此输出图像的头部信息从原位图文件中拷贝即可:fwrite(hdr->signature, 2, 1, fpnew);fwrite(&hdr->size, 4, 1, fpnew);fwrite(hdr->reserved, 4, 1, fpnew);fwrite(&hdr->offset, 4, 1, fpnew);fwrite(&hdr->hdr_size, 4, 1, fpnew);fwrite(&hdr->width, 4, 1, fpnew);fwrite(&hdr->height, 4, 1, fpnew);fwrite(&hdr->nr_planes, 2, 1, fpnew);fwrite(&hdr->bits_per_pixel, 2, 1, fpnew);fwrite(&hdr->compress_type, 4, 1, fpnew);fwrite(&hdr->data_size, 4, 1, fpnew);fwrite(&hdr->resol_hori, 4, 1, fpnew);fwrite(&hdr->resol_vert, 4, 1, fpnew);fwrite(&hdr->nr_colors, 4, 1, fpnew);fwrite(&hdr->important_color, 4, 1, fpnew);if (hdr->offset > 54)fwrite(hdr->info, (hdr->offset - 54), 1, fpnew);//直方图均衡化的数据(bitmap)赋值fwrite(bitmap, nr_pixels, 1, fpnew);//关闭fclose(fpnew);//释放存(优化程序必需)free(hdr);free(bitmap);free(new_color);free(count);return 0; }<中值滤波>/*------利用第一次实验课提供的 dhc.h 和 dhc.c文件以获取位图的高宽以及从文件头到实际的位图数据的偏移字节数,从而实现对位图实际数据的操作。
------*/#include <stdio.h>#include <stdlib.h>#include <memory.h>#include "hdr.h"/*------定义结构指针------*/struct bmphdr *hdr;//定义用于直方图变量unsigned char *bitmap,*count,*new_color;/*------main()函数编写------*/int main(){//定义整数 i, j 用于函数循环时的,nr_pixels为图像中像素的个数int i, j, m, n, nr_pixels,nr_w,nr_h,temp,t[9];//定义两个文件指针分别用于提取原图像的数据和生成直方图均衡化后的图像FILE *fp, *fpnew;//定义主函数的参数包括:输入的位图文件名和输出的位图文件名,此处容可以不要,在DOS下执行命令的时候再临时输入也可,为了方便演示,我这里直接把函数的参数确定了。
// argc=3;// argv[1]="test.bmp";// argv[2]="testzf.bmp";//参数输入出错显示/* if (argc != 3) {printf("please input the name of input and out bitmap files\n");exit(1);}*/// 获取位图文件相关信息// hdr = get_header(argv[1]);hdr = get_header("testnoise.bmp");if (!hdr) exit(1);//以二进制可读方式打开输入位图文件fp = fopen("test.bmp", "rb");if (!fp) {printf("File open error!\n");exit(1);}// 文件指针指向数据区域fseek(fp, hdr->offset, SEEK_SET);//计算位图像素的个数nr_pixels = hdr->width * hdr->height;nr_w = hdr->width;nr_h = hdr->height;bitmap = malloc(nr_pixels);new_color = malloc(nr_pixels);count = malloc((nr_w+2)*(+nr_h+2));//读取位图数据到bitmap中fread(bitmap, nr_pixels, 1, fp);fclose(fp);//因为图像边缘无法使用邻域平均,所以根据邻近颜色填补图像的周围一圈,存入count[]数组中//中心图像存入count[]for(i=nr_w+3;i<(nr_w+2)*(+nr_h+2)-nr_w-3;i++){j=i/(nr_w+2);if(i%(nr_w+2)!=0&&(i+1)%(nr_w+2)!=0) count[i]=bitmap[i-nr_w-1-2*j];}//填补第一排for(i=1;i<nr_w+1;i++){count[i]=bitmap[i-1];}//填补最后一排for(i=1;i<nr_w+1;i++){count[(nr_w+2)*(nr_h+1)+i]=bitmap[nr_w*(nr_h-1)+i-1];}//填补左边一排for(i=0;i<nr_h+3;i++){count[i*(nr_w+2)]=count[i*(nr_w+2)+1];}//填补右边一排for(i=0;i<nr_h+3;i++){count[(i+1)*(nr_w+2)-1]=count[(i+1)*(nr_w+2)-2];}//中值平均3*3for(j=nr_w+3,i=0;j<(nr_w+2)*(+nr_h+2)-nr_w-3;j++){if(j%(nr_w+2)!=0&&(j+1)%(nr_w+2)!=0){t[0]=count[j];t[1]=count[j-1];t[2]=count[j+1];t[3]=count[j-nr_w-2];t[4]=count[j-1-nr_w-2];t[5]=count[j+1-nr_w-2];t[6]=count[j+nr_w+2];t[7]=count[j-1+nr_w+2];t[8]=count[j+1+nr_w+2];for(m=0;m<9;m++)for(n=0;n<9-m;n++)if(t[n]>t[n+1]){temp=t[n];t[n]=t[n+1];t[n+1]=temp;}new_color[i]=t[4];i++;}}//结果存入bitmap[]中for (i = 0; i < nr_pixels; i++)bitmap[i]=new_color[i];// 打开一个以输出文件名命名的文件,设为可写的二进制形式fpnew = fopen("test_zznoise.bmp", "wb+");//由于位图文件的头部信息并没有因直方图均衡化而改变,因此输出图像的头部信息从原位图文件中拷贝即可:fwrite(hdr->signature, 2, 1, fpnew);fwrite(&hdr->size, 4, 1, fpnew);fwrite(hdr->reserved, 4, 1, fpnew);fwrite(&hdr->offset, 4, 1, fpnew);fwrite(&hdr->hdr_size, 4, 1, fpnew);fwrite(&hdr->width, 4, 1, fpnew);fwrite(&hdr->height, 4, 1, fpnew);fwrite(&hdr->nr_planes, 2, 1, fpnew);fwrite(&hdr->bits_per_pixel, 2, 1, fpnew);fwrite(&hdr->compress_type, 4, 1, fpnew);fwrite(&hdr->data_size, 4, 1, fpnew);fwrite(&hdr->resol_hori, 4, 1, fpnew);fwrite(&hdr->resol_vert, 4, 1, fpnew);fwrite(&hdr->nr_colors, 4, 1, fpnew);fwrite(&hdr->important_color, 4, 1, fpnew);if (hdr->offset > 54)fwrite(hdr->info, (hdr->offset - 54), 1, fpnew);//直方图均衡化的数据(bitmap)赋值fwrite(bitmap, nr_pixels, 1, fpnew);//关闭fclose(fpnew);//释放存(优化程序必需)free(hdr);free(bitmap);free(new_color);free(count);return 0;}得出实验结果图像后,比较这两种方法去噪的效果好坏,并分析具体原因。