基于matlab图像处理讲稿-2012-下课件.ppt
《基于matlab图像处理讲稿-2012-下课件.ppt》由会员分享,可在线阅读,更多相关《基于matlab图像处理讲稿-2012-下课件.ppt(342页珍藏版)》请在三一文库上搜索。
1、数字图像处理 Digital Image Processing,主讲:廖朝阳 E_mail: QQ:397388511 Tel:13787638196 湖南科技学院 电子信息教研室,数字图像处理 廖朝阳 TEL:6169976 Email:,1.3 基于图像的动画制作,序列图像 序列图像,JPG图像格式,GIF图像(静态 GIF和动画GIF),MPEG图像(包括 MPEG-1 、 MPEG-2 、 MPEG-4 、MPEG-7等 ),图1-19 逐幅显示的GIF图像,数字图像处理 廖朝阳 TEL:6169976 Email:,【例1-15】读取GIF动画图像并逐幅显示出来。 GIF动画图像
2、lanqiu.gif存储在D盘根目录下,编写如下程序,读取该图像并逐幅显示,显示的结果在图1-19中。 m=uint8(zeros(127,91,4); for fr=1:4 m(:, :, fr),map=imread(d:lanqiu.gif,fr); m1(:, :, :, fr)=ind2rgb(m(:, :, fr),map); subplot(1,4,fr) imshow(m1(:, :, :, fr) axis off end,数字图像处理 廖朝阳 TEL:6169976 Email:,该程序首先使用uint8(zeros(127,91,1,4)创建了一个四维全零数组,数据类型为
3、无符号整型,数组名为m。 在编写程序前,事先查看图像lanqiu.gif的属性,得知该图像的高为127,宽为91,一共四幅,所以创建的数组大小为(127,91,4)。 在循环语句中,顺序读出四幅图像的数据,然后使用subplot(1,4,fr) 把四幅图像显示在一个图形窗口中。 语句m(:, :, fr),map=imread(d:lanqiu.gif,fr)读出每一幅图像的数据矩阵与映射矩阵。 语句m1(:, :, :, fr)=ind2rgb(m(:, :, fr),map)是把读出的索引图像变为RGB彩色图像。 axis off是不显示坐标轴。,数字图像处理 廖朝阳 TEL:616997
4、6 Email:,图像播放,使用图像显示函数播放图像 使用pause函数与image函数等顺次播放图像。 使用movie函数播放图像 【例1-17】使用movie函数播放图像。 编写如下程序,能够实现图像播放 for i=1:4 k=int2str(i); k1=strcat(e:ziranjingguan,k,.bmp); a1=imread(k1); image(a1); m(:,i)=getframe; end movie(m,15),数字图像处理 廖朝阳 TEL:6169976 Email:,在这个程序中,使用了图像播放函数movie(m,15),该函数能够按照固定时间间隔播放存储在多
5、维数组m中的图像。 k=int2str(i)是把i从数值形式变成字符形式,然后赋给变量k; k1=strcat(e:ziranjingguan,k,.bmp)是把字符串e:ziranjingguan 与k连接后再连接.bmp,得到了图像文件存储的位置; a1=imread(k1)是读入图像数据赋给数组变量a1; 然后在图形窗口中使用image(a1)显示数组a1所代表的图像; m(:,i)=getframe是从图形窗口上取当前图形(图像),把数据赋给数组变量m的第i页。 movie(m,15)是连续播放15次。 上面例1-17程序中的语句image(a1)是不可缺少的,因为getframe需要
6、从图形窗口中获得图像数据。,数字图像处理 廖朝阳 TEL:6169976 Email:,基于图像的动画制作,绘制图像制作动画: 【例1-18】绘制序列图像制作动画。 下面图1-20中的3个图象是用画图工具绘制出来的,分 别命名为1.jpg、2.jpg与3.jpg,存储在E盘根目录下。,图1-20 制作动画的三幅图像,数字图像处理 廖朝阳 TEL:6169976 Email:,下面程序使用getframe函数装载这几幅图像,使用movie函数播放这几幅图像就是完成了一个动画制作。 for i=1:3 k=int2str(i); k1=strcat(e:,k,.jpg); a1=imread(k1
7、); image(a1); m(:,i)=getframe; end movie(m,10) 目前一些动画制作就是使用这种方式,先手动绘制大量的具有连续内容的图片,然后扫描(或利用其他输入方式)输入到机器中,最后把这些图像组织到一起,进行播放。,数字图像处理 廖朝阳 TEL:6169976 Email:,切割图像制作动画: Matlab提供了函数imcrop(A,i,j,m,n)用来对图像进行切割,其中参数A是被切割图像矩阵,(i,j)表示被切割区域的左上角顶点,(m,n)表示被切割区域的右下角顶点。 【例1-19】使用切割图像函数制作动画。,A=imread(D:111.jpg); a=50
8、; b=50; for i=1:50 a=a-1; b=b+1; A1=imcrop(A,a,a,b,b); imshow(A1) end,右面程序使用imcrop函数,利用一幅图像制作出了动画效果。 程序运行后,先从图像中间开始显示小块,逐渐向四周扩大显示范围,连续起来形成了动画。,数字图像处理 廖朝阳 TEL:6169976 Email:,完整的图像如图1-21(a)所示。 图1-21(b)是当i=5时切割出来的图像 (c)是当i=15时切割出来的图像 (d)是当i=30时切割出来的图像 (e)是当i=50时切割出来的图像。,(a),(b),(c),(d),(e),数字图像处理 廖朝阳 T
9、EL:6169976 Email:,利用图像颜色与亮度变化制作动画: 【例1-21】逐渐减少RGB图像的绿色成分,完成一个颜色渐变的动画。 编写程序如下: I=imread(D:114.jpg); I1=I(:,:,2); s=size(I1); a=ones(s(1),s(2); I2=double(I1); for i=1:50 I2(:,:)=I2(:,:)-a*i; I(:,:,2)=I2(:,:); imshow(I) end,程序的运行结果是一 个颜色渐变的动画。,数字图像处理 廖朝阳 TEL:6169976 Email:,为了把颜色渐变情况在一个窗口中展示出来,下面程序绘制出一些
10、中间帧,如图1-23所示。 I=imread(D:111.jpg); I1=I(:,:,2); s=size(I1); a=ones(s(1),s(2); I2=double(I1); for i=1:8 I2(:,:)=I2(:,:)-a*i*5; subplot(2,4,i) I(:,:,2)=I2(:,:); imshow(I) end,数字图像处理 廖朝阳 TEL:6169976 Email:,图1-23 图像的绿色成分逐渐减少,数字图像处理 廖朝阳 TEL:6169976 Email:,第2章 图像几何操作,2.1 图像的缩放旋转与裁剪 2.2 图像的几何变换,数字图像处理 廖朝阳
11、TEL:6169976 Email:,2.1 图像的缩放旋转与裁剪,图像的裁剪 imcrop函数:该函数有两个参数,一个用来指定裁剪图像,一个用来定义裁剪矩形。 自定义区域对图像进行裁剪:Matlab中提供了定义多边形区域的函数roipoly,可以使用该函数定义多边形区域,然后实行裁剪操作。直接调用roipoly函数可以交互实现任意多边形的区域选取。,数字图像处理 廖朝阳 TEL:6169976 Email:,图像的缩放,imresize函数缩放图像: 【例2-2】使用imresize函数缩小或放大图像。 下面程序把图像缩小到原来的0.5倍。c=imread(D:earth.jpg); c2=
12、imresize(c,0.5); imshow(c2) 下面程序把原图像变成100行100列图像,行数增加,使 用插值函数完成颜色的填补。 c=imread(D:earth.jpg); c2=imresize(c,100,100); imshow(c2) 【思考题】把图像放大到原来的3倍,如何修改程序?,数字图像处理 廖朝阳 TEL:6169976 Email:,三种插值方法 最近邻插值方法:最近邻插值方法是imresize函数默认的插值方法。 双线性插值方法 双立方插值方法 Imresize函数就使用这三种插值方法。,数字图像处理 廖朝阳 TEL:6169976 Email:,图像的旋转,M
13、atlab使用imrotate函数旋转图像。例如,使用下面命 令段可以把图像逆时针旋转30度。 B=imread(ic.tif); imshow(B) figure imrotate(B,30, crop) 这几句命令绘制出图2-4(a)与(b)图。,(a)原图像,(b)逆时针旋转30度,(c)逆时针旋转30度,数字图像处理 廖朝阳 TEL:6169976 Email:,调用语句imrotate时,如果不写参数crop,写为imrotate(B,30),那么旋转后的图像大小不变,而图像的底板一般会变大,如图2-4(c)所示。 与图像缩放一样,这里的插值也是三种形式,最近邻插值、双线性插值与双三
14、次插值,默认为最近邻插值。 Imrotate函数调用的一般形式为:imrotate(A, Angle, Method, Bbox) 其中参数Method为插值方法,调用函数时,如果需要指定插值方式的话,在参数Method的位置上注明nearest、bilinear或者bicubic。 参数Bbox为loose时,旋转图形如2-4(c)所示,底板扩大,为默认形式;参数Bbox为crop时,旋转图形如2-4(b)所示,底板不变,图像可能被切割。 【思考题】修改命令,把图像顺时针旋转90度。,数字图像处理 廖朝阳 TEL:6169976 Email:,2.2 图像的几何变换,图像的几何变换是指图像几
15、何操作后,内部结构比例 等发生变化,但整体布局与形状没有改变。包括图像扭 曲、图像二维空间变换、距离变换等内容。 画图软件中的图像扭曲 在图像处理软件中,都提供了图像扭曲的功能。例如 , Windows中简单的画图软件:打开拉伸扭曲窗口,在 扭曲组合框中修改水平参数为20,那么点击确定后,白 色画板上的图像就会水平扭曲20度。,数字图像处理 廖朝阳 TEL:6169976 Email:,图像二维空间变换 图像二维仿射变换 Matlab使用imtransform函数完成图像空间变换。imtransform函数的调用形式为:imtransform(I,T),其中参数I是要变换的图像,T是由make
16、tform函数产生的变换结构。 在函数maketform(P,)中,参数P可以是以下形式: affine 仿射变换形式 projective 投影变换形式 custom 自定义函数进行变换 box 依靠函数中的另外参数产生仿射变换结构 composite 该参数实现多次调用tformfwd功能,数字图像处理 廖朝阳 TEL:6169976 Email:,函数maketform就是利用给定的参数建立变换结构,然后把该变换结构赋给结构体变量(例如赋给T)。根据得到的结构体变量T,调用函数imtransform(I,T)进行变换。 图像二维投影变换 二维变换投影可以把一幅图像按照近大远小的规律投影到
17、一个平面上,产生立体的效果。运用好函数maketform中的两个向量,能够绘制出很多特殊效果的图形。 【思考题】根据给定的函数maketform中的两个向量求变换矩阵。,数字图像处理 廖朝阳 TEL:6169976 Email:,2.3 图像的邻域操作,邻域操作 图像小狮子的颜色数据详见课教材, 由于图像很小,所以可以把数 据显示在一起,以便进行比较。 小狮子图像是方形的,高与宽都为16。A1(:,:,1) 、A1(:,:,2) 与 A1(:,:,3)分别代表图像的红色(R)、绿色(G)与蓝色阵(B)。这个小图像 是使用RGB颜色形式表示颜色的。三个颜色矩阵合在一起形成了各种 颜色,例如:A1
18、(:,:,1) 、A1(:,:,2) 与A1(:,:,3)的左上角的数据都是 255,所以合在一起左上角呈白色。 教材中的数据是使用语句A1=imread(D:shizi1.bmp)读入的 ,使 用下面程序段能够把小狮子图像化为灰度图像。A1=imread(D:shizi1.bmp); A2=double(A1); A3=floor(A2(:,:,1)+A2(:,:,2)+A2(:,:,3)/3),数字图像处理 廖朝阳 TEL:6169976 Email:,【例2-10】对小狮子图像进行邻域操作,使小狮子图像的轮廓变得清晰。 编写如右面的程序,绘制出图2-10(c) 所示图形。,A1=imre
19、ad(D:shizi1.bmp); A2=double(A1); A3=floor(A2(:,:,1)+A2(:,:,2)+A2(:,:,3)/3); C= -1 -1 -1 -1 8 -1 -1 -1 -1; for i=2:15 for j=2:15 L=A3(i-1:i+1,j-1:j+1).*C; A4(i,j)=sum(sum(L); end end A4 imshow(A4),图2-10 对小狮子图像进行邻域操作后的结果,(a) (b) (c) (d),数字图像处理 廖朝阳 TEL:6169976 Email:,该程序中,首先把图像读入,然后使用语句A2=double(A1)把图像
20、数据变为浮点型数据。再通过语句A3=floor(A2(:,:,1)+A2(:,:,2)+A2(:,:,3)/3)把彩色图像变为灰度图像。变为灰度图像的方法就是把三种颜色值加在一起然后除以3。floor函数用来实现取整功能。A3为二维数组,此时A3中存储着灰度图像数据。 程序中定义了行数列数都为3的矩阵C,该矩阵称为滑动块矩阵,也叫做掩膜矩阵,很多书上都称之为滤波器。 在例题2-10中,一共调用了滑动块矩阵C (15-2+1)*(15-2+1)=196次,总计得到了矩阵A4的196个元素。为了计算方便,i、j都是从2开始循环,所以矩阵A4的第一行元素与第一列元素都默认为0,图2-10(c)有黑色
21、的左边框与上边框。,数字图像处理 廖朝阳 TEL:6169976 Email:,下面利用图2-11进一步讲解邻域操作的过程。,图2-11,数字图像处理 廖朝阳 TEL:6169976 Email:,运行例2-10中程序后,在矩阵C上进行滑动的时候,首先从图2-11左上角开始,修改的是原图像的(2,2)元素,修改该元素的方法是: 1使用滑动块矩阵C= 与 (即以 原图像的(2,2)元素为中心的3*3邻域矩阵)对应元素相乘,得到了新的3*3矩阵D= 2把新得到的矩阵D的所有元素相加,和作为新图像的(2,2)元素的值。程序中使用的语句为:A4(i,j)=sum(sum(L)。该例子中,新图像的(2,
22、2)元素的值为0。,数字图像处理 廖朝阳 TEL:6169976 Email:,例题2-10修改的第2个元素是(2,3),然后是(2,4),(2,15)。(2,16)没有修改。接着修改第3行(3,2)到(3,15)元素,如此下去,最后一行没有修改。实际上就是图像最外面一圈元素没有修改,共记60个元素没有修改。 使用语言编写程序对图像进行邻域操作时,主要是利用多重循环语句实现。 【注】1. 语句A3(i-1:i+1,j-1:j+1).*C中乘法是两个大小一样的矩阵对应元素相乘。 2. 例题2-10得到的新矩阵A4有很多负值,使用imshow函数能够自动对矩阵数据按比例进行调整。图2-10 (d)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 matlab 图像 处理 讲稿 2012 课件
链接地址:https://www.31doc.com/p-3568253.html