河北工业大学《计算机图像处理》实验指导书10页文档资料.docx
《河北工业大学《计算机图像处理》实验指导书10页文档资料.docx》由会员分享,可在线阅读,更多相关《河北工业大学《计算机图像处理》实验指导书10页文档资料.docx(18页珍藏版)》请在冰点文库上搜索。
河北工业大学《计算机图像处理》实验指导书10页文档资料
实验一MATLAB数字图像处理基本操作
课本、报刊杂志中的成语、名言警句等俯首皆是,但学生写作文运用到文章中的甚少,即使运用也很难做到恰如其分。
为什么?
还是没有彻底“记死”的缘故。
要解决这个问题,方法很简单,每天花3-5分钟左右的时间记一条成语、一则名言警句即可。
可以写在后黑板的“积累专栏”上每日一换,可以在每天课前的3分钟让学生轮流讲解,也可让学生个人搜集,每天往笔记本上抄写,教师定期检查等等。
这样,一年就可记300多条成语、300多则名言警句,日积月累,终究会成为一笔不小的财富。
这些成语典故“贮藏”在学生脑中,自然会出口成章,写作时便会随心所欲地“提取”出来,使文章增色添辉。
一、实验目的与要求
“教书先生”恐怕是市井百姓最为熟悉的一种称呼,从最初的门馆、私塾到晚清的学堂,“教书先生”那一行当怎么说也算是让国人景仰甚或敬畏的一种社会职业。
只是更早的“先生”概念并非源于教书,最初出现的“先生”一词也并非有传授知识那般的含义。
《孟子》中的“先生何为出此言也?
”;《论语》中的“有酒食,先生馔”;《国策》中的“先生坐,何至于此?
”等等,均指“先生”为父兄或有学问、有德行的长辈。
其实《国策》中本身就有“先生长者,有德之称”的说法。
可见“先生”之原意非真正的“教师”之意,倒是与当今“先生”的称呼更接近。
看来,“先生”之本源含义在于礼貌和尊称,并非具学问者的专称。
称“老师”为“先生”的记载,首见于《礼记?
曲礼》,有“从于先生,不越礼而与人言”,其中之“先生”意为“年长、资深之传授知识者”,与教师、老师之意基本一致。
1.熟悉MATLAB软件的开发环境、基本操作以及图像处理工具箱,为编写图像处理程序奠定基础。
要练说,先练胆。
说话胆小是幼儿语言发展的障碍。
不少幼儿当众说话时显得胆怯:
有的结巴重复,面红耳赤;有的声音极低,自讲自听;有的低头不语,扯衣服,扭身子。
总之,说话时外部表现不自然。
我抓住练胆这个关键,面向全体,偏向差生。
一是和幼儿建立和谐的语言交流关系。
每当和幼儿讲话时,我总是笑脸相迎,声音亲切,动作亲昵,消除幼儿畏惧心理,让他能主动的、无拘无束地和我交谈。
二是注重培养幼儿敢于当众说话的习惯。
或在课堂教学中,改变过去老师讲学生听的传统的教学模式,取消了先举手后发言的约束,多采取自由讨论和谈话的形式,给每个幼儿较多的当众说话的机会,培养幼儿爱说话敢说话的兴趣,对一些说话有困难的幼儿,我总是认真地耐心地听,热情地帮助和鼓励他把话说完、说好,增强其说话的勇气和把话说好的信心。
三是要提明确的说话要求,在说话训练中不断提高,我要求每个幼儿在说话时要仪态大方,口齿清楚,声音响亮,学会用眼神。
对说得好的幼儿,即使是某一方面,我都抓住教育,提出表扬,并要其他幼儿模仿。
长期坚持,不断训练,幼儿说话胆量也在不断提高。
2.掌握二值、灰度和彩色图像的读、写和显示方法,以及图像的高、宽、颜色等参数的获取方法。
3.根据实验内容进行问题的简单分析和初步编码。
二、实验相关知识
1、Matlab软件ImageProcessingToolbox简介
MatLab的原文是MatrixLaboratory,它包括若干个工具箱,如CommunicationsToolbox、ControlSystemToolbox、NeuralNetworkToolbox、WaveletToolbox等等,其中ImageProcessingToolbox图像处理工具箱可以完成GeometricOperations、Enhancement、ColorSegmentation、ImageTransformation、ImageAnalysis、MorphologicalOperations等操作。
在MatLab中,图像就是一个矩阵,在进行处理时当作一个变量即可,因此运算的书写十分简洁,故MatLab有草稿纸式的算法语言之称。
例如:
J=I+50;%为原始图像I加上一常数50,并将结果赋予变量J,其效果相当于得到一幅加亮的图像J
以此类推可以书写出减法J=I-0.5;乘法J=I*2;除法J=I/3;等等。
利用MatLab提供的imread和imwrite函数可以完成对图像文件的读写操作,它们所支持的一些常用的图像文件格式见表1-1。
表1-1MATLAB支持的一些常用的图像文件格式
格式名称
描述
可识别的扩展符
TIFF
加标签的图像文件格式
.tiff、.tif
JPEG
联合图像专家组
.jpg、.jpeg
GIF
图像交换格式
.gif
BMP
Windows位图
.bmp
PNG
可移植网络图形
.png
XWD
XWindow转储
.xwd
MatLab提供了两种运行方式,即命令行方式和M文件方式。
打开MatLab界面后,在Command窗口的提示符号“>>”下直接键入命令即可运行,如键入:
>>clear%执行本命令将会清除内存中的全部变量
>>figure
(1);%生成一个图像窗口1
>>I=imread('e:
lena.bmp');%将硬盘e:
根目录上的图像文件lena.bmp的数据读入矩阵变量I中
>>imshow(I);%在当前的图像窗口中显示图像矩阵I
>>title('原始图像');%在当前的图像窗口中加上标题
但为了能够对程序进行调试和重复应用,我们要求用M文件的方式完成实验中各个程序的编写。
2、数字图像的表示和类别
根据图像数据矩阵解释方法的不同,MATLAB把其处理为四类:
(1)亮度图像(Intensityimages)
一幅亮度图像是一个数据矩阵,其归一化的取值表示亮度。
若亮度图像的像素都是uint8类或uint16类,则它们的整数值范围分别是[0,255]和[0,65536]。
若图像是double类,则像素取值就是浮点数。
规定双精度型归一化亮度图像的取值范围是[0,1]。
(2)二值图像(Binaryimages)
一幅二值图像是一个取值只有0和1的逻辑数组。
而一幅取值只包含0和1的uint8类数组,在MATLAB中并不认为是二值图像。
使用logical函数可以把数值数组转化为逻辑数组,其语法为B=logical(A);其中A是由0和1构成的数值数组。
要测试一个数组是否为逻辑数组,可以使用函数islogical(C);若C是逻辑数组,则该函数返回1;否则,返回0。
(3)索引图像(Indexedimages)
索引颜色通常也称为映射颜色,在这种模式下,颜色都是预先定义的,并且可供选用的一组颜色也很有限,索引颜色的图像最多只能显示256种颜色。
一幅索引颜色图像在图像文件里定义,当打开该文件时,构成该图像具体颜色的索引值就被读入程序里,然后根据索引值找到最终的颜色。
(4)RGB图像(RGBimages)
一幅RGB图像就是彩色像素的一个M×N×3数组,其中每一个彩色像素点都是在特定空间位置上相对应的红、绿、蓝三个分量。
按照惯例,形成一幅RGB彩色图像的三个矩阵常称为红、绿或蓝分量图像。
令fR,fG和fB分别代表三种RGB分量图像。
一幅RGB图像就利用cat(级联)操作将这些分量图像组合成彩色图像:
rgb_image=cat(3,fR,fG,fB)在操作中,图像按顺序放置。
3、数据类和图像类型间的转化
表1-2中列出了MATLAB和ImageProcessingToolbox为表示图像所支持的各种数据类。
表中的前8项称为数值数据类,第9项称为字符类,最后一项称为逻辑数据类。
表1-3列出了工具箱中提供的一些必要函数,以便在图像类和数据类之间进行转化。
表1-2MATLAB和IPT支持数据类型
名称
描述
double
双精度浮点数,范围为
uint8
无符号8比特整数,范围为[0255]
uint16
无符号16比特整数,范围为[065536]
uint32
无符号32比特整数,范围为[04294967295]
int8
有符号8比特整数,范围为[-128127]
int16
有符号16比特整数,范围为[-3276832767]
int32
有符号32比特整数,范围为[-21474836482147483647]
single
单精度浮点数,范围为
char
字符
logical
值为0或1
表1-3格式转换函数
名称
将输入转化为
有效的输入图像数据类
im2uint8
uint8
logical,uint8,uint16和doulbe
im2uint16
uint16
logical,uint8,uint16和doulbe
mat2gray
double,范围为[01]
double
im2double
double
logical,uint8,uint16和doulbe
im2bw
logical
uint8,uint16和double
4、常用函数和命令
(1)读写图像文件
a)imread:
用于读入各种图像文件,返回一个矩阵,如:
a=imread('d:
\p1.jpg')
b)whos:
用于读取图像的基本信息,如:
whosa
c)imwrite:
用于写入图像文件,如:
imwrite(a,'d:
\p2.tif',’tif’)
d)imfinfo:
用于读取图像文件的有关信息,如:
imfinfo('d:
\p2.tif')
(2)图像的显示
a)image:
image函数是MATLAB提供的最原始的图像显示函数,如:
a=[1,2,3,4;4,5,6,7;8,9,10,11];image(a);
b)imshow:
用于图像文件的显示,如:
i=imread('d:
\p1.jpg');imshow(i);
c)colorbar:
用于显示图像的颜色条,如:
i=imread('d:
\p1.jpg');imshow(i);colorbar;
d)figure:
用于设定图像显示窗口,如:
figure
(1);figure
(2);%n为图形窗口号数
e)subplot:
把图形窗口分成多个矩形部分,每个部分可以分别用来进行显示,如:
subplot(m,n,p)
分成m×n个小窗口,在第p个窗口中创建坐标轴为当前坐标轴,用于显示图形
f)plot:
绘制二维图形,如:
plot(y);plot(x,y);%x、y可以是向量、矩阵
(3)图像类型转换
a)rgb2gray:
把真彩图像转换为灰度图像,如:
i=rgb2gray(j)
b)im2bw:
通过阈值化方法把图像转换为二值图像,如:
I=im2bw(j,level)
Level表示灰度阈值,取值范围0~1,即0.n表示阈值取自原图像灰度范围的n%
(4)其它运算函数
a)zeros:
生成全0数组或矩阵,如:
B=zeros(m,n)或B=zeros([mn]),返回一个m×n的全0矩阵
b)取整函数:
round四舍五入取整函数;floor最小取整函数;ceil最大取整函数,
如:
a=[-1.9-0.23.45.62.4+3.6i];I=round(a)
输出I=[-20362+4i]
三、实验内容
1、读入一幅RGB图像(sunset.jpg),分别转换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示这三幅图像,注上文字标题,即“原图像”、“灰度图像”、“二值图像”。
subplot(1,3,1);
I=imread('d:
\sunset.jpg');
imshow(I);
title('原图像');
subplot(1,3,2);
J=rgb2gray(I);
imshow(J);
title('灰度图像');
subplot(1,3,3);
Q=im2bw(J,0.5);
imshow(Q);
title('二值图像');
2、说明以下程序的显示结果为何是一幅几乎全黑的图像。
clear;closeall;
myi=zeros(20,20);
myi(2:
2:
18,2:
2:
18)=1;
myi=uint8(myi);
figure,imshow(myi,'notruesize');
3、阅读分析下列程序,对每条语句给出注释,运行并解释最终执行结果;若将for循环改为方框中的程序,有何不同?
clearall;closeall;
I=imread('d:
\lena512.jpg');
[height,width]=size(I);
figure;
subplot(2,3,1);
imshow(I);
title('原图像');
L=1;
form=1:
5
L=2*L;
quartimage=I(1:
L:
height,1:
L:
width);
subplot(2,3,m+1);
imshow(uint8(quartimage));
end
form=1:
5
L=2*L;
quartimage=zeros(ceil(height/L),ceil(width/L));
k=1;n=1;
fori=1:
L:
height
forj=1:
L:
width
quartimage(k,n)=I(i,j);
n=n+1;
end
k=k+1;n=1;
end
subplot(2,3,m+1);
imshow(uint8(quartimage));
end
4、编写程序将一幅灰度图像(orangutan.tif)每两行之间增加一行,即将图像的高度拉伸一倍、宽度不变,然后将其存储为图像文件。
要求拉伸后图像的奇数行对应原图像的各行,偶数行是原图像相邻两行的灰度平均值(即偶数行由插值得到),并将结果与MATLAB图像处理工具箱中提供的改变图像大小的函数imresize(imresize(I,[mn])将图像I大小调整为m行n列)的处理结果进行比较。
T1=maketform('affine',[100;020;001]);
I=imread('c:
\orangutan.tif');
I1=imtransform(I,T1);
imshow(I),figure,imshow(I1)
5、熟悉数字图像处理常用函数的使用,调出帮助文档查看其各种不同用法。
MatLab具有完善的帮助系统,包括命令行帮助、联机帮助和演示帮助等,应学会充分利用帮助系统来解决问题。
获得帮助的途径有多种,如:
(1)在MatLab界面中单击工具条上的问号,或单击Help菜单中的MATLABHelp选项;或按F1键打开Help窗口。
(2)选择函数(函数所在区变暗),点右键弹出菜单,选择HelponSelection;或在command窗口键入help函数名(或工具箱名)。
实验二图像直方图及灰度变换
一、实验目的与要求
1.掌握图像灰度直方图的概念及其计算方法,编写灰度直方图统计程序。
2.通过对图像直方图的分析,学习应用直方图法解决诸如图像二值化等具体问题。
3.熟悉直方图均衡化的计算过程及其应用。
4.掌握图像灰度变换技术,通过调整图像的对比度和亮度等参数,改善视觉效果。
二、实验相关知识
直方图是图像最基本的统计特征,是图像亮度分布的概率密度函数,反映了图像灰度值的分布情况。
直方图是多种空间域处理技术的基础。
直方图操作能有效地用于图像增强,如通过直方图均衡化处理,可使图像在整个灰度级范围内的分布均匀化,即在每个灰度级上都具有相同的像素点数,从而获得较好的视觉效果。
另外,直方图固有的信息也可用在图像分割等其它图像处理的应用中。
灰度级变换技术可用g(x,y)=T[f(x,y)]的形式表示,其中f(x,y)为输入图像,g(x,y)为输出图像,T是对图像f进行某种处理的操作。
由于(x,y)处的g值仅由f在该点处的亮度决定,T也称为一个亮度或灰度级变换函数,它与位置坐标(x,y)无关,所以通常写成如下的简化形式s=T(r),其中r和s分别表示图像f和g在相应点(x,y)的亮度。
利用灰度变换可调整一幅图像的明暗、对比度等。
三、实验内容
1、编写一个图像灰度直方图统计函数my_imhist,选择一幅图像利用my_imhist显示其直方图,将结果与MATLAB图像处理工具箱中提供的灰度直方图函数imhist的处理结果进行比较,并在同一窗口中显示出来。
a=imread('C:
\iris.tif' );
J=a;
L=256;
my=zeros(L,1);
[row,col]=size(a);
n=row*col;
for i = 1:
row
for j = 1:
col
num = double(a(i,j))+1;
my(num) = my(num)+1;
end
end
%计算直方图概率估计
for i=1:
L
end
figure;
subplot(1,2,2);imhist(a);title('imhist处理')
subplot(1,2,1);bar(my);title('自编函数处理')
2、利用以上编写的函数my_imhist或imhist,估算图像iris.tif中瞳孔的半径(以像素为单位)。
100~200之间的单位个数为8,则瞳孔面积大概为80000像素,利用求半径公式S=3.14R^2得到半径R=√ ̄(S/3.14)=√ ̄(80000/3.14)≈160像素
img=imread('C:
\iris.tif');
imshow(img);
[M,N]=size(img);
img=double(img);
h=zeros(256,256);
for i=1:
M, for j=1:
N,
f=img(i,j);
h(f+1)=h(f+1)+1;
end
end
figure;bar(h);
grid;
I = imread('D:
\iris.tif');
imhist(I)
3、利用MATLAB提供的图像直方图修正函数histeq,选择一幅直方图不均匀的图像如pout.tif,对其进行直方图均衡化处理,显示处理前后的图像以及它们的灰度直方图,体会直方图均衡化算法的特点。
I=imread('pout.tif');
H=histeq(I);
subplot(2,2,1),imshow(I);
title('源图像');
subplot(2,2,2),imshow(H);
title('均衡化后的图像');
subplot(2,2,3),imhist(I);
title('源图像的直方图');
subplot(2,2,4),imhist(H);
title('均衡化后的图像直方图');
4、按照教材68页上的公式(4.1.6)
(4.1.6)
以及公式
,分别编程实现图像的分段线性灰度变换和非线性灰度变换。
利用自己编写的代码对图像bottle.tif进行灰度调整,使拍摄主体瓶子的花纹更加清晰地表现出来,以改善视觉效果。
将同一个图形窗口分成四个子窗口来分别显示灰度变换前、后的图像以及它们的灰度直方图,注上文字标题。
并考虑利用MATLAB提供的imadjust函数是否能完成同样的工作。
F=imread('d:
\bottle.tif');
[row,col]=size(F);
max=double(F(1,1))+1;
fori=1:
row
forj=1:
col
k=double(F(i,j))+1;
ifmaxmax=k;
end
end
end
disp('灰度最大值:
');
max
disp('--------------首先进行线性变换--------------');
fo=input('请输入源图像的灰度范围:
');
a=fo
(1);
b=fo
(2);
ifb>max
disp('输入源图像的范围不能大于最大值!
');
end
re=input('请输入变换后的灰度范围:
');
c=re
(1);
d=re
(2);
ifd>256%判断d是否超过256
disp('输入变换后的范围不能超过255!
');
end
G=zeros(row,col);
fori=1:
row
forj=1:
col
k=double(F(i,j))+1;
ifk G(i,j)=(c/a)*F(i,j);
elseifk
G(i,j)=((d-c)/(b-a))*(F(i,j)-a)+c;
else
G(i,j)=((255-d)/(max-b))*(F(i,j)-b)+d;
end
end
end
out=uint8(round(G-1));
figure,imshow(F);
title('源图像');
figure,imshow(out);
title('线性变换后');
figure,imhist(F);
title('源图像的直方图');
figure,imhist(out);
title('线性变换后的直方图');
disp('--------下面进行非线性变换,其变换公式为g=c*f^y--------');
y=input('请输入指数y:
');
c=input('请输入乘数c:
');
g=zeros(row,col);
fori=1:
row
forj=1:
col
k=double(F(i,j))+1;
g(i,j)=c*(k^y);
end
end
max=g(1,1);
fori=1:
row
forj=1:
col
ifmaxmax=g(i,j);
end
end
end
scale=max/256;
fori=1:
row
forj=1:
col
g(i,j)=round(g(i,j)/scale);
end
end
out2=uint8(round(g-1));
figure,imshow(out2);
title('非线性变换后');
figure,imhist(out2);
title('非线性变换后的直方图');
实验三图像增强与边缘检测
一、实验目的与要求
1.加深对图像增强及边缘检测技术的感性认识,应用MATLAB工具箱自带的处理函数或自己编程完成相关的工作,分析处理结果,巩固所学理论知识。
2.熟练掌握空域滤波中常用的平滑和锐化滤波器,针对不同类型和强度的噪声,进行滤波处理,体会并正确评价滤波效果,了解不同滤波方式的使用场合,能够从理论上作出合理的解释。
3.掌握基于边缘检测的图像分割方法,通过实验体会主要的边缘检测算子在处理结果上的异同,探讨不同因素对轮廓提取效果的影响,培养处理实际图像的能力。
二、实验相关知识
图像增强是指按特定的需要突出一幅图像中的某些有用信息,同时消弱或去除某些不需要的信息的处理方法,其主要目的是使处理后的图像对某些特定的应用比原来的图像更加有效。
图像平滑与锐化处理是图像增强的主要研究内容。
图像分割是由图像处理过渡到图