实验一图像增强
一、实验目的
1 掌握灰度直方图的概念及其计算方法;
2 熟练掌握直方图均衡化的计算过程;
3 掌握各种灰度变换技术,加深对灰度变换的理解;
4 掌握在空域中进行图像噪声消除、图像平滑和图像锐化等各种改善图像质量的方法;
5 利用MA TLAB程序进行图像增强。
二、实验内容
1选择一幅对比度不足的图像,对其进行直方图均衡化处理,并对比均衡化前后的直方图。
2 利用二个低通邻域平均模板(3×3和9×9)对一幅图像进行平滑,验证模板尺寸对图像的模糊效果的影响。
3 利用一个低通模板对一幅有噪图像(GAUSS白噪声)进行滤波,检验两种滤波模板(分别使用一个5×5的线性邻域平均模板和一个非线性模板:3×5中值滤波器)对噪声的滤波效果。
三、参考程序
1 直方图均衡化
I=imread(‘原图像名.gif); % 读入原图像
J=histeq(I); %对原图像进行直方图均衡化处理
imshow(I); %显示原图像
title(‘原图像’); %给原图像加标题名
figure;imshow(J); %对原图像进行屏幕控制;显示直方图均衡化后的图像
title(‘直方图均衡化后的图像’) ; %给直方图均衡化后的图像加标题名
tigure; subplot(1,2,1) ;%对直方图均衡化后的图像进行屏幕控制;作一幅子图作为并排两幅图的第1幅图
imhist(I,64); %将原图像直方图显示为64级灰度
title(‘原图像直方图’) ; %给原图像直方图加标题名
subplot(1,2,2); %作第2幅子图
imhist(J,64) ; %将均衡化后图像的直方图显示为64级灰度
title(‘均衡变换后的直方图’) ; %给均衡化后图像直方图加标题名
2利用低通邻域平均模板进行平滑
I=imread('girl.bmp');
subplot(1,3,1);
imshow(I);
title('原图');
J=fspecial('average');
J1=filter2(J,I)/255;
subplot(1,3,2);
imshow(J1);
title('3*3滤波');
K=fspecial('average',9);
K1=filter2(K,I)/255;
subplot(1,3,3);
imshow(K1);
title('9*9滤波');
3 中值滤波和均值滤波
I=imread('girl.bmp');
J=imnoise(I,'gaussian',0,0.01);
subplot(2,2,1);
imshow(I);
title('原图');
subplot(2,2,2);
imshow(J);
title('noise');
K=fspecial('average',5);
K1=filter2(K,J)/255;
subplot(2,2,3);
imshow(K1);
title('average');
L=medfilt2(J,[3 5]);
subplot(2,2,4);
imshow(L);
title('medium');
四、实验步骤
1 打开计算机,启动MA TLAB程序;
2 调入数字图像,分别进行直方图均衡化处理、均值滤波处理和中值滤波处理;
3 记录和整理实验报告
五、实验仪器
1计算机;
2 MA TLAB程序;
3移动式存储器(移动硬盘、U盘等)。
六、实验报告内容
1叙述实验过程;
2提交实验的原始图像和结果图像。
长沙理工大学C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述四、程序清单 1.编写程序实现在屏幕上显示以下结果: Thedressislong Theshoesarebig Thetrousersareblack 答案: #include
printf("商品名称价格\n"); printf("TCL电视机¥7600\n"); printf("美的空调¥2000\n"); printf("SunRose键盘¥50.5\n"); } 2.编写程序:a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 答案: #include
printf("a/c的商=%d\n",y); x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } 4.设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将a赋给c。(提示:用条件运算符) 答案: #include
实验一图像增强实验 实验目的:1.掌握图像增强的算法 2.学习利用MATLAB进行图像的增强 实验内容:1.图像的点操作、邻域操作算法 2.图像的直方图处理算法 实验步骤: 1.读入图像,用MATLAB函数实现图像读入 (1)启动MATLAB (2)在命令行窗口直接输入MATLAB命令,按“回车”键后执行(3)读入命令和显示命令分别为 imread 和 imshow (4)如A=imread('D:\上官军\medical image\woman.jpg') Imshow (A) 结果显示
2.实现图像点操作运算(gamma校正和对数校正)(1)根据图像线形变换三种形式,图像反转 S=L-1-r 、对数变换S=c*log(1+r) 、幂次变换 S=c*r .^γ编写图像点操作函数 (2)建立新的M文件,点操作函数代码如下: function s=dian(r,leixing,chengshu,gamma1) % r为处理图像,leixing为操作类型 s1=imread(r); s2=im2double(s1); %将图像转为double数据型 switch leixing case 'fanzhuan' s=1-s2; case 'duishu' s=chengshu*log(1+s2); case 'gamma' s=chengshu*s2.^gamma1; otherwise error('错误') end subplot(1,2,1), imshow(s1); subplot(1,2,2),imshow(s);
(3)实际操作,如反转: Y=dian('D:\上官军\medical image\woman.jpg','fanzhuan',1,1); 3.图像邻域处理 (1)图像邻域处理是通过设计相应的滤波器来处理相邻图像像素,主要为均值滤波器、中指滤波器、高斯滤波器等 (2)建立新的M文件,均值滤波函数代码如下: function d=avefilt(x,n) a(1:n,1:n)=1; %a即n×n模板,元素全是1 p=size(x);
实验一 实验内容和步骤 练习图像的读取、显示和保存图像数据,步骤如下: (1)使用命令figure(1)开辟一个显示窗口 (2)读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内显示、二值图像和灰度图像,注上文字标题。 (3)保存转换后的灰度图像和二值图像 (4)在同一个窗口显示转换后的灰度图像的直方图 I=imread('BaboonRGB.bmp'); figure,imshow(I); I_gray=rgb2gray(I); figure,imshow(I_gray); I_2bw=Im2bw(I_gray); figure,imshow(I_2bw); subplot(1,3,1),imshow(I),title('RGB图像'); subplot(1,3,2),imshow(I_gray),title('灰度图像'); subplot(1,3,3),imshow(I_2bw),title('二值图像'); imwrite(I_gray,'Baboongray.png'); imwrite(I_2bw,'Baboon2bw.tif'); figure;imhist(I_gray);
RGB 图 像灰度图 像二值图 像 050100150200250 500 1000 1500 2000 2500 3000
(5)将原RGB 图像的R 、G 、B 三个分量图像显示在figure(2)中,观察对比它们的特点,体会不同颜色所对应的R 、G 、B 分量的不同之处。 [A_RGB,MAP]=imread('BaboonRGB.bmp'); subplot(2,2,1),imshow(A_RGB),title('RGB'); subplot(2,2,2),imshow(A_RGB(:,:,1)),title('R'); subplot(2,2,3),imshow(A_RGB(:,:,2)),title('G'); subplot(2,2,4),imshow(A_RGB(:,:,3)),title('B'); (6)将图像放大1.5倍,插值方法使用三种不同方法,在figure(3)中显示放大后的图像,比较不同插值方法的结果有什么不同。将图像放大到其它倍数,重复实验;A=imread('BaboonRGB.bmp'); figure(3),imshow(A),title('原图像'); B=imresize(A,1.5,'nearest'); figure(4),imshow(B),title('最邻近法') C=imresize(A,1.5,'bilinear'); ; figure(5),imshow(C),title('双线性插值'); D=imresize(A,1.5,'bicubic'); figure(6),imshow(D),title('双三次插值 '); RGB R G B
单片机原理实验教案 参考程序
广东松山职业技术学院《MCS-51单片机原理》实验指导书 宁玉珊黄晓林 使用Proteus辅助设计与仿真
实训项目1 Proteus辅助设计与仿真的使用 一、实训目的 学习并熟练掌握PROTEUS辅助设计与仿真软件的使用。通过使用Proteus的ISIS组件绘制AT89C51功能接口原理图,并对原理图编写程序和调试程序,观察在仿真条件下的实现功能的效果。 二、实训内容 在PROTEUS仿真环境下实现一个发光二极管(LED)闪烁。要求LED亮0.5s灭1s,并绘制原理图和编写实现程序,同时用虚拟的示波器观察硬件和软件实现的效果。 三、实训器材 安装有Proteus7软件的计算机 1 台。 四、实训步骤 1)在硬盘建立文件夹用来保存新建项目的所有文件。如在D盘建立PROJECT文件夹。 2)选择‘开始→程序→Proteus7 professional→ISIS professional(或者双击桌面图标ISIS)’,进入Proteus仿真环境,如图P1_1和P1_2所示。 图P1-1
图P1-2 3)选择菜单【File/New Design】创建一个新的设计项目,如图P1_3所示。 图P1-3 4)此时系统会弹出模板选择窗口,选择‘DEFAULT’点击【OK】即可,如图P1_4所示。
图P1_4 5)点击界面左侧工具栏中的图标,接着点击元件池上方的按钮,将要用到的元器件从系统库调到当前设计文件库中。在弹出的Pick Devices对话框左上角的‘Keywords’文本框中键盘输入元件名(或元件的其它关键词)搜索到需要的元器件。双击‘Results’栏下的目标元件,该元件即调出到当前设计文件库的元件列表中,如图P1_5所示。本实训中所要用到的元件如表PS1_1所示。 图P1_5 元件名称搜索关键词元件序 数值备注 号 电阻器Resistor R1 10k 电阻器Resistor R2 1k 电解电容器MINELECT1U63V C1 4.7μ 陶瓷电容器CERAMIC22P C2、C3 22p 晶振CRYSTAL X1 12MHz 单片机AT89C51 U1
实验二图像增强处理实习报告 1.实验目的和内容 1.1.实验目的 掌握图像合成和显示增强的基本方法,理解存储的图像数据与显示的图像数据之间的1.2.实验要求 熟练根据图像中的地物特征进行图像合成显示、拉伸、图像均衡化等显示增强操作。 理解直方图的含义,能熟练的利用直方图进行多波段的图像显示拉伸增强处理。 1.3.软件和数据 ENVI 软件。 TM 图像数据。上次实验合成后的图像数据文件AA。 1.4.实验内容 图像的彩色合成显示 图像的基本拉伸方法 图像均衡化方法 图像规定化 2.实验过程 通过合成和拉伸增强显示图像中的信息。 2.1.图像合成 图像合成方法:伪彩色合成、彩色合成两种方式。其中彩色合成包括:真彩色合成、假彩色合成、模拟真彩色合成。 操作: 使用(4,3,2)进行RGB 合成显示图像。图像窗口为#1。
移动图像窗口的红色选框到玄武湖,将光标十字放在红框内,双击,显示光标位置窗口。该窗口中出现了Scrn 和Data,二者后面的RGB 的值是不同的。
2.1.1伪彩色合成 在新的窗口显示第4 波段图像,窗口为#2。
操作: 菜单:窗口菜单Tools-Color Mapping-Density slice…,选择Band 4,确定。在“Density Slice”窗口中,点击“应用”按钮,窗口#2 的图像变成了彩色。
设置默认的分级数为3 个:在“Density Slice”窗口,点击Options-Set number of default range,输入3,确定。点击Options-Apply default range,点击Apply 按钮。查看窗口#2 内的变化。
(1)矩阵图像的傅里叶变换 f=zeros(30,30); f(5:24,13:17)=1; imshow(f,'notruesize') F=fft2(f); F2=log(abs(F)); figure;imshow(F2,[-1 5],'notruesize');colormap(jet);colorbar;
-0.5 00.5 11.522.533.544.5 (2)图像的傅里叶变换 I=imread('concordorthophoto.png'); imshow(I); B=ffshift(fft2(I)); figure; imshow(log(abs(B)),[]),colorbar;
图像离散余弦变换 RGB=imread('hestain.png'); I=rgb2gray(RGB); imshow(RGB); J=dct2(I); figure,imshow(log(abs(J)),[]),colorbar; J(abs(J)<10)=0; K=idct2(J)/255; figure,imshow(K)
二(1) 直方图均衡化增强图像对比度程序I=imread('trees.tif'); J=imnoise(I,'salt & pepper',0.02); imshow(I);figure,imshow(J) K1=filter2(fspecial('average',3),J)/255; K2=filter2(fspecial('average',5),J)/255; K3=filter2(fspecial('average',7),J)/255; figure,imshow(K1) figure,imshow(K2) figure,imshow(K3)
广东金融学院实验报告 课程名称:C++程序设计 实验编号 实验7数组与指针练习系别参考答案及实验名称 姓名学号班级 实验地点新电403实验日期2011-11-24实验时数4 指导教师曲政同组其他成员无成绩 一、实验目的及要求 1.学习C/C++数组和指针的概念和使用方法。 2.练习C++/CLI托管数组的创建方法和元素访问方法。 二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等) 硬件设备:联网的个人计算机 操作系统:Windows XP 编译系统:Visual Studio2005
三、实验内容及步骤(包含简要的实验步骤流程) 1.内容和步骤 ⑴仔细阅读本课件的知识点和例题,努力理解其中的文字阐述和源代码,必要时可将源代码拷入Visual Studio2005生成的C++/CLR框架编译和运行,将运行结果与源代码对照,加深对C/C++数组和指针的理解。 ⑵在理解本课件内容的基础上,编写C/C++程序实现下列文字描述: a.声明一个int型变量x,并赋初值3; b.打印x的值; c.打印x的地址; d.声明一个指向int的指针p,并让其指向变量x; e.打印p所指变量的值 f.打印p的值; g.声明一个有10个元素的一维本地整型数组A,并为其赋初值0~9; h.在一个循环中打印A的所有元素的值; i.打印A的值; j.打印A的第一个元素的地址; k.声明一个指向int的指针q,并让其指向A的第一个元素; l.在一个循环中通过q后跟下标,打印出A的所有元素的值; m.在一个循环中通过q加上循环变量和取值运算,打印出A的所有元素的值; n.在一个循环中通过q的增量和取值运算,打印出A的所有元素的值; o.在一个循环中通过q的负增量,反序打印出A的所有元素的值; p.声明一个int型指针r,在堆中创建一个int型变量,为该变量赋初值3,并将该变量的地址赋给该指针,打印出该变量的值,然后删除该变量。 q.声明一个本地类Point(可以用包含2个int型变量和一个有参数构造函数的结构体表示)的指针s,在堆中创建一个Point类的对象,调用构造函数为该对象的两个数据成员赋初值3和4,并将该对象的地址赋给该指针,打印两个数据成员的值,然后删除该对象。 r.声明一个int型指针t,在堆中创建一个3个元素的int类型数组并将该数组的首地址赋给该指针,为三个数组元素分别赋值3、4、5,在一个循环中打印出所有元素的值,然后删除该数组。 s.声明一个本地类Point类的指针u,在堆中创建一个3个元素的Point类的对象数组(需在Point 中添加无参数构造函数)并将数组的首地址赋给该指针,为三个数组元素分别赋值(1,2)、(3,4)、(5,6),在一个循环中打印该数组所有元素分量的值,然后删除该数组。 t.用基本语法声明并创建一个10个元素的一维托管整型数组B,并在一个循环中为元素赋值0~9; u.在另一个循环中打印B所有元素的值。 v.用初值表方式声明并创建一个10个元素的一维托管整型数组C,并为其元素赋初值10~19; w.在一个循环中打印C所有元素的值。 x.用数组C为数组B赋值。 y.在一个循环中打印B和C所有元素的值。 2.提示和要求 ⑴首先将上面的文字描述拷入Visual Studio2005生成的C++/CLR框架,在每条文字描述之前加“//”将其变为注释,并在其下留一个空行准备编写对应的程序。 ⑵对应于逐条文字描述,在其下编写程序(可能是一个或一组语句),每编写一条文字描述对应的程序,就编译(运行)一次,以保证语法和算法的正确性。 ⑶当全部文字描述所对应的程序编写完成,并编译、运行正确,将文字描述和源代码拷入实验报告。 ⑷对C/C++的数组和指针做简要总结。
图像处理实验 图像增强和图像分割 一、实验目的: 掌握用空间滤波进行图像增强的基本方法,掌握图像分割的基本方法。 二、 实验要求: 1、测试图像1中同时含有均值为零的均匀分布噪声和椒盐噪声。用大小为5×5的算术均值滤波器和中值滤波器对图像进行处理,在不同窗口中显示原图像及各处理结果图像,并分析哪一种滤波器去噪效果好? 2、对测试图像2进行图像分割,求出分割测试图像2的最佳阈值。分别显示原图、原图的直方图(标出阈值)、和分割后的二值图。 实验内容: 1. 实验原理 1) 图像增强:流程图: 图像增强可以通过滤波的方式来完成,即消除一部分的噪声。滤波又可以分为均值滤波和中值滤波。 1. 中值滤波原理:中值滤波就是选用一个含有奇数个像素的滑动窗口,将该窗口在图像上扫描,把其中所含像素点按灰度级的升(或降)序排列,取位于中间的灰度值来代替窗口中心点的灰度值。
对于一维序列{N f }: 21,},...,,...,{-=∈=+-m u N i f f f M e d y u i i u i i 对于二维序列{ij F }:为滤波窗口W y ij F Med W ij }{= 2. 均值滤波原理:对于含噪声的原始图像g(s,t)的每一个像素点去一个领 域N ,用N 中所包含的相速的灰度平均值,作为领域平均处理后的图像f(x,y)的像素值,即: ∑∈=xy S t s t s g mn y x f ),(),(1),(? 2) 图像分割: 图像分割:依据图像的灰度、颜色等特征,将一幅图像分为若干个互不重叠的、具有某种同质特征的区域。
本实验中我们是根据灰度值,将灰度值大于阈值T的像素统一置为255,小于的则置为0。如何求出最合适的分割阈值,则需要用到迭代算法。 迭代法算法步骤: (1) 初始化阈值T (一般为原图像所有像素平均值)。 (2) 用T分割图像成两个集合:G1 和G2,其中G1包含所有灰度值小于T的像素,G2包含所有灰度值大于T的像素。 (3) 计算G1中像素的平均值m1及G2中像素的平均值m2。 (4) 计算新的阈值:T =(m1+m2)/2 。 (5)如果新阈值跟原阈值之间的差值小于一个预先设定的范围,停止循环,否则继续(2)-(4)步。 2.程序代码与分析: 1)图像增强: clear all;clc; %读入图像 I1=imread('Fig5.12(b).jpg'); %均值滤波模板 h1=ones(5,'uint8'); %获取分辨率 [a,b]=size(I1); %创建变量 I2=zeros(a+4,b+4,'uint8'); I3=zeros(a+4,b+4,'uint8'); %复制原始图像 for n=3:a+2 for m=3:b+2 I2(n,m)=I1(n-2,m-2); I3(n,m)=I1(n-2,m-2); end end
实验二MATLAB图像运算一、实验目的 1.了解图像的算术运算在数字图像处理中的初步应用。 2.体会图像算术运算处理的过程和处理前后图像的变化。 二、实验步骤 1.图像的加法运算-imadd 对于两个图像f x,y和 (x,y)的均值有: g x,y=1 f x,y+ 1 (x,y) 推广这个公式为: g x,y=αf x,y+β (x,y) 其中,α+β=1。这样就可以得到各种图像合成的效果,也可以用于两张图像的衔接。说明:两个示例图像保存在默认路径下,文件名分别为'rice.png'和'cameraman.tif',要求实现下图所示结果。 代码: I1 = imread('rice.png'); I2 = imread('cameraman.tif'); I3 = imadd(I1, I2,'uint8'); I4 = imadd(I1, I2,'uint16'); subplot(2, 2, 1), imshow(I1), title('?-ê?í???1'); subplot(2, 2, 2), imshow(I2), title('?-ê?í???2'); subplot(2, 2, 3), imshow(I3), title('8??í?????ê?'); subplot(2, 2, 4), imshow(I4), title('16??í?????ê?'); 结果截图:
2.图像的减法运算-imsubtract 说明: 背景图像可通过膨胀算法得到background = imopen(I,strel('disk',15));,要求实现下图所示结果。 示例代码如下: I1 = imread('rice.png'); background = imerode(I1, strel('disk', 15)); rice2 = imsubtract(I1, background); subplot(2, 2, 1), imshow(I1), title('?-ê?í???'); subplot(2, 2, 2), imshow(background), title('±3?°í???'); subplot(2, 2, 3), imshow(rice2), title('′|àíoóμ?í???'); 结果截图: 3.图像的乘法运算-immultiply
数字信号处理实验实验一离散时间信号与系统及MA TLAB实现 1.单位冲激信号: n = -5:5; x = (n==0); subplot(122); stem(n, x); 2.单位阶跃信号: x=zeros(1,11); n0=0; n1=-5; n2=5; n = n1:n2; x(:,n+6) = ((n-n0)>=0); stem(n,x); 3.正弦序列: n = 0:1/3200:1/100; x=3*sin(200*pi*n+1.2); stem(n,x); 4.指数序列 n = 0:1/2:10; x1= 3*(0.7.^n); x2=3*exp((0.7+j*314)*n); subplot(221); stem(n,x1); subplot(222); stem(n,x2); 5.信号延迟 n=0:20; Y1=sin(100*n); Y2=sin(100*(n-3)); subplot(221); stem(n,Y1); subplot(222); stem(n,Y2);
6.信号相加 X1=[2 0.5 0.9 1 0 0 0 0]; X2=[0 0.1 0.2 0.3 0.4 0.5 0.6 0.7]; X=X1+X2; stem(X); 7.信号翻转 X1=[2 0.5 0.9 1]; n=1:4; X2=X1(5-n); subplot(221); stem(n,X1); subplot(222); stem(n,X2); 8.用MATLAB计算序列{-2 0 1 –1 3}和序列{1 2 0 -1}的离散卷积。a=[-2 0 1 -1 3]; b=[1 2 0 -1]; c=conv(a,b); M=length(c)-1; n=0:1:M; stem(n,c); xlabel('n'); ylabel('幅度'); 9.用MA TLAB计算差分方程 当输入序列为时的输出结果。 N=41; a=[0.8 -0.44 0.36 0.22]; b=[1 0.7 -0.45 -0.6]; x=[1 zeros(1,N-1)]; k=0:1:N-1; y=filter(a,b,x); stem(k,y) xlabel('n'); ylabel('幅度') 10.冲激响应impz N=64; a=[0.8 -0.44 0.36 0.22];
实验报告 班级:08108班 姓名:王胤鑫 09号学号:08210224
一、实验内容 给出噪声图像Girl_noise.jpg,请选择合适的图像增强算法,给出你认为最优的增强后的图像。 可以使用Matlab - Image Processing Toolbox 中的处理函数。 原始图像如下: 二、算法分析 对于给出的图像中有灰色的噪声,因此首先处理灰色的线条,根据其方差的大小来判断其所在行。对于两条白色的噪声,根据与前后两行的对比来判断其所在位置。程序中设定灰色线条处理的均方差门限为0.1,白线处理的标准为与前后两行的差值超过0.2(转换为double型)。滤除噪声之后再通过中值滤波、拉普拉斯图像增强等方式对图像进行处理。 三、matlab 源程序 clear all;clc; f=imread('girl_noise.jpg'); figure,imshow(f),title('原始图像'); [m,n]=size(f); f0= im2double(f); % 整型转换为 double 类 f1=f0; std_i=zeros(1,m-2); %灰线处理 for i=2:m-1 %灰线处理 std_i(i-1)=std(f0(i,:)); if(std_i(i-1)<0.1) for j=1:m f0(i,j)=(f0(i-1,j)+f0(i+1,j))/2; end
end end figure,imshow(f0),title('滤除灰线后的图像'); fz=f0-f1; [r,c]=find(fz~=0);%寻找灰线噪声的位置 f2=f0; change=0; count=0; for i=3:m-2 %白线处理 for j=1:m if(abs(f0(i,j)-f0(i-1,j))>0.2&&abs(f0(i,j)-f0(i+1,j))>0.2) count=count+1; end if(count>n*0.8) count=0; change=1; break; end end if(change==1) for k=1:m f0(i,k)=(f0(i-1,k)+f0(i+1,k))/2; end change=0; count=0; end end figure,imshow(f0),title('滤除白线后的图像'); fz1=f2-f0; [r1,c1]=find(fz1~=0); %寻找白线噪声的位置 fn = medfilt2(f0); %反射对称填充 figure, imshow(fn),title('中值滤波后的图像'); f0 = im2double(fn); % 整型转换为 double 类 g =2*f0- imfilter(f0,w4, 'replicate'); % 增强后的图像 figure, imshow(g),title('高提升滤波图像(A=2)');
实验二图像的增强 一、实验目的 1)掌握在计算机上进行直方图统计,以及直方图均衡化、线性变换的图像增强的方法 2)掌握在计算机上进行图象平滑、图象锐化特别是中值滤波平滑及拉普拉斯算子锐化 的方法 二、实验要求 1)显示图像(cameraman.tif)及灰度直方图。 2)对指定图像(cameraman.tif)进行直方图均衡化和线性变换,将原始图像及增强 后的图像都显示于屏幕上,比较增强的效果。 3)对指定图像(lena.bmp)加入椒盐噪声,然后进行邻域平滑、中值滤波,将原始图 像及平滑后的图像都显示于屏幕上,比较效果。 4)对指定图像(lena.bmp)进行锐化(简单梯度算法、ROBERT算子,Prewitt边缘算 子和拉普拉斯算子),将原始图像及锐化后的图像都显示于屏幕上,比较锐化的效果。 三、实验仪器设备及软件 HP D538、MATLAB 四、实验原理 以自己的语言结合课堂笔记进行总结,要求过程推导清晰明了。 五、实验步骤及程序 实验步骤、程序流程、实验源程序和注释齐全 实验源程序: (1). 显示图像(cameraman.tif)及灰度直方图: I=imread('cameraman.tif'); subplot(121); imshow(I); title('原始图象'); subplot(122); imhist(I); title('灰度直方图')实验结果与分析
(2)对指定图像(cameraman.tif)进行直方图均衡化和线性变换,将原始图像及增强后的图像都显示于屏幕上,比较增强的效果。 I=imread('cameraman.tif'); subplot(221); imshow(I); title('原始图象'); I1=histeq(I); subplot(222); imshow(I1); title('原始图象均衡化'); subplot(223); imshow(I); title('原始图象'); I2=imadjust(I); subplot(224); imshow(I1); title('原始图象线性变化'); (3)对指定图像(lena.bmp)加入椒盐噪声,然后进行邻域平滑、中值滤波,将原始图像及平滑后的图像都显示于屏幕上,比较效果。
面向对象程序设计 实验指导书 (适用:电子信息11级) 彭召意陶立新编写 计算机与通信学院 2014.9
目录 实验一 C++基础的应用 (1) 实验二类和对象的应用 (3) 实验三类的构造函数、析构函数的应用 (4) 实验四友员和运算符重载 (5) 实验五类的继承与派生 (6) 实验六类的多态性与虚函数 (7) 附录:各实验的程序代码 (8)
实验一 C++基础的应用 (实验课时:2 实验性质:设计) 实验名称: C++基础的应用 实验目的: (1)进一步学习VC++6.0开发环境及程序调试方法。 (2)练习C++函数的定义及使用; (3)练习C++数组的定义及使用; (4)练习C++指针的定义及使用; (5)练习C++结构体的定义及使用; (6)练习多文件的程序的编译和运行方法; 实验设备:(1)硬件:个人微机(配置不低于:CPU为P4,主频1.6G,内存256MB,硬盘40GB); (2)软件:操作系统为WindowsXP(或2000、server2003等),工具软件为Visual C++6.0。 实验内容: (1)熟悉Visual C++6.0编译系统的常用功能,特别是debug调试功能; (2)编程1:编写一个程序c1.cpp,用来求2个或3个整数的最大数。要求:用重载函数的方法来求最大数;函数原型:int max( int a, int b) 和int max( int a, int b,int c)。 (3)编程2:编写一个程序c2.cpp,求:a!+ b! + c!的值。要求:使用递归函数。主程序和函数分开到两个源程序文件中,分别进行编译后,再运行; (4)编程3:有一个3*4的矩阵,要求编程求出其中值最大的那个元素的值,以及其所在的行号和列号; (5)编程4:建立一个动态链表并进行输出和删除管理。链表的每个节点为学生信息,包括:学号,姓名,性别,下一学生信息的指针。程序的工作:(a)建立三个学生信息的节点,然后顺序输出该三个学生信息;(b)删除中间的节点,再顺序输出学生信息。 (6)使用debug调试功能:追踪第2个程序中函数的运行。 (7)思考: 在第2个程序中,如果a,b,c的值较大,则显示的结果会怎样?这时如何解决此问题? (提示:显示的结果会不对,可能还会是负数,定义一个数组来存放最后结果。) 实验要求: (1)掌握Visual C++6.0开发环境的常用功能及使用,能进一步使用Visual C++6.0的debug调试功能:单步调试、设置断点等; (2)掌握C++函数的定义及使用,掌握函数的嵌套调用和递归调用的方法; (3)掌握C++数组、指针、结构体的定义及使用; (4)掌握多文件的程序的编译和运行方法; (5)程序格式规范,程序运行正确; (6)认真书写实验报告,如实填写各项实验内容。
信息工程学院实验报告 课程名称:数字图像处理Array 实验项目名称:实验四图像增强实验时间:2016.11.08 班级::学号: 一、实验目的 1.了解图像增强的目的及意义,加深对图像增强的感性认识,巩固所学理论知识。 2. 掌握图像空域增强算法的基本原理。 3. 掌握图像空域增强的实际应用及MATLAB实现。 4. 掌握频域滤波的概念及方法。 5. 熟练掌握频域空间的各类滤波器。 6.掌握怎样利用傅立叶变换进行频域滤波。 7. 掌握图像频域增强增强的实际应用及MATLAB实现。 二、实验步骤及结果分析 1. 基于幂次变换的图像增强 程序代码: clear all; close all; I{1}=double(imread('fig534b.tif')); I{1}=I{1}/255; figure,subplot(2,4,1);imshow(I{1},[]);hold on I{2}=double(imread('room.tif')); I{2}=I{2}/255; subplot(2,4,5);imshow(I{2},[]);hold on for m=1:2 Index=0; for lemta=[0.5 5] Index=Index+1; F{m}{Index}=I{m}.^lemta; subplot(2,4,(m-1)*4+Index+1),imshow(F{m}{Index},[]) end end 执行结果:
图1 幂次变换增强结果 实验结果分析: 由实验结果可知,当r<1时,黑色区域被扩展,变的清晰;当r>1时,黑色区域被压缩,变的几乎不可见。 2.直方图规定化处理 程序代码: clear all clc close all %0.读图像 I=double(imread('lena.tiff')); subplot(2,4,1); imshow(I,[]); title('原图') N=32; Hist_image=hist(I(:),N); Hist_image=Hist_image/sum(Hist_image); Hist_image_cumulation=cumsum(Hist_image);%累 计直方图 subplot(245); stem(0:N-1,Hist_image); title('原直方图'); %1.设计目标直方图 Index=0:N-1; %正态分布直方图 Hist{1}=exp(-(Index-N/2).^2/N); Hist{1}=Hist{1}/sum(Hist{1}); Hist_cumulation{1}=cumsum(Hist{1}); subplot(242); title('规定化直方图1'); %倒三角形状直方图 Hist{2}=abs(2*N-1-2*Index); Hist{2}=Hist{2}/sum(Hist{2}); Hist_cumulation{2}=cumsum(Hist{2}); subplot(246); stem(0:N-1,Hist{2}); title('规定化直方图2'); %2. 规定化处理 Project{1}=zeros(N); Project{2}=zeros(N); Hist_result{1}=zeros(N); Hist_result{2}=zeros(N); for m=1:2 Image=I; %SML处理(SML,Single Mapping Law单映射规则 for k=1:N Temp=abs(Hist_image_cumulation(k)-Hist_cumulati on{m}); [Temp1,Project{m}(k)]=min(Temp); end %2.2 变换后直方图 for k=1:N
图像处理实验报告 1、实验目的: (1)用高斯低通滤波器对图像进行处理,并了解效果以及产生该效果的原因。 (2)生成图片,并对该图片进行多种滤波器处理:算术均值,几何均值,谐波均值,逆谐波均值,中值滤波,中点滤波,最大,最小值滤波等。并分析比较。 2、实验思路: (1) 先将原图像进行零填充,然后再FFT。使用函数paddedsize.计算图像FFT所用的填充尺寸,获得填充参数,使用dftuv函数获得U,V的值,代入高斯滤波器传递函数,最后通过频域滤波得到图像。 (2)实验要求的滤波器都可以用自定义函数spfilt实现。主要的难点在于是spfilt函数的使用。 3、实验代码 (1) f = imread('c.bmp'); subplot(2,2,1),imshow(f,[]), title('原始图像'); PQ = paddedsize(size(f));%用函数paddedsize获得填充参数 [U,V]= dftuv(PQ(1),PQ(2));%计算PQ1*PQ2大小的矩形每一点到矩形原点距离的平方 D0=30; H = exp(-(U.^2 +V.^2)/(2*(D0^2)));%高斯滤波传递函数 for i=1:1:10; F = fft2(f,PQ(1),PQ(2));%得到有填充的傅里叶变换 g = dftfilt(f,H);%频域处理得到滤波图像 f=g; end;
subplot(2,2,2),imshow(g,[]), title('D0=30'); D0=30;%改变循环的值重复以上步骤 H = exp(-(U.^2 +V.^2)/(2*(D0^2))); for i=1:1:20; F = fft2(f,PQ(1),PQ(2)); g = dftfilt(f,H); f=g; end; subplot(2,2,3),imshow(g,[]), title('20次滤波'); D0=30; H = exp(-(U.^2 +V.^2)/(2*(D0^2))); for i=1:1:50; F = fft2(f,PQ(1),PQ(2)); g = dftfilt(f,H); f=g; end; subplot(2,2,4),imshow(g,[]), title('50次滤波'); (2) tk = 1 : 17+7 : (17+7)*10; I = zeros(210+10*2, (17+7)*10); for i = 1 : length(tk)-1 I(10:10+210, tk(i+1):tk(i+1)+6) = 1; end
实验一键盘输入实验 参考程序: ;4*4矩阵键盘读取程序,利用P0口,列线左起P0.0-P0.3 ;行线上起P0.4-P0.7,行线默认接高电平, ;P3.7作为键盘被读取的提示灯 ; 0 1 2 3 ; 4 5 6 7 ; 8 9 A B ; C D E F ;不考虑有两个或以上按键同时按下的情况, ;每次扫描到一个有按下则结束本次扫描 SETB P3.7 ;确认关闭键盘响应指示灯 MAIN: MOV R0,#0EFH ;用于给键盘行列线确定的电平 MOV R1,#0H ;循环次数,R1=0对应第一行,=1为第二行,以此类推SMAIN: MOV P0,R0 ;改变行线的状态,列线全处于高电平 NOP NOP MOV A,P0 JB ACC.0,L1 ;判断某行的第一列是否按下,按下则P0.0为低电平 MOV R2,#0H ; 将某行的列码保存至R2,显示程序会根据此值和R1的值计算具体为何按键按下 ACALL DISP SJMP MAIN ; 每次扫描到一个有按下则结束本次所有扫描
L1: JB ACC.1,L2 ;判断某行的第二列是否按下,按下则P0.1为低电平MOV R2,#01H ACALL DISP SJMP MAIN L2: JB ACC.2,L3 ;判断某行的第三列是否按下,按下则P0.2为低电平MOV R2,#02H ACALL DISP SJMP MAIN L3: JB ACC.3,SKIP ;判断某行的第四列是否按下,按下则P0.3为低电平MOV R2,#03H ACALL DISP SJMP MAIN ; SKIP: INC R1 ;R1加1,共计4行, MOV A,R0 RL A ;左移R0内的值,以并扫描下一行 MOV R0,A CJNE R1,#04H,SMAIN ;若四行扫描完毕,则跳转至程序最初,相关参数为初始值NO: MOV P2,#0FFH ;程序能执行到此说明四行扫描完毕并且一个按键都没按下,关闭数码管和指示灯 SETB P3.7 SJMP MAIN DISP: CLR P3.7 ;点亮键盘响应指示灯 MOV A,R1 RL A RL A ;R1对应行,具体的按键计算为R1*2+R2 ADD A,R2 ADD A,#3H ;下列指令与表格见有3字节的距离 MOVC A,@A+PC MOV P2,A ;十六进制的高位用数码管L1显示 RET ;共阳数码管0-F的显示码 DIS: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH DELAY: m ov r7,#255;延时 del1: mov r6,#255; del2: djnz r6,del2 djnz r7,del1 ret END
实验三、图像增强 一、实验目的 (1)熟悉并学会使用MATLAB中图像增强的相关函数。 (2)掌握图像灰度修正、平滑去噪、锐化加强边缘和轮廓的方法,并编程实现。 二、实验主要仪器设备 (1)台式机或笔记本电脑。 (2)MATLAB软件(含图像处理工具箱)。注意:由于软件版本的缘故,软件的界面可能有所差异,读者可以根据实际安装的软件选择相关的命令。 (3)典型的灰度、彩色图像文件。 三、实验原理 数码相机的曝光量指到达DC感光器件上的光线总量,用曝光值(EV)表示。图像的过度曝光、曝光不足时,用曝光补偿调节曝光量,这种功能可修正自动曝光设置值为上升或下降几级。例如,某些DC的EV调整范围为+3~0~-3。尝试对同一景象进行正确曝光、过度曝光和曝光不足三种情况成像情况。 (1)将一幅图像视为一个二维矩阵,用MATLAB进行图像增强。 (2)利用MATLAB图像处理工具箱中的函数imread(读入),imshow(显示),imnoise (加噪),filter2(滤波)对图像进行去噪处理。 (3)图像灰度修正:灰度变换。对不满意的图像通过线性或非线性灰度映射关系进行变换,其效果可以得到明显提高。通过分析,会发现变换前后图像的直方图 也发生相应的变化。 (4)图像平滑方法:领域平均、中值滤波。分析图像降质的性质,区分平稳性还是非平稳型、加性还是乘性等,采用合适的去噪方法,可以去除或降低噪声对图 像的影响。从频率域看,平均操作在降低噪声的同时衰减了图像的高频分量, 会影响图像细节的重现。中值滤波对某些信号具有不变形,适用于消除图像中 的突发干扰,但如果图像含有丰富的细节,则不宜使用。 (5)图像锐化方法:人眼对目标的边缘和轮廓较为敏感,对图像进行锐化,有助于突出图像的这些特征。从频率域看,锐化提升了图像的高频分量。 四、实验内容 MATLAB图像增强:①图像灰度修正;②图像平滑方法;③图像锐化方法。 五、实验步骤 MATLAB图像增强。 (1)图像灰度修正。测试图像为pout.tif、tire.tif。读入一幅灰度级分布不协调的图像,分析其直方图。根据直方图,设计灰度变换表达式,或调用imadjuct函数。调 整变换表达式的参数,直到显示图像的灰度级分布均衡为止。 (2)不均匀光照的校正。测试图像为pout.tif。采用分块处理函数blkproc和图像相减函数imsubtract校正图6.6存在的不均匀光照现象。 (3)三段线性变换增强。测试图像为eight.tif。选择合适的转折点,编程进行三段线