基于matlab图像处理讲稿-2012-下课件.ppt

上传人:本田雅阁 文档编号:2801676 上传时间:2019-05-19 格式:PPT 页数:342 大小:6.58MB
返回 下载 相关 举报
基于matlab图像处理讲稿-2012-下课件.ppt_第1页
第1页 / 共342页
基于matlab图像处理讲稿-2012-下课件.ppt_第2页
第2页 / 共342页
基于matlab图像处理讲稿-2012-下课件.ppt_第3页
第3页 / 共342页
基于matlab图像处理讲稿-2012-下课件.ppt_第4页
第4页 / 共342页
基于matlab图像处理讲稿-2012-下课件.ppt_第5页
第5页 / 共342页
点击查看更多>>
资源描述

《基于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)

23、是在原程序语句A3=floor(A2(:,:,1)+A2(:,:,2)+A2(:,:,3)/3);后面加上语句A4=A3;(其他语句不变),运行后得到的结果。 【思考题】观察图2-10(c)与图2-10(d)的区别,分析产生差别的原因。,数字图像处理 廖朝阳 TEL:6169976 Email:,Matlab邻域操作函数,nlfilter函数: 该函数被调用的一般形式为:B =nlfilter(A,M N,FUN),其中A 是被处理的图像,M N表示滑动块的高为M、宽为N。FUN是要对滑动 覆盖区域进行操作的函数名,该函数可以是各种滤波算子,可以是任 意定义的矩阵。 【例2-12】使用nlfi

24、lter函数对图像进行均值平滑邻域操作。 把例2-11程序改写如下: A=imread(D:shizi.bmp); A1=rgb2gray(A); subplot(1,2,1); imshow(A1); fun = inline(mean(mean(x); B = nlfilter(A1,3 3,fun); subplot(1,2,2); image(B); axis off,数字图像处理 廖朝阳 TEL:6169976 Email:,程序的运行结果如图2-13所示。在这个程序中,修改了操作函数,把中值操作改为求3 3块的均值。与max函数等一样,当x是矩阵时,函数mean(x)是求矩阵每列的

25、平均值,得到一个(均值)行向量,所以两次调用函数mean,即使用mean(mean(x)来求3 3块的均值。 图2-13(b)边框变成深色,是由于边界补0造成的。在调用函数nlfilter时,如果使用3 3大小的滑动块操作,需要在图像边界外添加一行与一列,默认情况下添加0。 调用函数nlfilter时,如果参数FUN 有参数,那么需要使用下面格式:B = NLFILTER(A,M N,FUN,P1,P2,.)进行调用。P1,P2,.为函数FUN的实参,把值传入函数体中。,(a),(b),原灰度图像 均值操作后图像 图2-13 使用nlfilter函数进行均值邻域操作,数字图像处理 廖朝阳 TE

26、L:6169976 Email:,colfilt函数:colfilt函数与nlfilter函数是有区别的,colfilt函数在处理图像时,先把滑动块遮住的图像部分(与滑动块同样大小)排成一列,处理之后再恢复原来大小。一般说来,colfilt函数处理图象的速度要快,但是要占用较多的内存空间。 colfilt函数与nlfilter函数的另一个重要区别是colfilt函数在移动的时候可以在sliding与distinct两者中进行选择,而nlfilter函数只是执行sliding操作。colfilt函数在选择distinct时,滑动块不再逐象素滑动,而是逐块移动。 【例2-13】使用colfilt函

27、数进行图像邻域操作。 设计下面程序 A=imread(D:qizhong.gif); subplot(1,2,1); imshow(A); B=uint8(colfilt(A,5 5,sliding,mean); subplot(1,2,2); imshow(B),数字图像处理 廖朝阳 TEL:6169976 Email:,原图像 邻域均值操作后 图2-14 使用colfilt函数进行图像邻域均值平滑操作,(a),(b),blkproc函数是专门进行分离块操作的函数。 【例2-15】使用blkproc函数进行图像分离块操作。 I = imread(D:shizi.bmp); I1=rgb2gr

28、ay(I); fun = dct2; J = blkproc(I1,8 8,fun); imagesc(J),数字图像处理 廖朝阳 TEL:6169976 Email:,图2-16 使用blkproc函数进行图像分离块DCT操作,blkproc函数是专门进行分离块操作的函数。 【例2-15】使用blkproc函数进行图像分离块操作。 I = imread(D:shizi.bmp); I1=rgb2gray(I); fun = dct2; J = blkproc(I1,8 8,fun); imagesc(J),该程序中,使用语句fun = dct2调用了函数dct2,这个函数是计算矩阵的离散余弦

29、变换,每个8 8的分离块都进行离散余弦变换。,数字图像处理 廖朝阳 TEL:6169976 Email:,2.4 图像区域选取,块选取函数 Matlab还提供了一个区域选取函数roipoly( ),可以完成各种多边形块的选取功能。 曲线围成的区域 在计算机中没有严格的连续曲线,所有的曲线都是多边形。所以可以用roipoly函数选取近似的曲边区域。,数字图像处理 廖朝阳 TEL:6169976 Email:,【例2-17】图像块选取后进行加运算,完成图像块的标注。 设计右面程序: 在程序中,使用了C1与C2定义了一个三角形,然后使用语句BW=roipoly(I3,C1,C2)得到了一个二值图像矩

30、阵BW。因为矩阵BW是0-1矩阵,所以为了实现相加把矩阵BW扩大256倍后变为矩阵B,然后使用语句AB=(I3+B)把原图像I3与(遮罩矩阵)B加在一起,最后得到合成矩阵AB。,I1,m=imread(D:125.jpg); I2=rgb2gray(I1); I3=double(I2); subplot(1,2,1) imshow(I3,m) C1=10 30 80; C2=20 100 68 ; BW=roipoly(I3,C1,C2); B=double(BW)*256; AB=(I3+B); subplot(1,2,2) imshow(AB,m),数字图像处理 廖朝阳 TEL:61699

31、76 Email:,因为图像D:125.jpg是以索引方式存储的,程序中语句I1,m=imread(D:125.jpg)与imshow(AB,m)都是用来读取、显示索引图像的。 另外,直接调用roipoly函数,不使用参数,可以在命令执行后交互绘制区域。 BW(图像)中,选择区域的颜色为白,其他位置都是黑色。得到了矩阵BW后,可以根据BW的信息对选取的区域进行处理。,(a) 灰度图像 (b) 选择区域 图2-18 图像的块操作后加运算,数字图像处理 廖朝阳 TEL:6169976 Email:,【例2-18】使用正弦曲线围成图像块。 设计下面程序: A=imread(D:1250.jpg);

32、subplot(1,2,1) imshow(A,m) C1=10:pi:180; C2=floor(20*sin(C1); BW=roipoly(A,C1,C2); B=double(BW)*256; AB=(A+B); subplot(1,2,2) imshow(AB),数字图像处理 廖朝阳 TEL:6169976 Email:,程序的运行结果是图2-19。,语句C1=10:pi:180是相当于求横坐标值赋给变量C1,pi 是Matlab默认的圆周率。语句C2=floor(20*sin(C1)是求对应的函数值。AB是A与B的和。(C1, C2)对应元素组成的点构成了一个正弦曲线,如图2-19

33、(b)所示。仿照例2-18可以定义并选取其他形状的曲线围成的区域。,(a) (b) 图2-19 曲线围成的图像块选取,数字图像处理 廖朝阳 TEL:6169976 Email:,2.5 图像增强,图像增强是对图像进行操作,得到视觉效果更好或者更有 用的新图像。图像增强是在原有图像的基础上进行的,狭义 上的图像增强就是加强或减弱灰度图像的明暗对比度,广义 上的图像增强除了对灰度图像进行增强外,还包括彩色图像 增强等。在这一节中,简单介绍广义的图像增强。 灰度调整:增加灰度图像的明暗对比度,灰度图像就 变得更加清楚。增加明暗对比度的一种常用方法是灰度 调整方法。灰度调整方法是基于灰度直方图的一种图

34、像 增强方法。,数字图像处理 廖朝阳 TEL:6169976 Email:,根据图像pout.tif颜色分布情况调整图像灰度值,增强该图像的明暗对比度。,数字图像处理 廖朝阳 TEL:6169976 Email:,2019/5/19,41,灰度调整函数 imadjust,【例2-22】使用函数imadjust对图像进行灰度调整。 编写如下程序: A1=imread(pout.tif); B1=imadjust(A1,0.2 0.5,0,1); A2=imread(cameraman.tif); B2=imadjust(A2,0,0.2,0.5,1); subplot(1,4,1);imshow

35、(A1) subplot(1,4,2);imshow(B1) subplot(1,4,3);imshow(A2) subplot(1,4,4);imshow(B2),数字图像处理 廖朝阳 TEL:6169976 Email:,2019/5/19,42,(a) pout.tif (b)灰度调整后 (c)cameraman.tif (d)灰度调整后 图2-23 使用imadjust函数对图像进行灰度调整,程序中语句B1=imadjust(A1,0.2 0.5,0,1)的第1个参数是要处理的矩阵,第2个参数用来限制输入范围,如果原来图像的颜色值是0至255,那么把小于255*0.2的颜色值置为0,把

36、大于255*0.5的值置为255,再把其他介于中间的值映射到第3个参数决定的区间。这个语句的第3个参数为0 1,那么该例题就映射到0至255。,数字图像处理 廖朝阳 TEL:6169976 Email:,函数stretchlim(A)是用来计算灰度矩阵A的最佳输入区间 函数histeq能够自动完成图像灰度调整,一般用来增强图像的灰度对比度。 函数brighten增加灰度图像的亮度,数字图像处理 廖朝阳 TEL:6169976 Email:,彩色图像增强,【例2-26】使用函数imadjust对RGB彩色图像进行颜色调整。 设计下面程序: RGB1 = imread(flowers.tif);

37、RGB2 = imadjust(RGB1, .2 .3 0; .6 .7 1); subplot(1,2,1); imshow(RGB1) subplot(1,2,2); imshow(RGB2),(a) flowers.tif (b) 颜色调整后 图2-30 imadjust函数对RGB彩色图像的颜色进行调整,数字图像处理 廖朝阳 TEL:6169976 Email:,2019/5/19,45,程序运行结果如图2-30所示。 图像文件flowers.tif存储着一幅彩色图像,把该文件读入后使用imadjust函数进行调整。 调整后的范围是默认的范围0 0 0; 1 1 1,也就是把0.2 0

38、.6之间的红色映射到0 1之间;把0.3 0.7之间的绿色映射到0 1之间;把0 1之间的蓝色映射到0 1之间。 映射后的结果为图2-30(b),从图形的效果上看,红色与黄色成分有所增强,而蓝色成分没有变。,数字图像处理 廖朝阳 TEL:6169976 Email:,【例2-27】使用函数imadjust对HSV彩色图像进行颜色调整。 设计下面程序: RGB1 = imread(flowers.tif); HSV1 = rgb2hsv(RGB1); HSV2 = imadjust(HSV1, .2 .3 0; .6 .7 1, 0 0 0; 1 1 0); HSV3 = imadjust(HS

39、V1, .2 .3 0; .6 .7 1, 0 0 0; 1 0 1); HSV4 = imadjust(HSV1, .2 .3 0; .6 .7 1, 0 0 0; 0 1 1); subplot(2,2,1); imshow(HSV1) subplot(2,2,2); imshow(HSV2) subplot(2,2,3); imshow(HSV3) subplot(2,2,4); imshow(HSV4) 程序运行结果为图2-32所示,HSV 彩色图像增强,(1),(2),(3),(4),数字图像处理 廖朝阳 TEL:6169976 Email:,2.6 图像滤波,滤波是一种应用广泛的图

40、像处理技术,可以通过滤波来强调或删除图像的某些特征。滤波是一种邻域操作,即处理后的图像每个象素值是原来该象素周围的颜色值经过某种计算得到的。2.3节介绍的图像邻域操作就是一种图像滤波。,滤波函数imfilter 滤波器的定义,数字图像处理 廖朝阳 TEL:6169976 Email:,滤波函数imfilter,函数imfilter是Matlab中使用较多的滤波函数,基本调用形式为: B = IMFILTER(A,H,OPTION) 其中A为要进行滤波的图像矩阵,可以为多维的彩色图像矩阵(数组);H是已经定义的滤波算子。这个函数本身也是基于邻域滑动设计实现的,所以也涉及到边界如何填补的问题,参数

41、OPTION可以选择边界填补参数symmetric、replicate、circular等。 【例2-27】使用函数imfilter对图像进行滤波,同时研究该函数的边界参数的意义。,数字图像处理 廖朝阳 TEL:6169976 Email:,设计下面程序: rgb = imread(D:125.jpg); h = ones(5,5)/25; rgb1 = imfilter(rgb,h); rgb2 = imfilter(rgb1,h,replicate); subplot(1,3,1),imshow(rgb), title(Original) subplot(1,3,2), imshow(rg

42、b1), title(Filtered) subplot(1,3,3), imshow(rgb2), title(boundary replication),数字图像处理 廖朝阳 TEL:6169976 Email:,【例2-28】使用函数imfilter对图像进行滤波,分析几个滤波器的区别。 设计下面程序,程序运行结果显示在图2-34中。 rgb = imread(D:003.bmp); h1 = 0 0 0.0000 0.0021 0.0042 0.1958 0.1979 0.2000 0.1979 0.1958 0.0042 0.0021 0.0000 0 0; h2 = 1 2 1 0

43、 0 0 -1 -2 -1; h3 = 0.1667 0.6667 0.1667 0.6667 -3.3333 0.6667 0.1667 0.6667 0.1667; rgb1 = imfilter(rgb,h1); rgb2 = imfilter(rgb,h2); rgb3=imfilter(rgb,h3);,数字图像处理 廖朝阳 TEL:6169976 Email:,subplot(2,2,1), imshow(rgb), title(原图像) subplot(2,2,2), imshow(rgb1), title(运动滤波) subplot(2,2,3), imshow(rgb2),

44、title(水平边缘增强) subplot(2,2,4), imshow(rgb3), title(拉普拉斯滤波) 由于3个滤波器的构造不同,所以滑动滤波后的效果就不同。 原图像是自绘的图像,背景色为白色,有三个线框矩形交叠在一起,左下角与右上角各有一个黑色填充圆形。 运动滤波后图像在接近水平的方向上变宽,并且模糊。水平边缘增强滤波把背景变成了黑色,垂直边缘消失,只剩下水平边。 拉普拉斯滤波后背景变成黑色,两个圆形的内部没有改变颜色,不过圆形边缘变成了白色。,数字图像处理 廖朝阳 TEL:6169976 Email:,图2-35 为了研究h1的工作原理,在图2-34(a)上截取一个小图像“”,

45、对该小图像实行imfilter滤波操作(算子为h1),操作前后的数据在中。从这些数据不难看出图像纵向边缘拓宽变浅的原因。,数字图像处理 廖朝阳 TEL:6169976 Email:,滤波器的定义,fspecial函数生成线性空间滤波器 可以使用Matlab中的函数fspecial(T,P)产生一个由T指定的二维线性滤波器。参数T可以在下面选项中选取。 average 均值滤波器 disk 圆形均值滤波器 gaussian 高斯低通滤波器 laplacian 二维拉普拉斯滤波器 log 高斯拉普拉斯滤波器 motion 运动滤波器 prewitt Prewitt水平边缘增强滤波器 sobel Sobel水平边缘增强滤波器

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1