




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数字图像处理
DigitalImageProcessing主讲:廖朝阳E_mail:62886210@163.comaliao660815@QQ:397388511Tel南科技学院电子信息教研室1.3基于图像的动画制作
序列图像序列图像,JPG图像格式,GIF图像(静态GIF和动画GIF),MPEG图像(包括
MPEG-1、MPEG-2、MPEG-4、MPEG-7等)图1-19逐幅显示的GIF图像
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com【例1-15】读取GIF动画图像并逐幅显示出来。GIF动画图像lanqiu.gif存储在D盘根目录下,编写如下程序,读取该图像并逐幅显示,显示的结果在图1-19中。m=uint8(zeros(127,91,4));forfr=1:4[m(:,:,fr),map]=imread('d:\lanqiu.gif',fr);m1(:,:,:,fr)=ind2rgb(m(:,:,fr),map);subplot(1,4,fr)imshow(m1(:,:,:,fr))axisoffend数字图像处理廖朝阳TEL:6169976Email:62886210@163.com
该程序首先使用uint8(zeros(127,91,1,4))创建了一个四维全零数组,数据类型为无符号整型,数组名为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彩色图像。axisoff是不显示坐标轴。数字图像处理廖朝阳TEL:6169976Email:62886210@163.com图像播放
使用图像显示函数播放图像使用pause函数与image函数等顺次播放图像。使用movie函数播放图像【例1-17】使用movie函数播放图像。编写如下程序,能够实现图像播放fori=1:4k=int2str(i);k1=strcat('e:\ziranjingguan',k,'.bmp');a1=imread(k1);image(a1);m(:,i)=getframe;endmovie(m,15)
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com在这个程序中,使用了图像播放函数movie(m,15),该函数能够按照固定时间间隔播放存储在多维数组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需要从图形窗口中获得图像数据。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com基于图像的动画制作
绘制图像制作动画:【例1-18】绘制序列图像制作动画。下面图1-20中的3个图象是用画图工具绘制出来的,分别命名为1.jpg、2.jpg与3.jpg,存储在E盘根目录下。图1-20制作动画的三幅图像
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com下面程序使用getframe函数装载这几幅图像,使用movie函数播放这几幅图像就是完成了一个动画制作。fori=1:3k=int2str(i);k1=strcat('e:\',k,'.jpg');a1=imread(k1);image(a1);m(:,i)=getframe;endmovie(m,10)
目前一些动画制作就是使用这种方式,先手动绘制大量的具有连续内容的图片,然后扫描(或利用其他输入方式)输入到机器中,最后把这些图像组织到一起,进行播放。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com切割图像制作动画:
Matlab提供了函数imcrop(A,[i,j,m,n])用来对图像进行切割,其中参数A是被切割图像矩阵,(i,j)表示被切割区域的左上角顶点,(m,n)表示被切割区域的右下角顶点。【例1-19】使用切割图像函数制作动画。A=imread('D:\111.jpg');a=50;b=50;fori=1:50a=a-1;b=b+1;A1=imcrop(A,[a,a,b,b]);imshow(A1)end右面程序使用imcrop函数,利用一幅图像制作出了动画效果。程序运行后,先从图像中间开始显示小块,逐渐向四周扩大显示范围,连续起来形成了动画。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com完整的图像如图1-21(a)所示。
图1-21(b)是当i=5时切割出来的图像(c)是当i=15时切割出来的图像(d)是当i=30时切割出来的图像(e)是当i=50时切割出来的图像。
(a)(b)(c)(d)(e)数字图像处理廖朝阳TEL:6169976Email:62886210@163.com利用图像颜色与亮度变化制作动画:【例1-21】逐渐减少RGB图像的绿色成分,完成一个颜色渐变的动画。编写程序如下:I=imread('D:\114.jpg');I1=I(:,:,2);s=size(I1);a=ones(s(1),s(2));I2=double(I1);fori=1:50I2(:,:)=I2(:,:)-a*i;I(:,:,2)=I2(:,:);
imshow(I)end程序的运行结果是一个颜色渐变的动画。数字图像处理廖朝阳TEL:6169976Email:62886210@163.com为了把颜色渐变情况在一个窗口中展示出来,下面程序绘制出一些中间帧,如图1-23所示。I=imread('D:\111.jpg');I1=I(:,:,2);s=size(I1);a=ones(s(1),s(2));I2=double(I1);fori=1:8I2(:,:)=I2(:,:)-a*i*5;subplot(2,4,i)I(:,:,2)=I2(:,:);
imshow(I)end数字图像处理廖朝阳TEL:6169976Email:62886210@163.com图1-23图像的绿色成分逐渐减少
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com第2章图像几何操作
2.1图像的缩放旋转与裁剪
2.2图像的几何变换
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com2.1图像的缩放旋转与裁剪
图像的裁剪imcrop函数:该函数有两个参数,一个用来指定裁剪图像,一个用来定义裁剪矩形。自定义区域对图像进行裁剪:Matlab中提供了定义多边形区域的函数roipoly,可以使用该函数定义多边形区域,然后实行裁剪操作。直接调用roipoly函数可以交互实现任意多边形的区域选取。数字图像处理廖朝阳TEL:6169976Email:62886210@163.com图像的缩放
imresize函数缩放图像:【例2-2】使用imresize函数缩小或放大图像。下面程序把图像缩小到原来的0.5倍。c=imread('D:\earth.jpg');c2=imresize(c,0.5);imshow(c2)下面程序把原图像变成100行100列图像,行数增加,使用插值函数完成颜色的填补。c=imread('D:\earth.jpg');c2=imresize(c,[100,100]);imshow(c2)【思考题】把图像放大到原来的3倍,如何修改程序?
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com三种插值方法最近邻插值方法:最近邻插值方法是imresize函数默认的插值方法。双线性插值方法双立方插值方法Imresize函数就使用这三种插值方法。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com图像的旋转
Matlab使用imrotate函数旋转图像。例如,使用下面命令段可以把图像逆时针旋转30度。>>B=imread('ic.tif');>>imshow(B)>>figure>>imrotate(B,30,'crop')这几句命令绘制出图2-4(a)与(b)图。
(a)原图像(b)逆时针旋转30度(c)逆时针旋转30度数字图像处理廖朝阳TEL:6169976Email:62886210@163.com调用语句imrotate时,如果不写参数‘crop’,写为imrotate(B,30),那么旋转后的图像大小不变,而图像的底板一般会变大,如图2-4(c)所示。与图像缩放一样,这里的插值也是三种形式,最近邻插值、双线性插值与双三次插值,默认为最近邻插值。
Imrotate函数调用的一般形式为:imrotate(A,Angle,Method,Bbox)其中参数Method为插值方法,调用函数时,如果需要指定插值方式的话,在参数Method的位置上注明‘nearest’、‘bilinear’或者‘bicubic’。参数Bbox为‘loose’时,旋转图形如2-4(c)所示,底板扩大,为默认形式;参数Bbox为‘crop’时,旋转图形如2-4(b)所示,底板不变,图像可能被切割。【思考题】修改命令,把图像顺时针旋转90度。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com2.2图像的几何变换
图像的几何变换是指图像几何操作后,内部结构比例等发生变化,但整体布局与形状没有改变。包括图像扭曲、图像二维空间变换、距离变换等内容。画图软件中的图像扭曲
在图像处理软件中,都提供了图像扭曲的功能。例如,Windows中简单的画图软件:打开拉伸扭曲窗口,在扭曲组合框中修改水平参数为20,那么点击确定后,白色画板上的图像就会水平扭曲20度。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com图像二维空间变换图像二维仿射变换Matlab使用imtransform函数完成图像空间变换。imtransform函数的调用形式为:imtransform(I,T),其中参数I是要变换的图像,T是由maketform函数产生的变换结构。在函数maketform('P',……)中,参数P可以是以下形式:affine仿射变换形式projective投影变换形式custom自定义函数进行变换box依靠函数中的另外参数产生仿射变换结构composite该参数实现多次调用tformfwd功能数字图像处理廖朝阳TEL:6169976Email:62886210@163.com函数maketform就是利用给定的参数建立变换结构,然后把该变换结构赋给结构体变量(例如赋给T)。根据得到的结构体变量T,调用函数imtransform(I,T)进行变换。
图像二维投影变换
二维变换投影可以把一幅图像按照近大远小的规律投影到一个平面上,产生立体的效果。运用好函数maketform中的两个向量,能够绘制出很多特殊效果的图形。【思考题】根据给定的函数maketform中的两个向量求变换矩阵。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com2.3图像的邻域操作
邻域操作
图像小狮子的颜色数据详见课教材,由于图像很小,所以可以把数据显示在一起,以便进行比较。小狮子图像是方形的,高与宽都为16。A1(:,:,1)、A1(:,:,2)与A1(:,:,3)分别代表图像的红色(R)、绿色(G)与蓝色阵(B)。这个小图像是使用RGB颜色形式表示颜色的。三个颜色矩阵合在一起形成了各种颜色,例如:A1(:,:,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:6169976Email:62886210@163.com【例2-10】对小狮子图像进行邻域操作,使小狮子图像的轮廓变得清晰。编写如右面的程序,绘制出图2-10(c)所示图形。
A1=imread('D:\shizi1.bmp');A2=double(A1);A3=floor((A2(:,:,1)+A2(:,:,2)+A2(:,:,3))/3);C=[-1-1-1-18-1-1-1-1];fori=2:15forj=2:15L=A3(i-1:i+1,j-1:j+1).*C;A4(i,j)=sum(sum(L));endendA4imshow(A4)
图2-10对小狮子图像进行邻域操作后的结果
(a)(b)(c)(d)数字图像处理廖朝阳TEL:6169976Email:62886210@163.com该程序中,首先把图像读入,然后使用语句A2=double(A1)把图像数据变为浮点型数据。再通过语句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)有黑色的左边框与上边框。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com下面利用图2-11进一步讲解邻域操作的过程。
图2-11数字图像处理廖朝阳TEL:6169976Email:62886210@163.com运行例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,2)元素的值为0。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com例题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)是在原程序语句A3=floor((A2(:,:,1)+A2(:,:,2)+A2(:,:,3))/3);后面加上语句A4=A3;(其他语句不变),运行后得到的结果。【思考题】观察图2-10(c)与图2-10(d)的区别,分析产生差别的原因。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.comMatlab邻域操作函数
nlfilter函数:该函数被调用的一般形式为:B=nlfilter(A,[MN],FUN),其中A是被处理的图像,[MN]表示滑动块的高为M、宽为N。FUN是要对滑动覆盖区域进行操作的函数名,该函数可以是各种滤波算子,可以是任意定义的矩阵。【例2-12】使用nlfilter函数对图像进行均值平滑邻域操作。把例2-11程序改写如下:A=imread('D:\shizi.bmp');A1=rgb2gray(A);subplot(1,2,1);imshow(A1);fun=inline('mean(mean(x))');B=nlfilter(A1,[33],fun);subplot(1,2,2);image(B);axisoff数字图像处理廖朝阳TEL:6169976Email:62886210@163.com程序的运行结果如图2-13所示。在这个程序中,修改了操作函数,把中值操作改为求[33]块的均值。与max函数等一样,当x是矩阵时,函数mean(x)是求矩阵每列的平均值,得到一个(均值)行向量,所以两次调用函数mean,即使用mean(mean(x))来求[33]块的均值。图2-13(b)边框变成深色,是由于边界补0造成的。在调用函数nlfilter时,如果使用[33]大小的滑动块操作,需要在图像边界外添加一行与一列,默认情况下添加0。
调用函数nlfilter时,如果参数FUN有参数,那么需要使用下面格式:B=NLFILTER(A,[MN],FUN,P1,P2,...)进行调用。P1,P2,...为函数FUN的实参,把值传入函数体中。(a)(b)原灰度图像
均值操作后图像图2-13使用nlfilter函数进行均值邻域操作
数字图像处理廖朝阳TEL:6169976Email:62886210@163.comcolfilt函数:colfilt函数与nlfilter函数是有区别的,colfilt函数在处理图像时,先把滑动块遮住的图像部分(与滑动块同样大小)排成一列,处理之后再恢复原来大小。一般说来,colfilt函数处理图象的速度要快,但是要占用较多的内存空间。colfilt函数与nlfilter函数的另一个重要区别是colfilt函数在移动的时候可以在'sliding'与'distinct'两者中进行选择,而nlfilter函数只是执行'sliding'操作。colfilt函数在选择'distinct'时,滑动块不再逐象素滑动,而是逐块移动。【例2-13】使用colfilt函数进行图像邻域操作。设计下面程序
A=imread('D:\qizhong.gif');subplot(1,2,1);imshow(A);B=uint8(colfilt(A,[55],'sliding','mean'));subplot(1,2,2);imshow(B)数字图像处理廖朝阳TEL:6169976Email:62886210@163.com原图像邻域均值操作后图2-14使用colfilt函数进行图像邻域均值平滑操作
(a)(b)blkproc函数是专门进行分离块操作的函数。【例2-15】使用blkproc函数进行图像分离块操作。I=imread('D:\shizi.bmp');I1=rgb2gray(I);fun=@dct2;J=blkproc(I1,[88],fun);imagesc(J)数字图像处理廖朝阳TEL:6169976Email:62886210@163.com图2-16使用blkproc函数进行图像分离块DCT操作
blkproc函数是专门进行分离块操作的函数。【例2-15】使用blkproc函数进行图像分离块操作。I=imread('D:\shizi.bmp');I1=rgb2gray(I);fun=@dct2;J=blkproc(I1,[88],fun);imagesc(J)该程序中,使用语句fun=@dct2调用了函数dct2,这个函数是计算矩阵的离散余弦变换,每个[88]的分离块都进行离散余弦变换。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com2.4图像区域选取
块选取函数Matlab还提供了一个区域选取函数roipoly(),可以完成各种多边形块的选取功能。
曲线围成的区域在计算机中没有严格的连续曲线,所有的曲线都是多边形。所以可以用roipoly函数选取近似的曲边区域。数字图像处理廖朝阳TEL:6169976Email:62886210@163.com【例2-17】图像块选取后进行加运算,完成图像块的标注。
设计右面程序:在程序中,使用了C1与C2定义了一个三角形,然后使用语句BW=roipoly(I3,C1,C2)得到了一个二值图像矩阵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=[103080];C2=[2010068];BW=roipoly(I3,C1,C2);B=double(BW)*256;AB=(I3+B);subplot(1,2,2)imshow(AB,m)数字图像处理廖朝阳TEL:6169976Email:62886210@163.com因为图像D:\125.jpg是以索引方式存储的,程序中语句[I1,m]=imread('D:\125.jpg')与imshow(AB,m)都是用来读取、显示索引图像的。另外,直接调用roipoly函数,不使用参数,可以在命令执行后交互绘制区域。
BW(图像)中,选择区域的颜色为白,其他位置都是黑色。得到了矩阵BW后,可以根据BW的信息对选取的区域进行处理。
(a)灰度图像(b)选择区域图2-18图像的块操作后加运算
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com【例2-18】使用正弦曲线围成图像块。设计下面程序:A=imread('D:\1250.jpg');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:6169976Email:62886210@163.com程序的运行结果是图2-19。语句C1=10:pi:180是相当于求横坐标值赋给变量C1,pi是Matlab默认的圆周率。语句C2=floor(20*sin(C1))是求对应的函数值。AB是A与B的和。(C1,C2)对应元素组成的点构成了一个正弦曲线,如图2-19(b)所示。仿照例2-18可以定义并选取其他形状的曲线围成的区域。
(a)(b)
图2-19曲线围成的图像块选取
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com2.5图像增强
图像增强是对图像进行操作,得到视觉效果更好或者更有用的新图像。图像增强是在原有图像的基础上进行的,狭义上的图像增强就是加强或减弱灰度图像的明暗对比度,广义上的图像增强除了对灰度图像进行增强外,还包括彩色图像增强等。在这一节中,简单介绍广义的图像增强。灰度调整:增加灰度图像的明暗对比度,灰度图像就变得更加清楚。增加明暗对比度的一种常用方法是灰度调整方法。灰度调整方法是基于灰度直方图的一种图像增强方法。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com根据图像pout.tif颜色分布情况调整图像灰度值,增强该图像的明暗对比度。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com2025/3/2041灰度调整函数imadjust
【例2-22】使用函数imadjust对图像进行灰度调整。编写如下程序:A1=imread('pout.tif');B1=imadjust(A1,[0.20.5],[0,1]);A2=imread('cameraman.tif');B2=imadjust(A2,[0,0.2],[0.5,1]);subplot(1,4,1);imshow(A1)subplot(1,4,2);imshow(B1)subplot(1,4,3);imshow(A2)subplot(1,4,4);imshow(B2)数字图像处理廖朝阳TEL:6169976Email:62886210@163.com2025/3/2042
(a)pout.tif(b)灰度调整后(c)cameraman.tif(d)灰度调整后
图2-23使用imadjust函数对图像进行灰度调整
程序中语句B1=imadjust(A1,[0.20.5],[0,1])的第1个参数是要处理的矩阵,第2个参数用来限制输入范围,如果原来图像的颜色值是0至255,那么把小于255*0.2的颜色值置为0,把大于255*0.5的值置为255,再把其他介于中间的值映射到第3个参数决定的区间。这个语句的第3个参数为[01],那么该例题就映射到0至255。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com函数stretchlim(A)是用来计算灰度矩阵A的最佳输入区间
函数histeq能够自动完成图像灰度调整,一般用来增强图像的灰度对比度。
函数brighten增加灰度图像的亮度
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com彩色图像增强【例2-26】使用函数imadjust对RGB彩色图像进行颜色调整。
设计下面程序:RGB1=imread('flowers.tif');RGB2=imadjust(RGB1,[.2.30;.6.71]);subplot(1,2,1);imshow(RGB1)subplot(1,2,2);imshow(RGB2)(a)flowers.tif(b)颜色调整后
图2-30imadjust函数对RGB彩色图像的颜色进行调整数字图像处理廖朝阳TEL:6169976Email:62886210@163.com2025/3/2045
程序运行结果如图2-30所示。图像文件flowers.tif存储着一幅彩色图像,把该文件读入后使用imadjust函数进行调整。调整后的范围是默认的范围[000;111],也就是把[0.20.6]之间的红色映射到[01]之间;把[0.30.7]之间的绿色映射到[01]之间;把[01]之间的蓝色映射到[01]之间。映射后的结果为图2-30(b),从图形的效果上看,红色与黄色成分有所增强,而蓝色成分没有变。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com【例2-27】使用函数imadjust对HSV彩色图像进行颜色调整。设计下面程序:RGB1=imread('flowers.tif');HSV1=rgb2hsv(RGB1);HSV2=imadjust(HSV1,[.2.30;.6.71],[000;110]);HSV3=imadjust(HSV1,[.2.30;.6.71],[000;101]);HSV4=imadjust(HSV1,[.2.30;.6.71],[000;011]);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:6169976Email:62886210@163.com2.6图像滤波
滤波是一种应用广泛的图像处理技术,可以通过滤波来强调或删除图像的某些特征。滤波是一种邻域操作,即处理后的图像每个象素值是原来该象素周围的颜色值经过某种计算得到的。2.3节介绍的图像邻域操作就是一种图像滤波。
滤波函数imfilter滤波器的定义数字图像处理廖朝阳TEL:6169976Email:62886210@163.com滤波函数imfilter函数imfilter是Matlab中使用较多的滤波函数,基本调用形式为:B=IMFILTER(A,H,OPTION)其中A为要进行滤波的图像矩阵,可以为多维的彩色图像矩阵(数组);H是已经定义的滤波算子。这个函数本身也是基于邻域滑动设计实现的,所以也涉及到边界如何填补的问题,参数OPTION可以选择边界填补参数‘symmetric’、‘replicate’、‘circular’等。
【例2-27】使用函数imfilter对图像进行滤波,同时研究该函数的边界参数的意义。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com设计下面程序: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(rgb1),title('Filtered')subplot(1,3,3),imshow(rgb2),title('boundaryreplication')
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com【例2-28】使用函数imfilter对图像进行滤波,分析几个滤波器的区别。设计下面程序,程序运行结果显示在图2-34中。
rgb=imread('D:003.bmp');h1=[000.00000.00210.00420.19580.19790.20000.19790.19580.00420.00210.000000];h2=[121000-1-2-1];h3=[0.16670.66670.16670.6667-3.33330.66670.16670.66670.1667];rgb1=imfilter(rgb,h1);rgb2=imfilter(rgb,h2);rgb3=imfilter(rgb,h3);
数字图像处理廖朝阳TEL:6169976Email:62886210@163.comsubplot(2,2,1),imshow(rgb),title('原图像')subplot(2,2,2),imshow(rgb1),title('运动滤波')subplot(2,2,3),imshow(rgb2),title('水平边缘增强')subplot(2,2,4),imshow(rgb3),title('拉普拉斯滤波')由于3个滤波器的构造不同,所以滑动滤波后的效果就不同。原图像是自绘的图像,背景色为白色,有三个线框矩形交叠在一起,左下角与右上角各有一个黑色填充圆形。运动滤波后图像在接近水平的方向上变宽,并且模糊。水平边缘增强滤波把背景变成了黑色,垂直边缘消失,只剩下水平边。拉普拉斯滤波后背景变成黑色,两个圆形的内部没有改变颜色,不过圆形边缘变成了白色。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com图2-35为了研究h1的工作原理,在图2-34(a)上截取一个小图像“”,对该小图像实行imfilter滤波操作(算子为h1),操作前后的数据在中。从这些数据不难看出图像纵向边缘拓宽变浅的原因。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com滤波器的定义fspecial函数生成线性空间滤波器
可以使用Matlab中的函数fspecial(T,P)产生一个由T指定的二维线性滤波器。参数T可以在下面选项中选取。'average'均值滤波器'disk'圆形均值滤波器'gaussian'高斯低通滤波器'laplacian'二维拉普拉斯滤波器'log'高斯拉普拉斯滤波器'motion'运动滤波器'prewitt'Prewitt水平边缘增强滤波器'sobel'Sobel水平边缘增强滤波器
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com
H=fspecial('disk',r)中,r表示圆形均值滤波器的半径,滤波器的大小为2r+1的正方形;输入命令fspecial('disk',3),得到下面圆形均值滤波器:00.00030.01100.01720.01100.000300.00030.02450.03540.03540.03540.02450.00030.01100.03540.03540.03540.03540.03540.01100.01720.03540.03540.03540.03540.03540.01720.01100.03540.03540.03540.03540.03540.01100.00030.02450.03540.03540.03540.02450.000300.00030.01100.01720.01100.00030
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com拉普拉斯滤波器如果把图像作为二元函数,那么函数的拉普拉斯算子定义为:数字图像处理廖朝阳TEL:6169976Email:62886210@163.comfspecial('laplacian',ALPHA)产生的滤波器
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com非线性空间滤波
非线性滤波也是基于邻域操作的,但是不象线性滤波那样,滤波器与对应元素相乘然后相加。非线性滤波不再用线性组合的方法得到新的元素,使用的是统计的方法或非线性组合的方法。fun=inline('median(x(:))');B=nlfilter(A1,[33],fun);median(x(:))这种排序取中值操作就是一种非线性滤波操作。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com其实,Matlab提供了函数medfilt2()专门进行二维中值滤波。【例2-29】使用函数medfilt2进行二维中值滤波。设计如下程序:A=imread('D:005.bmp');A1=rgb2gray(A);B=medfilt2(A1);subplot(1,2,1)imshow(A)subplot(1,2,2)imshow(B)数字图像处理廖朝阳TEL:6169976Email:62886210@163.com【例2-30】使用函数ordfilt2进行排序滤波。设计如下程序:A=imread('D:005.bmp');A1=rgb2gray(A);order=1;domain=[1001000000001001];B=ordfilt2(A1,order,domain);subplot(1,2,1);imshow(A)subplot(1,2,2);imshow(B)数字图像处理廖朝阳TEL:6169976Email:62886210@163.com第三章图像代数运算与
逻辑运算
3.1图像的加减乘除运算3.2图像的特征值与奇异值
3.3图像逻辑运算
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com3.1图像的加减乘除运算
图像加减运算图像的加减运算实质上就是两个矩阵或者三维数组进行加减运算。
【例3-3】利用矩阵的加减运算为图像添加背景。A=imread('D:\0043.jpg');B=imread('D:\125.jpg');s1=size(A);s2=size(B);m=s2(1);n=s2(2);A1=imresize(A,[mn]);A2=double(A1);B1=double(B);C=A2+B1;C1=uint8(C);subplot(1,3,1);imshow(A)subplot(1,3,2);imshow(B)subplot(1,3,3);imshow(C1)合理的选择两个图像,或者先对图像进行处理,然后把两个图象相加,使一个图象成为背景。左面程序就是把图像125.jpg作为背景。数字图像处理廖朝阳TEL:6169976Email:62886210@163.com程序的运行结果为图3-3。程序中,为了把两个图像变为大小相同,使用了语句A1=imresize(A,[mn])。语句C1=uint8(C)是为了绘图才使用的,作者在实验时发现不使用语句C1=uint8(C),程序绘制不出图3-3(c)。
前景图0043.jpg(b)背景图125.jpg(c)合成图像
图3-3为图像添加背景
【思考题】如何修改上面例3-3中的程序,使背景图象清楚一些。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com【例3-4】动画效果。A=imread('D:\0010.jpg');s=size(A);m=s(1),n=s(2);B=zeros(m,n);A1=double(A);fori=1:10:255B(100:250,250:380)=i;A1(:,:,3)=A1(:,:,3)-B;A2=uint8(A1);imshow(A2)end程序中,语句B(100:250,250:380)=i是把矩阵B中的一块赋值为i,随着i的增加,矩阵B中的这一块的值也在增加。然后利用语句A1(:,:,3)=A1(:,:,3)-B让花附近的蓝颜色逐渐减少。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com(a)i=1(b)i=150(c)i=250图3-4图像局部块蓝色逐渐消失【思考题】如何修改上面例3-4中的程序,使花附近的绿颜色逐渐渐少。
程序运行结果是一个花颜色逐渐改变的动画,为了方便观察分析,取其中几帧放在图3-4中。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com图像的乘除运算
图像的乘除运算主要指图像矩阵与常数进行乘除运算、图像矩阵与图像矩阵对应元素进行乘除运算、图像矩阵与图像矩阵进行矩阵乘法运算等。1图像矩阵与常数进行乘除运算图像矩阵与常数进行乘除运算就相当于把矩阵所有元素都扩大或缩小一定的倍数。当矩阵(元素)乘以大于1的数时,图像亮度增加;乘以小于1的数时,图像变暗。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com2图像矩阵与图像矩阵进行逐元素对应乘除运算在Matlab中,两个数组进行逐元素对应相乘使用语句A.*B,即在前一个数组的右下角加上一个点。这种乘法要求A与B两个数组维数相同,运算完后得到相同维数的数组。在这本书中,我们把这种乘法叫做矩阵(元素)对应相乘。
3两个图像矩阵按照数学上定义的乘法进行运算两个图像矩阵按照数学上定义的乘法进行运算以后,得到的新图像已经完全失去了原图像的形状,得到的新图像往往是不可思议的。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com【例3-5】观察分析图像矩阵乘以或除以常数后图像亮度的改变。A=imread('D:\0010.jpg');A1=double(A);A2=A1*1.5;A3=A1/1.5;A2=uint8(A2);A3=uint8(A3);subplot(1,3,1);imshow(A)subplot(1,3,2);imshow(A2)subplot(1,3,3);imshow(A3)原图像
(b)乘以1.5后
(c)除以1.5后
图3-5图像与常数乘除可以改变图像的亮度
设计左面程序,程序运行结果是图3-5。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com【例3-6】利用矩阵对应相乘把两个图像合成在一起。A=imread('D:\0045.jpg');B=imread('D:\0041.jpg');s=size(A);m=s(1),n=s(2);B1=imresize(B,[mn]);A=double(A);C=double(B1);D=A.*C/128;D=uint8(D);subplot(1,3,1);imshow(A)subplot(1,3,2);imshow(B)subplot(1,3,3);imshow(D)
设计左面程序,实现两个矩阵对应相乘运算。数字图像处理廖朝阳TEL:6169976Email:62886210@163.com
程序运行结果如图3-6所示。
(a)图像0045.jpg(b)图像0041.jpg(c)对应相乘以后图3-6图像对应元素相乘得到新图像的效果
程序中语句B1=imresize(B,[mn])是为了把数组B变为A一样大小;语句D=A.*C/128中除以128是为了缩小乘积元素的值;使用语句A=double(A)是把数组元素变为双精度数便于计算;使用语句D=uint8(D)是为了显示的需要。图3-6中实现的合成效果比较好,加法运算出现不了这个效果。一般情况下,乘法能够保留黑色,加法能够保留白色。【思考题】为什么一般情况下,乘法能够保留黑色,加法能够保留白色?
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com【例3-7】利用矩阵乘法计算并且比较手写数字图像乘积的特征。
A=imread('D:\00.jpg');B=imread('D:\11.jpg');s=size(A);m=s(1),n=s(2);B1=imresize(B,[nm]);A1=double(A);B2=double(B1);C(:,:,1)=(A1(:,:,1)*B2(:,:,1))/(160*n);C(:,:,2)=(A1(:,:,2)*B2(:,:,2))/(160*n);C(:,:,3)=(A1(:,:,3)*B2(:,:,3))/(160*n);C=uint8(C);subplot(1,3,1);imshow(A)subplot(1,3,2);imshow(B)subplot(1,3,3);imshow(C)设计左面程序:数字图像处理廖朝阳TEL:6169976Email:62886210@163.com利用上面程序,更换读入的图像,可以得到图3-7所示图形。(a)实验用的4个图像(b)一个0与一个1的乘积
(c)一个0与另一个0的乘积(d)一个1与另一个1的乘积
图3-7不同图像实行矩阵乘法以后得到的乘积图像比较在这个例题中,完全可以先把图像变为灰度图像。这样的话,就可以简化程序。不过,上面程序是针对任意彩色图像编写的,所以可以使用该程序对其他彩色图像进行实验。可以利用例3-7的方法对手写数字与手写汉字等进行识别。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com3.2图像的特征值与奇异值
图像矩阵的特征值1图像矩阵特征值矩阵特征值是这样定义的:设A是[nn]矩阵,如果数λ与n维非零向量X满足方程(3-1)则称数λ为矩阵A的特征值,称非零向量X为矩阵A的特征向量。
在计算数学中,一般用迭代的方法求取矩阵的特征值。Matlab提供了求取特征值的函数eig(A),其中A是参数,是要求取特征值的矩阵。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com【例3-9】比较相近图像的特征值。
编写下面程序:k=input('请输入文件名:');A=imread(k);s=size(A);s2=s(2);A1=rgb2gray(A);A2=double(A1);A3=imresize(A2,[s2s2]);T=eig(A3);T'程序的运行结果是首先在命令窗口显示:“请输入文件名:”,然后在这个提示后面输入’D:\0.jpg’,按Enter键,则可以计算出0.bmp(调整为方阵后)的特征值。因为图像0.bmp有白色边缘,所以有一些行或者列线性相关,求得的特征值中排在后面的有一些是0。比较起来1的手写图像的特征值为0的比较多,因为1的手写图像相同的行或者列比较多。数字图像处理廖朝阳TEL:6169976Email:62886210@163.com(b)(c)(d)图3-84个手写数字图像(a)的文件名为0.bmp,(b)的文件名为00.bmp,(c)的文件名为1.bmp,(d)的文件名为11.bmp从数值上能够观察出几个图像的特征值的差别。为了更准确的分析几个图像特征值之间的相近与差别,编写左面程序:fori=1:4k=input('请输入文件名:');A=imread(k);s=size(A);A1=double(A);A2=imresize(A1,[s(2)s(2)]);T=eig(A2);T1=abs(T);subplot(4,1,i)plot(T1)end数字图像处理廖朝阳TEL:6169976Email:62886210@163.com程序运行时,需要四次输入4个图像文件名。程序的运行结果如图3-9所示。图3-9中的4个曲线从上到下分别对应着图像0.bmp、00.bmp、1.bmp、11.bmp,是把这4个图像的特征值求出,然后取绝对值(复数取模),最后把绝对值绘制出来。从图3-9可以看出两个0的特征值分布曲线比较接近,两个1的特征值分布曲线比较接近,所以可以使用这种方法对手写数字图像进行识别。语句k=input('请输入文件名:')运行后,函数input将在命令窗口显示提示行“请输入文件名:”,输入文件名时,要把路径与文件名加上单引号。
图3-9四个手写数字图像的特征值分布
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com
2图像矩阵特征向量在式3-1中,X就是矩阵的特征向量。因为一个方矩阵的特征值个数等于该矩阵的阶数,即[nn]矩阵的特征值有n个,所以特征向量至少有n个。求特征值时,需要用二维方阵,在研究特征向量时也必须把图像化为灰度图像,或者单独使用彩色图像的红色阵、绿色阵、蓝色阵等。
【例3-10】求图像矩阵的特征向量。A=imread('D:\shizi1.bmp');A1=rgb2gray(A);A2=double(A1);[GT]=eig(A2);G使用左面程序可以求出并且在命令窗口显示出图像的特征向量。变量G中存储的就是灰度图像A1的特征向量。数字图像处理廖朝阳TEL:6169976Email:62886210@163.com图像矩阵的奇异值
矩阵的奇异值是这样定义的:设m×n矩阵A的秩为r,则必存在一个m×m阶正交矩阵Qm和一个n×n阶正交矩阵Qn,使
QmTAQn=S右端矩阵S为n×n阶对角矩阵,我们称S的主对角元为A的奇异值。矩阵的奇异值都是实数,并且矩阵不必须是方阵。图像矩阵的奇异值是图像的一个比较重要的特征,在图象识别研究中有着广泛的应用。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com【例3-13】计算人脸图像的奇异值。
设计如下程序,目的是给出一个人脸图像的5种变化,然后求这5个图像的奇异值,观察奇异值的变化情况。A=imread('D:\0550.jpg');A1=double(A);A2=imrotate(A,2);A3=imadjust(A,[00.5],[0.51]);A4=A1*1.8;A5=imnoise(A);A3=uint8(A3);A4=uint8(A4);imwrite(A1,'0551.jpg');imwrite(A2,'0552.jpg');imwrite(A3,'0553.jpg');imwrite(A4,'0554.jpg');subplot(1,5,1);imshow(A);subplot(1,5,2);imshow(A2);subplot(1,5,3);imshow(A3);subplot(1,5,4);imshow(A4);subplot(1,5,5);imshow(A5)数字图像处理廖朝阳TEL:6169976Email:62886210@163.com程序的运行结果是图3-11。
(a)(b)(c)(d)(e)(a)为原图像,(b)为旋转2度后图像,(c)为颜色调整后图像(d)为扩大1.8倍后图像,(e)为加入噪音后图像
图3-11一个人脸图像的5种改变
函数imwrite(A1,'0551.jpg')是向硬盘存储文件用的,该语句把数组A1存储为0551.jpg,默认是存储在Matlab的work子目录中。该例题是存储在C:\MATLAB6p5\work中。在程序运行之前,机器中没有0551-0554.jpg这几个文件,程序运行后,这几个文件才被生成并且存储在C:\MATLAB6p5\work中。函数imnoise是用来产生噪音的,为了实验的需要,在图像中加入噪音。
数字图像处理廖朝阳TEL:6169976Email:62886210@163.com处理完这几个图像后,接着就求取这5个图像的奇异值,并且进行比较。使用下面程序:fori=1:5k=i-1;k1=int2str(k);k2=strcat('C:\MATLAB6p5\work\055',k1,'.jpg');A=imread(k2);A1=imresize(A,0.5);A2=double(A1);A3=rgb2gray(A2);T=svd(A3);subplot(2,3,i)plot(T(2:20))end程序使用循环语句一次性完成了求5个图像奇异值的工作。数字图像处理廖朝阳TEL:6169976Email:628862
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高效水果打浆系统行业跨境出海战略研究报告
- 学校中的婴幼儿安全防护策略
- 大数据在农业领域的应用
- 品牌营销策划与实践案例
- 2025-2030中国机动车检验检测行业市场现状供需分析及投资评估规划分析研究报告
- 2025-2030中国有机快餐行业市场发展趋势与前景展望战略分析研究报告
- 2025-2030中国月饼生产线市场竞争状况与未来销售渠道趋势报告
- 2025-2030中国曲安奈德注射液行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国智能吸入器行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国晒后修复露行业市场深度调研及竞争格局与投资研究报告
- 2023届高三化学二轮复习 01 考向1 以气体制备为主线的气体流程型实验
- 塑料模具设计制造培训
- 2024年LED手电筒行业分析报告及未来发展趋势
- 渔业政策与法规
- 《原生质体育种》课件
- Ⅰ类切口手术预防使用抗菌药物原因分析品管圈鱼骨图柏拉图
- 慢性疼痛的药物治疗:慢性疼痛的药物治疗方案
- 科技辅导员认证笔试初级试题
- 量具能力准则Cg-Cgk评价报告
- 九十年代生活
- 精神发育迟滞的护理查房
评论
0/150
提交评论