数字图像处理实验报告[邻域平均法和中值滤波法]

合集下载

数字图像处理实验报告

数字图像处理实验报告

目录实验一数字图像滤波处理 (2)实验二数字图像锐化处理 (10)实验三数字图像平滑处理 (14)实验四数字图像的直方图规定化 (16)实验五数字图像的傅立叶变换 (20)实验一 数字图像滤波处理一、 实验目的(一) 掌握数字图像滤波处理的算法原理。

(二) 熟悉数字图像滤波处理的算法原理。

二、 实验原理和方法(一)均值滤波平滑线形空间滤波的输出(响应)是包含在滤波掩模邻域内像素的简单平均值。

因此,这些滤波器也称均值滤波器,指的是低通滤波器。

它是用滤波掩模确定的邻域内像素的平均灰度值代替图像中每个像素点的值,这种处理减小了图像灰度的“尖锐”变化。

图1-1显示了两个33⨯的平滑滤波器。

第一个滤波器产生掩模下的标准像素平均值,把掩模系数代入式z w z w z w z w i i i R ∑==+++=91992211 (1.1)(w 为掩模系数,z 为与该系数对应的灰度值)即可得∑=911i z R (1.2)图1-1 两个33⨯均值滤波器掩模。

R 是由掩模定义的33⨯邻域像素灰度的平均值。

一个n m ⨯掩模应有mn 1的归一化常数。

图1-1第二种掩模更重要,也称加权平均,处于掩模中心位置的像素比其他任何像素就显得不太重要 。

由于对角项离中心比离正交方向相邻的像素更远,所以它的重要性比与中心直接相邻的四个像素低。

把中心点加强的最高,而随着距中心加强为最高,而随着距中心点距离的增加减小系数值,是为了减小平滑处理中的模糊。

所有系数的和是16,2的整数次幂,便于计算机的实现。

一幅N M ⨯的图像经过一个n m ⨯(m 和n 是奇数)的加权均值滤波器滤波的过程可由下式给出:)())(()(∑∑∑∑-=-=-=-=++=a a s bbt a a s bbt t s w t y s x f t s w y x g ,,,, (1.3)可理解为一幅完全滤波的图像是由对1,2,1,0-=M x 和1,2,1,0-=N y 执行式(1.3)得到的。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理试验报告实验二:数字图像的空间滤波和频域滤波姓名:XX学号:2XXXXXXX 实验日期:2017 年4 月26 日1.实验目的1. 掌握图像滤波的基本定义及目的。

2. 理解空间域滤波的基本原理及方法。

3. 掌握进行图像的空域滤波的方法。

4. 掌握傅立叶变换及逆变换的基本原理方法。

5. 理解频域滤波的基本原理及方法。

6. 掌握进行图像的频域滤波的方法。

2.实验内容与要求1. 平滑空间滤波:1) 读出一幅图像,给这幅图像分别加入椒盐噪声和高斯噪声后并与前一张图显示在同一图像窗口中。

2) 对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果,要求在同一窗口中显示。

3) 使用函数 imfilter 时,分别采用不同的填充方法(或边界选项,如零填充、’replicate’、’symmetric’、’circular’)进行低通滤波,显示处理后的图像。

4) 运用 for 循环,将加有椒盐噪声的图像进行 10 次,20 次均值滤波,查看其特点, 显示均值处理后的图像(提示:利用fspecial 函数的’average’类型生成均值滤波器)。

5) 对加入椒盐噪声的图像分别采用均值滤波法,和中值滤波法对有噪声的图像做处理,要求在同一窗口中显示结果。

6) 自己设计平滑空间滤波器,并将其对噪声图像进行处理,显示处理后的图像。

2. 锐化空间滤波1) 读出一幅图像,采用3×3 的拉普拉斯算子 w = [ 1, 1, 1; 1 – 8 1; 1, 1, 1]对其进行滤波。

2) 编写函数w = genlaplacian(n),自动产生任一奇数尺寸n 的拉普拉斯算子,如5×5的拉普拉斯算子w = [ 1 1 1 1 11 1 1 1 11 1 -24 1 11 1 1 1 11 1 1 1 1]3) 分别采用5×5,9×9,15×15和25×25大小的拉普拉斯算子对进行锐化滤波,并利用式g(x, y) ?f (x, y) ? ?2 f (x, y) 完成图像的锐化增强,观察其有何不同,要求在同一窗口中显示。

数字图像处理实验报告3

数字图像处理实验报告3

实验报告实验项目名称:数字图像的空间滤波法 (所属课程: 数字图像处理 )院 系: 专业班级: 姓 名 学 号: 实验日期: 实验地点:A07-602指导教师: 本实验项目成绩: 教师签字: 日期: 1.实验目的1. 掌握图像滤波的基本定义及目的。

2. 理解空间域滤波的基本原理及方法。

3. 掌握进行图像的空域滤波的方法。

2.实验环境(软件、硬件及条件)Windows XP 系统MATLAB 软件3.实验方法1. 平滑空间滤波:1) 读出eight.tif 这幅图像,给这幅图像分别加入椒盐噪声和高斯噪声后并与前一张图显示在同一图像窗口中。

2) 对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果,要求在同一窗口中显示。

3) 使用函数imfilter 时,分别采用不同的填充方法(或边界选项,如零填充、’replicate ’、’symmetric ’、’circular ’)进行低通滤波,显示处理后的图像。

4) 运用for 循环,将加有椒盐噪声的图像进行10次,20次均值滤波,查看其特点,显示均值处理后的图像(提示:利用fspecial 函数的’average’类型生成均值滤波器)。

5) 对加入椒盐噪声的图像分别采用均值滤波法,和中值滤波法对有噪声的图像做处理,要求在同一窗口中显示结果。

6) 自己设计平滑空间滤波器,并将其对噪声图像进行处理,显示处理后的图像。

2. 锐化空间滤波1) 读出moon.tif 这幅图像,采用3×3的拉普拉斯算子w = [ 1, 1, 1; 1 – 8 1; 1, 1, 1]对其进行滤波。

2) 编写函数w = genlaplacian(n),自动产生任一奇数尺寸n 的拉普拉斯算子,如5×5 的拉普拉斯算子。

3) 分别采用5×5,9×9,15×15和25×25大小的拉普拉斯算子对blurry_moon.tif进行锐化滤波,并利用式2(,)(,)(,)g x y f x y f x y =-∇完成图像的锐化增强,观察其有何不同,要求在同一窗口中显示。

数字图像处理实验教学报告.doc

数字图像处理实验教学报告.doc

数字图像处理实验报告实验内容:主要实现以下几个内容:⑴直方图均衡化(histogram equalization ) ⑵直方图匹配(histogram matching ) ⑶邻域平均(neighborhood averaging ) ⑷局域增强(local enhancement ) ⑸中值滤波(median filtering )。

二.实验目的:下载安装MATLAB 图像处理工具箱,对图像进行处理;学会用Matlab 中的下列函数对输入图像进行上述5类运算;感受各种不同的图像处理方法对最终图像效果的影响。

Imhist :对灰度图像画直方图 Histeq :是图像直方图均衡化处理 Nlfilter :实现双边滤波器mean2:图像处理工具箱中的函数,用来计算矩阵元素的平均数 std2:计算矩阵元素的标准差 fspecial :建立预定义的滤波算子 filter2:使用指定的滤波器进行滤波 medfilt2:中值滤波三.实验步骤1.仔细阅读Matlab 帮助文件中有关以上函数的使用说明,能充分理解其使用方法并能运用它们完成实验内容。

2.将桌面上文件1(a).jpg 图像文件用函数imread 读入Matlab 中,对其作直方图均衡化和直方图匹配运算,显示运算前后该图像的直方图,处理后的图像和灰度变换函数。

直方图反映灰度等级的分布情况,本实验指定的直方图如下:1400×rr ≤5 7000-310×r 5<r ≤20 900-5×r 20<r ≤180 -1440+8×r 180<r ≤225 3060-12×r225<r ≤2553.将文件2.jpg 图像文件读入Matlab ,用nlfilter 对其进行3×3邻域平均和计算邻域标准差,再对其黑暗部分的特征进行局域增强而保持明亮部分图像不变,显示增强后的效果图。

在进行局域增强时,应按下列算法进行:E ·f (x ,y ) if m Sxy ≤k 0M G and k 1D G ≤σSxy ≤k 2D G f (x ,y )otherwisen =g (x ,y )=适当调整k 0,k 1和k 2的值,使局域增强达到最佳效果。

邻域平均实验报告

邻域平均实验报告

一、试验内容:1.熟悉程序基本框架;2.读取位图,转换为灰度图;3.完成灰度图像的平滑和锐化处理。

二、试验方法:1. 图像平滑(1)邻域平均法算法思想:邻域平均法是用像素及其指定邻域内像素的平均值或加权平均值作为该像素的新值,以便除去突变的像素点,从而滤除一定的噪声。

本试验采用3*3高斯模板对图像进行处理,主要程序如下:void CWvltDoc::Onsmo(){// TODO: Add your command handler code hereLPBITMAPINFOHEADER lpBitmapInfoHeader = (LPBITMAPINFOHEADER)(m_pBitmap+14);//信息头LPBITMAPFILEHEADER lpBitmapFileHeader = (LPBITMAPFILEHEADER)m_pBitmap;//文件头unsigned char *lpData = m_pBitmap + lpBitmapFileHeader->bfOffBits;//指向实际位图信息数据unsigned long biHeight = lpBitmapInfoHeader->biHeight;unsigned long biWidth = lpBitmapInfoHeader->biWidth;unsigned long biAlign = ( biWidth*3+3) /4 *4;//实际宽度unsigned long bmSize = biHeight * biAlign;if (m_pTransfered == NULL)m_pTransfered = (unsigned char*)malloc(bmSize);if (m_pTransfered2 == NULL)m_pTransfered2 = (unsigned char*)malloc(bmSize);if (m_pTransfered2 == NULL)return ;int tem_height,tem_width,tem[3][3]={1,2,1,2,4,2,1,2,1};double tem_xishu;tem_height=3;tem_width=3;tem_xishu=16;int x, y, cur;for (y = 0; y < (int)biHeight; y++){for (x = 0; x < (int)biWidth; x++){cur = y*biAlign+3*x; //current pixel当前像素位置m_pTransfered[cur]=(lpData[cur]+lpData[cur+1]+lpData[cur+2])/3;m_pTransfered[cur+1]=m_pTransfered[cur];m_pTransfered[cur+2]=m_pTransfered[cur];}}for (int j = 0; j < (int)biHeight; j++){for (int i = 0; i < (int)biWidth; i++){cur = j*biAlign+3*i;m_pTransfered2[cur]=(m_pTransfered[cur-biAlign-3]*tem[0][0]+m_pTransfered[cur-3]*tem [0][1]+m_pTransfered[cur-3+biAlign]*tem[0][2]+m_pTransfered[cur-biAlign]*tem[1][0]+m_pTr ansfered[cur]*tem[1][1]+m_pTransfered[cur+biAlign]*tem[1][2]+m_pTransfered[cur-biAlign+3] *tem[2][0]+m_pTransfered[cur+3]*tem[2][1]+m_pTransfered[cur+3+biAlign]*tem[2][2])/tem_xi shu;m_pTransfered2[cur+1]= m_pTransfered2[cur];m_pTransfered2[cur+2]= m_pTransfered2[cur];}}UpdateAllViews(NULL);}(2)中值滤波法算法思想:把以某像素为中心的小窗口内的所有像素的灰度按从小到大排序,取排序结果的中间值作为该像素的灰度值。

数字图像处理实验报告.doc

数字图像处理实验报告.doc

数字图像处理试验报告实验二:数字图像的空间滤波和频域滤波姓名: XX学号: 2XXXXXXX实验日期:2017年4月26日1. 实验目的1. 掌握图像滤波的基本定义及目的。

2. 理解空间域滤波的基本原理及方法。

3. 掌握进行图像的空域滤波的方法。

4. 掌握傅立叶变换及逆变换的基本原理方法。

5. 理解频域滤波的基本原理及方法。

6. 掌握进行图像的频域滤波的方法。

2. 实验内容与要求1. 平滑空间滤波:1) 读出一幅图像,给这幅图像分别加入椒盐噪声和高斯噪声后并与前一张图显示在同一图像窗口中。

2)对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果,要求在同一窗口中显示。

3)使用函数 imfilter时,分别采用不同的填充方法(或边界选项,如零填充、’ replicate ’、’ symmetric ’、’ circular ’)进行低通滤波,显示处理后的图像。

4) 运用 for 循环,将加有椒盐噪声的图像进行10 次, 20 次均值滤波,查看其特点, 显示均值处理后的图像(提示 : 利用 fspecial 函数的’ average ’类型生成均值滤波器)。

5) 对加入椒盐噪声的图像分别采用均值滤波法,和中值滤波法对有噪声的图像做处理,要求在同一窗口中显示结果。

6)自己设计平滑空间滤波器,并将其对噪声图像进行处理,显示处理后的图像。

2.锐化空间滤波1) 读出一幅图像,采用3×3 的拉普拉斯算子 w = [ 1, 1, 1; 1 – 81;1,1, 1]对其进行滤波。

2) 编写函数 w = genlaplacian(n) ,自动产生任一奇数尺寸n 的拉普拉斯算子,如 5×5的拉普拉斯算子w = [ 1 1 1 1 11 1 1 1 11 1 -24 1 11 1 1 1 11 1 1 1 1]3) 分别采用5×5,9×9,15×15 和 25×25 大小的拉普拉斯算子对blurry_moon.tif进行锐化滤波,并利用式 g(x, y)2 f (x, y) 完成图像的锐化增强,观察其有何f (x, y)不同,要求在同一窗口中显示。

数字图像处理实验三(邻域平均法和中值滤波)

数字图像处理实验三(邻域平均法和中值滤波)

数字图像处理 实验三
邻域平均法(box 模板)和中值滤波处理
加入脉冲噪声后的图像:testnoise.bmp 去噪过程 结果图像
请设计程序,分别用邻域平均法,其模板为:
和中值滤波法对testnoise 图像进行去噪处理(中值滤波的模板的大小也设为3×3)。

得出实验结果图像后,比较这两种方法去噪的效果好坏,并分析具体原因。

完成上述工作后,使用程序进行验证分析:使用邻域平均法时,3×3和5×5模板大小对图像进行处理的效果有何差别?并分析原因。

附加说明:程序框架可以参考第二次实验指导书上给出的示例程序。

邻域平均法 中值滤波法
⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡1111*1111191。

数字图像处理 实验报告(完整版)

数字图像处理 实验报告(完整版)

数字图像处理实验一 MATLAB数字图像处理初步一、显示图像1.利用imread( )函数读取一幅图像,假设其名为lily.tif,存入一个数组中;2.利用whos 命令提取该读入图像flower.tif的基本信息;3.利用imshow()函数来显示这幅图像;实验结果如下图:源代码:>>I=imread('lily.tif')>> whos I>> imshow(I)二、压缩图像4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为lily.jpg;语法:imwrite(原图像,新图像,‘quality’,q), q取0-100。

6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flily.bmp。

7.用imread()读入图像Sunset.jpg和Winter.jpg;8.用imfinfo()获取图像Sunset.jpg和Winter.jpg的大小;9.用figure,imshow()分别将Sunset.jpg和Winter.jpg显示出来,观察两幅图像的质量。

其中9的实验结果如下图:源代码:4~6(接上面两个) >>I=imread('lily.tif')>> imfinfo 'lily.tif';>> imwrite(I,'lily.jpg','quality',20);>> imwrite(I,'lily.bmp');7~9 >>I=imread('Sunset.jpg');>>J=imread('Winter.jpg')>>imfinfo 'Sunset.jpg'>> imfinfo 'Winter.jpg'>>figure(1),imshow('Sunset.jpg')>>figure(2),imshow('Winter.jpg')三、二值化图像10.用im2bw将一幅灰度图像转化为二值图像,并且用imshow显示出来观察图像的特征。

数字图像处理实验报告2

数字图像处理实验报告2

实验二: 数字图像的空间域滤波——平滑滤波1. 1. 实验目的2.掌握图像滤波的基本定义及目的。

3.理解空间域滤波的基本原理及方法。

4.掌握进行图像的空域滤波的方法。

1. 2. 实验基本原理2.空间域增强空间域滤波是在图像空间中借助模板对图像进行领域操作, 处理图像每一个像素的取值都是根据模板对输入像素相应领域内的像素值进行计算得到的。

空域滤波基本上是让图像在频域空间内某个范围的分量受到抑制, 同时保证其他分量不变, 达到增强图像的目的。

空域滤波一般分为线性滤波和非线性滤波两类。

各种空域滤波器根据功能主要分为平滑滤波器和锐化滤波器。

平滑的目的可分为两类: 一类是模糊, 目的是在提取较大的目标前去除太小的细节或将目标内的小肩端连接起来;另一类是消除噪声。

锐化的目的是为了增强被模糊的细节。

结合这两种分类方法, 可将空间滤波增强分为四类:线性平滑滤波器(低通)非线性平滑滤波器(低通)线性锐化滤波器(高通)非线性锐化滤波器(高通)1)空间滤波器都是基于模板卷积, 其主要工作步骤是:2)将模板在图中移动, 并将模板中心与图中某个像素位置重合;3)将模板上的系数与模板下对应的像素相乘;4)将所有乘积相加;5)将和(模板的输出响应)赋给图中对应模板中心位置的像素。

3.平滑滤波器1)线性平滑滤波器线性低通平滑滤波器也称为均值滤波器, 这种滤波器的所有系数都是正数, 对3×3的模板来说, 最简单的是取所有系数为1, 为了保持输出图像任然在原来图像的灰度值范围内, 模板与象素邻域的乘积都要除以9。

MATLAB 提供了fspecial 函数生成滤波时所用的模板, 并提供filter2和imfilter 函数用指定的滤波器模板对图像进行运算。

函数fspecial 的语法格式为:h=fspecial(type);h=fspecial(type,parameters);其中参数type 指定滤波器的种类, parameters 是与滤波器种类有关的具体参数。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告实验一数字图像的获取一、实验目的1、了解图像的实际获取过程。

2、巩固图像空间分辨率和灰度级分辨率、邻域等重要概念。

3、熟练掌握图像读、写、显示、类型转换等matlab函数的用法。

二、实验内容1、读取一幅彩色图像,将该彩色图像转化为灰度图像,再将灰度图像转化为索引图像并显示所有图像。

2、编程实现空间分辨率变化的效果。

三、实验原理1、图像读、写、显示I=imread(‘image.jpg’)Imview(I)Imshow(I)Imwrite(I,’wodeimage.jpg’)2、图像类型转换I=mat2gray(A,[amin,amax]);按指定的取值区间[amin,amax]将数据矩阵A转化为灰度图像I,amin对应灰度0,amax对应1,也可以不指定该区间。

[x,map]=gray2ind(I,n);按指定的灰度级n将灰度图像转化为索引图像,n默认为64I=ind2gray(x,map);索引图像转化为灰度图像I=grb2gray(RGB);真彩色图像转化为灰度图像[x,map]=rgb2ind(RGB);真彩色图像转化为索引图像RGB=ind2rgb(x,map);索引图像转化为真彩色图像BW=im2bw(I,level);将灰度图像转化为二值图像,level取值在[0,1]之间BW=im2bw(x,map,level);将索引图像转化为二值图像,level取值在[0,1]之间BW=im2bw(RGB,level);将真彩色图像转化为二值图像,level取值在[0,1]之间四、实验代码及结果1、in=imread('peppers.png');i=rgb2gray(in);[x,map]=gray2ind(i,128);subplot(131),imshow(in)subplot(132),imshow(i)subplot(133),imshow(x),colormap(map)2、%空间分辨率变化的效果clc,close all,cleari=imread('cameraman.tif');i=imresize(i,[256,256]);i1=i(1:2:end,1:2:end);[m1,n1]=size(i)i2=i1(1:2:end,1:2:end);[m2,n2]=size(i2)i3=i2(1:2:end,1:2:end);[m3,n3]=size(i3)subplot(221),imshow(i),xlabel('256x256')subplot(222),imshow(i1),xlabel('128x128')subplot(223),imshow(i2),xlabel('64x64')subplot(224),imshow(i3),xlabel('32x32')256 x 256128 x 12864 x 6432 x 32实验二图像的几何变换一、实验目的掌握图像的基本几何变换的方法1、图像的平移2、图像的旋转二、实验内容练习用matalb 命令实现图像的平移、旋转操作1、.编写实现图像平移的函数2、用imread 命令从你的硬盘读取一幅256×256灰度图;3、调用平移函数,将256×256灰度图平移100行200列,在同一个窗口中显示平移前和平移后的图像。

数字图像处理实验三中值滤波和均值滤波实验报告

数字图像处理实验三中值滤波和均值滤波实验报告

数字图像处理实验三均值滤波、中值滤波的计算机实现12281166 崔雪莹计科1202 班一、实验目的:1)熟悉均值滤波、中值滤波处理的理论基础;2)掌握均值滤波、中值滤波的计算机实现方法;3)学习VC++ 6。

0 的编程方法;4)验证均值滤波、中值滤波处理理论;5)观察均值滤波、中值滤波处理的结果。

二、实验的软、硬件平台:硬件:微型图像处理系统,包括:主机,PC机;摄像机;软件:操作系统:WINDOWS2000或WINDOWSXP应用软件:VC++6.0三、实验内容:1)握高级语言编程技术;2)编制均值滤波、中值滤波处理程序的方法;3)编译并生成可执行文件;4)考察处理结果。

四、实验要求:1)学习VC+确6。

0编程的步骤及流程;2)编写均值滤波、中值滤波的程序;3)编译并改错;4)把该程序嵌入试验二给出的界面中(作适当修改);5)提交程序及文档;6)写出本次实验的体会。

五、实验结果截图实验均值滤波采用的是3X3的方块,取周围的像素点取得其均值代替原像素点。

边缘像素的处理方法是复制边缘的像素点,增加一个边框,计算里面的像素值得均值滤波。

均值氓浜1W赵六、实验体会本次实验在前一次的实验基础上增加均值滤波和中值滤波,对于椒盐噪声的处理,发现中值滤波的效果更为好一点,而均值滤波是的整个图像变得模糊了一点,效果差异较大。

本次实验更加增加了对数字图像处理的了解与学习。

七、实验程序代码注释及分析// HistDemoADIg.h :头文件//#in elude "ImageWnd.h"#pragma once// CHistDemoADIg 对话框classCHistDemoADIg : public CDialogEx{//构造public:CHistDemoADlg(CWnd* pParent = NULL); // 标准构造函数intnWidth;intnHeight;intnLen;intnByteWidth;BYTE *lpBackup;BYTE *lpBitmap;BYTE *lpBits;CStringFileName;CImageWndsource,dest;// 对话框数据enum { IDD = IDD_HISTDEMOA_DIALOG };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:voidLoadBitmap(void);afx_msg void OnOpen();afx_msg void OnHist();voidHistogramEq(void);voidNoColor(void);void HistogramEq1(intnWidth,intnHeight,BYTE *lpInput,BYTE *lpOutput);voidMeanFilter(intnWidth,intnHeight,BYTE *lpInput,BYTE *lpOutput);voidMedianFilter(intnWidth,intnHeight,BYTE *lpInput,BYTE *lpOutput); afx_msgvoid OnBnClickedClose();afx_msg void OnBnClickedMeanfilter();afx_msg void OnBnClickedMedianfilter();};HistDemoADlg.cpp 对HistDemoADlg.h 进行具体的实现,OnOpen() 函数响应ID 为IDC_OPEN的按钮事件,而且会调取文件选择对话框,选取文件之后,会显示在原始图像区域显示对应的位图图像,OnHist()函数会响应ID为IDC_HIST的按钮事件,调用HistogramEq()进行直方图均衡化的处理,HistogramEq()会调用HistogramEq1()进行直方图均衡化的处理,并用dst.setlmage()显示处理之后的图像,以及NoColor()函数,对原始图像转化为灰度图像之后再显示。

数字图像处理实验报告 (2)

数字图像处理实验报告 (2)

数字图像处理实验报告实验一数字图像基本操作及灰度调整一、实验目得1)掌握读、写图像得基本方法。

2)掌握MATLAB语言中图像数据与信息得读取方法。

3)理解图像灰度变换处理在图像增强得作用。

4)掌握绘制灰度直方图得方法,理解灰度直方图得灰度变换及均衡化得方法。

二、实验内容与要求1.熟悉MATLAB语言中对图像数据读取,显示等基本函数特别需要熟悉下列命令:熟悉imread()函数、imwrite()函数、size()函数、Subplot()函数、Figure()函数。

1)将MA TLAB目录下work文件夹中得forest、tif图像文件读出、用到imread,imfinfo等文件,观察一下图像数据,了解一下数字图像在MATLAB中得处理就就是处理一个矩阵。

将这个图像显示出来(用imshow)。

尝试修改map颜色矩阵得值,再将图像显示出来,观察图像颜色得变化。

2)将MATLAB目录下work文件夹中得b747、jpg图像文件读出,用rgb2gray()将其转化为灰度图像,记为变量B。

2.图像灰度变换处理在图像增强得作用读入不同情况得图像,请自己编程与调用Matlab函数用常用灰度变换函数对输入图像进行灰度变换,比较相应得处理效果。

3.绘制图像灰度直方图得方法,对图像进行均衡化处理请自己编程与调用Matlab函数完成如下实验。

1)显示B得图像及灰度直方图,可以发现其灰度值集中在一段区域,用imadjust函数将它得灰度值调整到[0,1]之间,并观察调整后得图像与原图像得差别,调整后得灰度直方图与原灰度直方图得区别。

2)对B进行直方图均衡化处理,试比较与源图得异同。

3)对B进行如图所示得分段线形变换处理,试比较与直方图均衡化处理得异同。

图1、1分段线性变换函数三、实验原理与算法分析1.灰度变换灰度变换就是图像增强得一种重要手段,它常用于改变图象得灰度范围及分布,就是图象数字化及图象显示得重要工具。

1)图像反转灰度级范围为[0,L-1]得图像反转可由下式获得2)对数运算:有时原图得动态范围太大,超出某些显示设备得允许动态范围,如直接使用原图,则一部分细节可能丢失。

2空域图像滤波实验(邻域平均法、中值滤波法)

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区域,可以取方形,也可以取近似圆形或十字形。

《数字图像处理》实验二报告

《数字图像处理》实验二报告

成绩:数字图像处理实验报告实验一:数字图像的matlab实现学号:0967118202姓名:张建波同组人:电脑编号:实验时间:2012年06月06日星期三数字图像处理实验报告一、实验名称图像处理的Matlab 实现二、实验目的1、了解Matlab 及其工具箱的基本使用方法2、掌握使用Matlab 打开各种图像文件的方法3、掌握使用Matlab 进行简单图像处理的方法三、实验平台Windows XP 、Matlab四、实验内容1、编写一个可实现直方图均衡化的程序2、编写一个可实现图像对比度增强的程序3、编写一个可使用邻域平均法进行图像处理的程序五、实验原理1、直方图均衡化直方图均衡化处理可将图像的灰度范围拉开,让灰度直方图在较大的动态范围内趋于一致。

用图像),(y x f 的直方图代替灰度的分布密度函数)(f p f ,则直方图均衡化后的图像g 为:⎰==ff du u p f Tg 0)(][ 对于数字图像,设原图像的像素总数为N ,灰度级的个数为L ,第k 个灰度级出现的频数为k n 。

若原图像),(y x f 在像素点),(y x 处的灰度为k r ,则直方图均衡化后的图像),(y x g 在),(y x 处的灰度k s 为:∑===kl l k k N n r T s 0][ MATLAB 图像处理工具箱提供了用于直方图均衡化的函数histep 。

histep 函数的语法格式为:J=histep(I ,hgram)J=histep(I ,n)[J ,T]=histep(I ,…)newmap=histep(X ,map ,hgram)newmap=histep(X ,map)[newmap ,T]=histep(X ,…)其中J=histep(I ,hgram)将原始图像I 的直方图变成用户指定的向量hgram ,hgram 中的各元素值域为[0,1]。

J=histep(I ,n)指定直方图均衡化后的灰度级数n ,默认值为64。

数字图像处理实验-滤波

数字图像处理实验-滤波

实验三1.实验目的:(1)对指定图像进行均值、中值滤波增强,比较增强的效果;(2)对图片进行噪声处理,进行图像恢复;2.实验内容:对指定图像进行均值、中值滤波增强,比较增强的效果。

图1是一张原始人物图像,图2是一张近似20%像素带有冲激噪声后的人物图像。

现分别利用①5×5区域的邻域平均法和②5×5中值滤波法对图2进行去噪声处理,进行图像恢复。

将原始图像及增强后的图像都显示于屏幕上,观察两种方法对去噪的不同作用。

图1图23.实验结果(代码&结果可视化)1、利用已有的图像处理应用软件集成环境编写相应的平滑程序。

5×5邻域平均法:邻域平均是最简单的平滑滤波,即是将原图的一个像素的灰度值和它周围邻近的24个像素的灰度值相加,然后求得的平均值作为新图该像素的灰度值。

具体算法类似与图像锐化。

5×5中值滤波法:采用滑动窗口法设窗口为5×5 的矩形,该窗口在被处理的图像上逐点移动内含25个像素,每次移动均计算一次中值,赋给窗口中间点,作为其灰度,具体算法类似邻域平均。

2、核心程序:邻域平均核心算法类似梯度锐化,本报告只给出中值滤波的核心程序:// 开始中值滤波// 行(除去边缘几行)for(i = iFilterMY; i < lHeight - iFilterH + iFilterMY + 1; i++){// 列(除去边缘几列)for(j = iFilterMX; j < lWidth - iFilterW + iFilterMX + 1; j++){// 指向新DIB第i行第j个像素的指针lpDst = (unsigned char*)lpNewDIBBits + lLineBytes * (lHeight - 1 - i) + j;// 读取滤波器数组for (k = 0; k < iFilterH; k++){for (l = 0; l < iFilterW; l++){lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i + iFilterMY - k) + j - iFilterMX + l;// 保存像素值aValue[k * iFilterW + l] = *lpSrc;}}// 获取中值* lpDst = GetMedianNum(aValue, iFilterH * iFilterW);}}4.实验分析和总结采用滤波器(低频/高频)处理后的图像可以更加平滑,可以对图像去除噪音,恢复到原始图像。

完整word版数字图像处理邻域平均法滤波实验报告matlab实现

完整word版数字图像处理邻域平均法滤波实验报告matlab实现

完整word版数字图像处理邻域平均法滤波实验报告matlab实现数字图像处理实验报告实验三邻域平均法滤波学号姓名实验三邻域平均法滤波⼀、实验内容选取噪声较明显的图像,分别采⽤3*3、5*5、7*7的模板进⾏邻域平均法滤波,并⽐较滤波效果。

⼆、实验步骤1、设计思想或者流程图。

邻域平均法的思想是⽤像素及其指定邻域内像素的平均值或加权平均值作为该像素的新值,以便去除突变的像素点,从⽽滤除⼀定的噪声。

邻域平均法的数学含义可⽤下式表⽰:wziii1)(x,yg mnw i(1)mn??1?i wz(x,y)为中⼼的邻域像素值;是对每个邻域像素的加权系上式中:是以ii数或模板系数;是加权系数的个数或称为模板⼤⼩。

邻域平均法中常⽤的模mn板是:111??1??11??1T??Box9??111??(2)为了解决邻域平均法造成的图像模糊问题,采⽤阈值法(⼜叫做超限邻域平均法,如果某个像素的灰度值⼤于其邻域像素的平均值,且达到⼀定⽔平,则判断该像素为噪声,继⽽⽤邻域像素的均值取代这⼀像素值;否则,认为该像素不T:是噪声点,不予取代),给定阈值0?)x,y)x,y?Tf(yf(x,)? g(0?y)xh(,?)g(x,)(yf(x,)?gx,y?Ty?0(3)f(x,y)g(x,y)是由(1)式计算的平均值,是原始含噪声图像,(3)式中,h(x,y)滤波后的像素值。

2、源程序并附上注释。

3、A=imread('1.jpg');B=rgb2gray(A);figure; imshow(B); title('原始图象');H=imnoise(B,'gaussian');figure; imshow(H); title('⾼斯噪声');Q=imnoise(B,'salt & pepper');figure; imshow(Q); title('椒盐噪声');M=fspecial('average',3*3);E=imfilter(Q,M);figure; imshow(E); title('3*3平均模板'); N=fspecial('average',5*5);K=imfilter(Q,N);figure; imshow(K); title('5*5平均模板'); Z=fspecial('average',7*7);J=imfilter(Q,Z);figure; imshow(J); title('7*7平均模板');4、程序运⾏结果⽐较。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告指导老师:***小组成员:刘立超 0710210230郑琳 0710210109南京理工大学自动化学院2010年12月1 图像变换(1)DCT 变换公式:①1维DCT 变换:1D 正变换1D 反变换f x = 1N F 0 + 2N F u N−1u =1cos 2x +1 uπ2N②2维DCT 变换:2D 正变换:2D 反变换:其中:c x = 1/ 2,x =01,x ≠0(2)C++文件中函数的参量形式分别为: ①DCT 变换输入参数:int height :图像高(行数) int width :图像宽(列数)unsigned char * input_image :读入的图像数据,对于灰度图像大小为WxH()110(0)()21()()cos 2N x F f x x F f x Nμπμ-=-==+=∑∑∑-=-=++=1010222])12(cos[])12(cos[),()()(),(M x N y M N MNc y x y x f c c F υμυμυμππ∑∑-=-=++=1010222])12(cos[])12(cos[),()()(),(M N M N c MNy x F c c y x f μυππυμυμυμ字节;unsigned char * output:处理后的图像数据,对于灰度图像大小为WxH字节int dimention :1--一维DCT 2--二维DCT函数说明:void DCT(unsigned char * input_image, double * output,int height, int width,int dimention)②DCT逆变换输入参数:int height:图像高(行数)int width:图像宽(列数)unsigned char * input_image:DCT数据;unsigned char * output:处理后的数据;int dimention :1-一维IDCT 2--二维IDCT函数说明:void IDCT(double * input_image, double * output,int height, int width,intdimention)(3)使用上述的函数对图像进行变换将变换结果使用log(1+|DCT()|)校正,并用vi工具进行观察,得到的源图像和变换后的图像如图1-1所示。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理试验报告实验二:数字图像的空间滤波与频域滤波姓名:XX学号:2XXXXXXX 实验日期:2017 年4 月26 日1、实验目的1、掌握图像滤波的基本定义及目的。

2、理解空间域滤波的基本原理及方法。

3、掌握进行图像的空域滤波的方法。

4、掌握傅立叶变换及逆变换的基本原理方法。

5、理解频域滤波的基本原理及方法。

6、掌握进行图像的频域滤波的方法。

2、实验内容与要求1、平滑空间滤波:1) 读出一幅图像,给这幅图像分别加入椒盐噪声与高斯噪声后并与前一张图显示在同一图像窗口中。

2) 对加入噪声图像选用不同的平滑(低通)模板做运算,对比不同模板所形成的效果, 要求在同一窗口中显示。

3) 使用函数 imfilter 时, 分别采用不同的填充方法( 或边界选项, 如零填充、’replicate’、’symmetric’、’circular’)进行低通滤波,显示处理后的图像。

4) 运用for 循环,将加有椒盐噪声的图像进行10 次,20 次均值滤波,查瞧其特点, 显示均值处理后的图像(提示:利用fspecial 函数的’average’类型生成均值滤波器)。

5) 对加入椒盐噪声的图像分别采用均值滤波法,与中值滤波法对有噪声的图像做处理,要求在同一窗口中显示结果。

6) 自己设计平滑空间滤波器,并将其对噪声图像进行处理,显示处理后的图像。

2、锐化空间滤波1) 读出一幅图像,采用3×3 的拉普拉斯算子 w = [ 1, 1, 1; 1 – 8 1; 1, 1, 1]对其进行滤波。

2) 编写函数w = genlaplacian(n),自动产生任一奇数尺寸n 的拉普拉斯算子,如5×5的拉普拉斯算子w = [ 1 1 1 1 11 1 1 1 11 1 -24 1 11 1 1 1 11 1 1 1 1]3) 分别采用5×5,9×9,15×15与25×25大小的拉普拉斯算子对blurry_moon、tiff (x, y) -∇2 f (x, y) 完成图像的锐化增强,观察其有何进行锐化滤波,并利用式g(x, y) =不同,要求在同一窗口中显示。

数字图像处理滤波报告

数字图像处理滤波报告

2010年4月一,实验目的。

1.了解在数字图像处理中滤波的概念和意义。

2.掌握数字图像处理滤波程序。

二,实验原理。

图像的中值滤波是一种非线性的图像处理方法,它通过对邻域内像素按灰度排序的结果决定中心像素的灰度。

图像的中值滤波是统计排序滤波器的一种常见应用,它是通过对邻域内采样数据进行排序并取得中值来决定中心像素灰度的一种处理手段,图像的中值滤波在少量离散杂点的消除方面效果显著。

前面介绍过图像简单平滑和高斯平滑,以这两种算法为代表的平滑线性滤波算法在消除离散型杂点方面,都采取的是将杂点的干扰分摊到整个邻域中的每个像素,以减少杂点的影响,然而这样做的代价就是图像清晰度的大量损失。

如图11-14所示,a表示一个5×5邻域的像素灰度,其中中点位置的像素为孤立的杂点,b为对a进行一次简单平滑处理的结果,c 为对b进行简单平滑的结果,从图中可看出简单平滑将杂点对图像的影响分担到了邻域的其他像素。

图11-14 孤立杂点的简单平滑从图11-14中可以发现简单平滑对于孤立的杂点消除较为有效,而对于稍大的杂点或是密集的杂点,图像简单平滑的效果就不够理想。

如图11-15所示,其中a表示一个5×5邻域的像素灰度,其中灰度为0的点为杂点,b为对a进行简单平滑的结果,从图中可以看出简单平滑使画面质量严重下降,并且并没有很好地去除杂点影响。

图11-15 稍大杂点的简单平滑分析原因,可以发现平滑线性滤波器的工作原理可以比喻为用水冲洗桌面上的污点,冲洗的结果污点并没有消失,只是被淡化,如果污点较大较密集,则冲洗的结果是整个桌面都被污点所影响。

尝试换一种思路,如果不采取冲淡污点的办法而是将污点直接去除,这样就可以避免污点数量较多时难以去除的困难,这也就是中值滤波的基本思想。

在中值滤波算法中,对于孤立像素的属性并不非常关注,而是认为图像中的每个像素都跟邻域内其他像素有着密切的关系,对于每一个邻域,算法都会在采样得到的若干像素中,选择一个最有可能代表当前邻域特征的像素的灰度作为中心像素灰度,这样就有效避免了离散型杂点对图像的影响。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字图像处理实验报告班级:姓名:学号:日期:邻域平均法和中值滤波处理一、实验目的图像变换是数字图像处理中的一种综合变换,如直方图变换、几何变换等。

通过本实验,使得学生掌握两种变换的程序实现方法。

二、实验任务请设计程序,分别用邻域平均法,其模板为:和中值滤波法对testnoise图像进行去噪处理(中值滤波的模板的大小也设为3×3)。

三、实验环境本实验在Windows平台上进行,对内存及cpu主频无特别要求,使用VC或者MINGW(gcc)编译器均可。

四、设计思路介绍代码的框架结构、所用的数据结构、各个类的介绍(类的功能、类中方法的功能、类的成员变量的作用)、各方法间的关系写。

在此不进行赘述。

五、具体实现实现设计思路中定义的所有的数据类型,对每个操作给出实际算法。

对主程序和其他模块也都需要写出实际算法。

代码:<邻域平均法>(3*3)#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 bitm ap 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;}<中值滤波>#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 bi tmap 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;。

相关文档
最新文档