《第三章 图像代数运算与逻辑运算精选文档.ppt》由会员分享,可在线阅读,更多相关《第三章 图像代数运算与逻辑运算精选文档.ppt(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章 图像代数运算与逻辑运算本讲稿第一页,共四十六页l例3-1 利用矩阵的加减运算增加或减少图像中的某种颜色成分。lA=imread(0045.jpg);ls=size(A);lB=double(A);lC(:,:,1)=B(:,:,1)+B(:,:,2);lC(:,:,2)=B(:,:,2);lC(:,:,3)=B(:,:,3)-B(:,:,2);lfor i=1:s(1)l for j=1:s(2)l for k=1:s(3)l if C(i,j,k)255l C(i,j,k)=255;l endl endl endlendlC=uint8(C);lsubplot(1,2,1);imsh
2、ow(A)lsubplot(1,2,2);imshow(C)3.1 图像的加减乘除运算 本讲稿第二页,共四十六页l例3-2lA=imread(0045.jpg);ls=size(A);lB=double(A);lQ1=zeros(s(1),s(2);lQ2=zeros(s(1),s(2);lfor m=s(1):-1:1l for n=s(2):-1:1l Q1(m,n)=m;l Q2(m,n)=n;l endlend lC(:,:,1)=B(:,:,1);lC(:,:,2)=B(:,:,2)-Q2;lC(:,:,3)=B(:,:,3)+Q1/3;lfor i=1:s(1)l for j=1:
3、s(2)l for k=1:s(3)l if C(i,j,k)255l C(i,j,k)=255;l endl endl endlendlC=uint8(C);lsubplot(1,2,1);imshow(A)lsubplot(1,2,2);imshow(C)本讲稿第三页,共四十六页l图像加减运算 图像的加减运算实质上就是两个矩阵或者三维数组图像的加减运算实质上就是两个矩阵或者三维数组进行加减运算。进行加减运算。l【例例3-3】利用矩阵的加减运算为图像添加背景。利用矩阵的加减运算为图像添加背景。A=imread(D:0043.jpg);B=imread(D:125.jpg);s1=size(A
4、);s2=size(B);m=s2(1);n=s2(2);A1=imresize(A,m n);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)l合合理理的的选选择择两两个个图图像像,或或者者先先对对图图像像进进行行处处理理,然然后后把把两两个个图图象象相相加加,使使一一个个图图象成为背景。象成为背景。l左左面面程程序序就就是是把把图图像像125.jpg作为背景。作为背景。本讲稿第四页,共四十六页程序的运
5、行结果为图程序的运行结果为图3-3。程序中,为了把两个图像变为大小相同,。程序中,为了把两个图像变为大小相同,使用了语句使用了语句A1=imresize(A,m n)。语句。语句C1=uint8(C)是为了绘图是为了绘图才使用的,作者在实验时发现不使用语句才使用的,作者在实验时发现不使用语句C1=uint8(C),程序绘制,程序绘制不出图不出图3-3(c)。(a)前景图0043.jpg (b)背景图125.jpg (c)合成图像 图3-3 为图像添加背景【思考题】如何修改上面例【思考题】如何修改上面例3-3中的程序,使背景图象清楚一些。中的程序,使背景图象清楚一些。本讲稿第五页,共四十六页【例
6、3-4】动画效果。A=imread(D:0010.jpg);A=imread(D:0010.jpg);s=size(A);s=size(A);m=s(1),n=s(2);m=s(1),n=s(2);B=zeros(m,n);B=zeros(m,n);A1=double(A);A1=double(A);for i=1for i=1:1010:255255B(100:250,250:380)=i;B(100:250,250:380)=i;A1(:,:,3)=A1(:,:,3)-B;A1(:,:,3)=A1(:,:,3)-B;A2=uint8(A1);A2=uint8(A1);imshow(A2)i
7、mshow(A2)endend程序中,语句程序中,语句B(100:250,250:380)=iB(100:250,250:380)=i是把矩阵是把矩阵B B中的一块赋中的一块赋值为值为i i,随着,随着i i的增加,的增加,矩阵矩阵B B中的这一块的值中的这一块的值也在增加。也在增加。然后利用语句然后利用语句A1(:,:,3)=A1(:,:,3)-BA1(:,:,3)=A1(:,:,3)-B让花附近的蓝颜色逐渐减让花附近的蓝颜色逐渐减少。少。本讲稿第六页,共四十六页(a)i=1 (b)i=150 (c)i=250 图3-4 图像局部块蓝色逐渐消失【思考题】如何修改上面例3-4中的程序,使花附近
8、的绿颜色逐渐渐少。程序运行结果是一个花颜色逐渐改变的动画,为了方便观察分析,取其中几帧放在图3-4中。本讲稿第七页,共四十六页图像的乘除运算 图像的乘除运算主要指图像矩阵与常数进行乘除运图像的乘除运算主要指图像矩阵与常数进行乘除运算、图像矩阵与图像矩阵对应元素进行乘除运算、算、图像矩阵与图像矩阵对应元素进行乘除运算、图像矩阵与图像矩阵进行矩阵乘法运算等。图像矩阵与图像矩阵进行矩阵乘法运算等。1 1 图像矩阵与常数进行乘除运算图像矩阵与常数进行乘除运算图像矩阵与常数进行乘除运算就相当于把矩阵所有图像矩阵与常数进行乘除运算就相当于把矩阵所有元素都扩大或缩小一定的倍数。当矩阵(元素)乘元素都扩大或缩
9、小一定的倍数。当矩阵(元素)乘以大于以大于1 1的数时,图像亮度增加;乘以小于的数时,图像亮度增加;乘以小于1 1的数时的数时,图像变暗。,图像变暗。本讲稿第八页,共四十六页2 2 图像矩阵与图像矩阵进行逐元素对应乘除运算图像矩阵与图像矩阵进行逐元素对应乘除运算在在Matlab中,两个数组进行逐元素对应相乘使用语句中,两个数组进行逐元素对应相乘使用语句A.*BA.*B,即在前一个数,即在前一个数组的右下角加上一个点。这种乘法要求组的右下角加上一个点。这种乘法要求A A与与B B两个数组维数相同,运算完后两个数组维数相同,运算完后得到相同维数的数组。在这本书中,我们把这种乘法叫做矩阵(元素)对得
10、到相同维数的数组。在这本书中,我们把这种乘法叫做矩阵(元素)对应相乘。应相乘。3 3 两个图像矩阵按照数学上定义的乘法进行运算两个图像矩阵按照数学上定义的乘法进行运算两个图像矩阵按照数学上定义的乘法进行运算以后,得到的两个图像矩阵按照数学上定义的乘法进行运算以后,得到的新图像已经完全失去了原图像的形状,得到的新图像往往是新图像已经完全失去了原图像的形状,得到的新图像往往是不可思议的。不可思议的。本讲稿第九页,共四十六页【例3-5】观察分析图像矩阵乘以或除以常数后图像亮度的改变。A=imread(D:0010.jpg);A1=double(A);A2=A1*1.5;A3=A1/1.5;A2=ui
11、nt8(A2);A3=uint8(A3);subplot(1,3,1);imshow(A)subplot(1,3,2);imshow(A2)subplot(1,3,3);imshow(A3)(a)原图像 (b)乘以1.5后 (c)除以1.5后 图3-5 图像与常数乘除可以改变图像的亮度 设计左面程序,程序运行结果是图3-5。本讲稿第十页,共四十六页【例3-6】利用矩阵对应相乘把两个图像合成在一起。A=imread(D:0045.jpg);A=imread(D:0045.jpg);B=imread(D:0041.jpg);B=imread(D:0041.jpg);s=size(A);s=size
12、(A);m=s(1),n=s(2);m=s(1),n=s(2);B1=imresize(B,m n);B1=imresize(B,m n);A=double(A);A=double(A);C=double(B1);C=double(B1);D=A.*C/128;D=A.*C/128;D=uint8(D);D=uint8(D);subplot(1,3,1);imshow(A)subplot(1,3,1);imshow(A)subplot(1,3,2);imshow(B)subplot(1,3,2);imshow(B)subplot(1,3,3);imshow(D)subplot(1,3,3);i
13、mshow(D)设计左面程序,实现两个矩阵对应相乘运算。本讲稿第十一页,共四十六页 程序运行结果如图3-6所示。(a)图像0045.jpg (b)图像0041.jpg (c)对应相乘以后 图3-6 图像对应元素相乘得到新图像的效果 程序中语句程序中语句B1=imresize(B,m n)B1=imresize(B,m n)是为了把数组是为了把数组B B变为变为A A一样大小;语句一样大小;语句D=A.*C/128D=A.*C/128中除以中除以128128是为了缩小乘积元素的值;使用语句是为了缩小乘积元素的值;使用语句A=double(A)A=double(A)是把数组元素变为双精度数便于计算
14、;使用语句是把数组元素变为双精度数便于计算;使用语句D=uint8(D)D=uint8(D)是为了显示是为了显示的需要。图的需要。图3-63-6中实现的合成效果比较好,加法运算出现不了这个效果。中实现的合成效果比较好,加法运算出现不了这个效果。一般情况下,乘法能够保留黑色,加法能够保留白色。一般情况下,乘法能够保留黑色,加法能够保留白色。【思考题】为什么一般情况下,乘法能够保留黑色,加法能够保留白色?本讲稿第十二页,共四十六页【例3-7】利用矩阵乘法计算并且比较手写数字图像乘积的特征。A=imread(D:00.jpg);B=imread(D:11.jpg);s=size(A);m=s(1),
15、n=s(2);B1=imresize(B,n m);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)本讲稿第十三页,共四十六页利用上面程序,更换读入的图像,可以得到图3-7所示图形。(a)实验用的实验
16、用的4个图像个图像 (b)一个一个0与一个与一个1的乘积的乘积(c)一个一个0与另一个与另一个0的乘积的乘积 (d)一个一个1与另一个与另一个1的乘积的乘积 图图3-7 不同图像实行矩阵乘法以后得到的乘积图像比较不同图像实行矩阵乘法以后得到的乘积图像比较在这个例题中,完全可以先把图像变为灰度图像。这样的话,在这个例题中,完全可以先把图像变为灰度图像。这样的话,就可以简化程序。不过,上面程序是针对任意彩色图像编写的,就可以简化程序。不过,上面程序是针对任意彩色图像编写的,所以可以使用该程序对其他彩色图像进行实验。可以利用例所以可以使用该程序对其他彩色图像进行实验。可以利用例3-7的方法对手写数字
17、与手写汉字等进行识别的方法对手写数字与手写汉字等进行识别。本讲稿第十四页,共四十六页3.2 图像的特征值与奇异值 图像矩阵的特征值1 1 图像矩阵特征值图像矩阵特征值矩阵特征值是这样定义的:设矩阵特征值是这样定义的:设A是是n n矩阵,如果数矩阵,如果数与与n维非零向量维非零向量X满足方程满足方程 (3-1)则称数则称数为矩阵为矩阵A的特征值,称非零向量的特征值,称非零向量X为为矩阵矩阵A的特的特征向量。征向量。Matlab提供了求取特征值的函数提供了求取特征值的函数eig(A),其中,其中A是参数,是参数,是要求取特征值的矩阵。是要求取特征值的矩阵。本讲稿第十五页,共四十六页【例3-9】比较
18、相近图像的特征值。编写下面程序:k=input(k=input(请输入文件名请输入文件名:);:);A=imread(k);A=imread(k);s=size(A);s=size(A);s2=s(2);s2=s(2);A1=rgb2gray(A);A1=rgb2gray(A);A2=double(A1);A2=double(A1);A3=imresize(A2,s2 s2);A3=imresize(A2,s2 s2);T=eig(A3);T=eig(A3);TT程程序序的的运运行行结结果果是是首首先先在在命命令令窗窗口口显显示示:“请请输输入入文文件件名名:”,然然后后在在这这个个提提示示后
19、后面面输输入入D:0.jpg,按按Enter键键,则则可可以以计计算算出出0.bmp(调调整整为为方方阵阵后后)的的特特征征值值。因因为为图图像像0.bmp0.bmp有有白白色色边边缘缘,所所以以有有一一些些行行或或者者列列线线性性相相关关,求求得得的的特特征征值值中中排排在在后后面面的的有有一一些些是是0 0。比比较较起起来来1 1的的手手写写图图像像的的特特征征值值为为0 0的的比比较较多多,因因为为1 1的的手手写写图图像相同的行或者列比较多。像相同的行或者列比较多。本讲稿第十六页,共四十六页(a)(b)(c)(d)图3-8 4个手写数字图像(a)的文件名为0.bmp,(b)的文件名为0
20、0.bmp,(c)的文件名为1.bmp,(d)的文件名为11.bmp从数值上能够观察出几个图像从数值上能够观察出几个图像的特征值的差别。为了更准确的特征值的差别。为了更准确的分析几个图像特征值之间的的分析几个图像特征值之间的相近与差别,编写左面程序:相近与差别,编写左面程序:for i=1:4for i=1:4k=input(k=input(请输入文件名请输入文件名:);:);A=imread(k);A=imread(k);s=size(A);s=size(A);A1=double(A);A1=double(A);A2=imresize(A1,s(2)s(2);A2=imresize(A1,s
21、(2)s(2);T=eig(A2);T=eig(A2);T1=abs(T);T1=abs(T);subplot(4,1,i)subplot(4,1,i)plot(T1)plot(T1)endend本讲稿第十七页,共四十六页程程序序运运行行时时,需需要要四四次次输输入入4 4个个图图像像文文件件名名。程程序序的的运运行行结结果果如如图图3-93-9所所示示。图图3-93-9中中的的4 4个个曲曲线线从从上上到到下下分分别别对对应应着着图图像像0.bmp0.bmp、00.bmp00.bmp、1.bmp1.bmp、11.bmp11.bmp,是是把把这这4 4个个图图像像的的特特征征值值求求出出,然然
22、后后取取绝绝对对值值(复复数数取取模模),最最后后把把绝绝对对值值绘绘制制出出来来。从从图图3-93-9可可以以看看出出两两个个0 0的的特特征征值值分分布布曲曲线线比比较较接接近近,两两个个1 1的的特特征征值值分分布布曲曲线线比比较较接近,所以可以使用接近,所以可以使用这这种方法种方法对对手写数字手写数字图图像像进进行行识别识别。语语句句k=input(k=input(请请输输入入文文件件名名:):)运运行行后后,函函数数inputinput将将在在命命令令窗窗口口显显示示提提示示行行“请请输输入入文文件件名名:”:”,输输入入文文件件名名时时,要要把把路路径径与与文件名加上文件名加上单单
23、引号。引号。图图3-9 3-9 四个手写数字图像的特征值分布四个手写数字图像的特征值分布 本讲稿第十八页,共四十六页 2 2 图像矩阵特征向量图像矩阵特征向量在式在式3-1中,中,X就是矩阵的特征向量。就是矩阵的特征向量。因为一个方矩阵的特征值个数等于该矩阵的阶数,即因为一个方矩阵的特征值个数等于该矩阵的阶数,即n n矩阵的特矩阵的特征值有征值有n个,所以特征向量至少有个,所以特征向量至少有n个。个。求特征值时,需要用二维方阵,在研究特征向量时也必须把图像化为灰度求特征值时,需要用二维方阵,在研究特征向量时也必须把图像化为灰度图像,或者单独使用彩色图像的红色阵、绿色阵、蓝色阵等。图像,或者单独
24、使用彩色图像的红色阵、绿色阵、蓝色阵等。【例【例3-10】求图像矩阵的特征向量。】求图像矩阵的特征向量。A=imread(D:shizi1.bmp);A1=rgb2gray(A);A2=double(A1);G T=eig(A2);G使用左面程序可以求出使用左面程序可以求出并且在命令窗口显示出并且在命令窗口显示出图像的特征向量。图像的特征向量。变量变量G中存储的就是灰度中存储的就是灰度图像图像A1的特征向量。的特征向量。本讲稿第十九页,共四十六页图像矩阵的奇异值 矩阵的矩阵的奇异值是这样定义的奇异值是这样定义的:设设mn矩阵矩阵A的秩为的秩为r,则,则必存在一个必存在一个mm阶正交矩阵阶正交矩
25、阵Qm和一个和一个nn阶正交矩阵阶正交矩阵Qn,使使 QmTAQn=S 右端矩阵右端矩阵S为为nn阶对角矩阵,我们称阶对角矩阵,我们称S的主对角元为的主对角元为A的奇异值。的奇异值。矩阵的奇异值都是实数,并且矩阵不必须是方阵。矩阵的奇异值都是实数,并且矩阵不必须是方阵。图像图像矩阵的奇异值是图像的一个比较重要的特征,在图象识别矩阵的奇异值是图像的一个比较重要的特征,在图象识别研究中有着广泛的应用。研究中有着广泛的应用。本讲稿第二十页,共四十六页本讲稿第二十一页,共四十六页【例【例3-133-13】计算人脸图像的奇异值。】计算人脸图像的奇异值。设设计计如如下下程程序序,目目的的是是给给出出一一个
26、个人人脸脸图图像像的的5 5种种变变化化,然然后后求求这这5 5个个图像的奇异值,观察奇异值的变化情况。图像的奇异值,观察奇异值的变化情况。A=imread(D:0550.jpg);A=imread(D:0550.jpg);A1=double(A);A1=double(A);A2=imrotate(A,2);A2=imrotate(A,2);A3=imadjust(A,0 0.5,0.5 1);A3=imadjust(A,0 0.5,0.5 1);A4=A1*1.8;A4=A1*1.8;A5=imnoise(A);A5=imnoise(A);A3=uint8(A3);A3=uint8(A3);
27、A4=uint8(A4);A4=uint8(A4);imwrite(A1,0551.jpg);imwrite(A2,0552.jpg);imwrite(A1,0551.jpg);imwrite(A2,0552.jpg);imwrite(A3,0553.jpg);imwrite(A4,0554.jpg);imwrite(A3,0553.jpg);imwrite(A4,0554.jpg);subplot(1,5,1);imshow(A);subplot(1,5,2);imshow(A2);subplot(1,5,1);imshow(A);subplot(1,5,2);imshow(A2);subp
28、lot(1,5,3);imshow(A3);subplot(1,5,4);imshow(A4);subplot(1,5,3);imshow(A3);subplot(1,5,4);imshow(A4);subplot(1,5,5);imshow(A5)subplot(1,5,5);imshow(A5)本讲稿第二十二页,共四十六页程序的运行结果是图3-11。(a)(b)(c)(d)(e)(a)为原图像,(b)为旋转2度后图像,(c)为颜色调整后图像(d)为扩大1.8倍后图像,(e)为加入噪音后图像 图3-11一个人脸图像的5种改变 函函数数imwrite(A1,0551.jpg)是是向向硬硬盘盘存
29、存储储文文件件用用的的,该该语语句句把把数数组组A1存存储储为为0551.jpg,默默认认是是存存储储在在Matlab的的work子子目目录录中中。该该例例题题是是存存储储在在C:MATLAB6p5work中中。在在程程序序运运行行之之前前,机机器器中中没没有有0551-0554.jpg这这几几个个文文件件,程程序序运运行行后后,这这几几个个文文件件才才被被生生成成并并且且存存储储在在C:MATLAB6p5work中。中。函数函数imnoise是用来产生噪音的,为了实验的需要,在图像中加入是用来产生噪音的,为了实验的需要,在图像中加入噪音。噪音。本讲稿第二十三页,共四十六页处理完这几个图像后,
30、接着就求取这5个图像的奇异值,并且进行比较。使用下面程序:for i=1:5k=i-1;k1=int2str(k);k2=strcat(C:MATLAB6p5work055,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个图像奇异值的工作。本讲稿第二十四页,共四十六页3.3 图像逻辑运算 二值图像逻辑运算二值图像逻辑运算【例3-14】使用函数im2bw()把灰度图像、索引图像、RGB图像等转
31、化为二值图像并显示结果。(level=graythresh(I)编写下面程序,运行后的结果如图3-14所示。A1=imread(D:0011.jpg);B1=im2bw(A1,0.39);A2=imread(D:flower1.bmp);B2=im2bw(A2);A3=imread(D:125.jpg);B3=im2bw(A3,0.4);subplot(2,3,1);imshow(A1)subplot(2,3,2);imshow(A2)subplot(2,3,3);imshow(A3)subplot(2,3,4);imshow(B1)subplot(2,3,5);imshow(B2)subpl
32、ot(2,3,6);imshow(B3)本讲稿第二十五页,共四十六页图像0011.jpg是彩色RGB图像,flower1.bmp是灰度图像,125.jpg是索引图像。(a)图像0011.jpg (b)图像flower1.bmp (c)图像125.jpg (d)图像0011的二值图像 (e)图像flower1的二值图像 (f)图像125的二值图像 图3-14 把灰度图像、索引图像、RGB图像等转化为二值图像本讲稿第二十六页,共四十六页例3-15 二值图像与、或、非、异或运算lA1=imread(1.bmp);lA2=imread(11.bmp);lA3=imread(0.bmp);lA4=imr
33、ead(00.bmp);lB1=im2bw(A1);lB2=im2bw(A2);lB3=im2bw(A3);lB4=im2bw(A4);lC1=B1&B3;lC2=B2|B3;lC3=B1;lC4=xor(B3,B4);lsubplot(2,4,1);imshow(B1)lsubplot(2,4,2);imshow(B2)lsubplot(2,4,3);imshow(B3)lsubplot(2,4,4);imshow(B4)lsubplot(2,4,5);imshow(C1)lsubplot(2,4,6);imshow(C2)lsubplot(2,4,7);imshow(C3)lsubplot
34、(2,4,8);imshow(C4)本讲稿第二十七页,共四十六页二值图像膨胀与腐蚀 一般来说对于二值图像,膨胀运算后图像中物体一般来说对于二值图像,膨胀运算后图像中物体“加加长长”或或“变粗变粗”;腐蚀运算后图像中物体;腐蚀运算后图像中物体“收缩收缩”或或“细细化化”。下面先通过一些例题观察分析膨胀与腐蚀后的。下面先通过一些例题观察分析膨胀与腐蚀后的效果,总结二值图像膨胀与腐蚀运算的方法与原则,效果,总结二值图像膨胀与腐蚀运算的方法与原则,最后给出二值图像膨胀与腐蚀运算的准确描述以及最后给出二值图像膨胀与腐蚀运算的准确描述以及简单的应用。简单的应用。1 1 二值图像膨胀运算二值图像膨胀运算 先
35、通过下面例题观察分析几个二值图像膨胀算子的先通过下面例题观察分析几个二值图像膨胀算子的不同效果。不同效果。本讲稿第二十八页,共四十六页【例3-16】对二值图像实施膨胀运算。设计如下程序,结果显示在图3-16中。A=imread(C:MATLAB6p5workbc.bmp);B=A;M=1;1;1;N=1 1 0;P=0 0 1;0 1 0;0 0 0;Q=0 0 1;0 0 0;1 0 0;C1=imdilate(B,M);C2=imdilate(B,N);C3=imdilate(B,P);C4=imdilate(B,Q);subplot(1,5,1);imshow(B)subplot(1,5
36、,2);imshow(C1)subplot(1,5,3);imshow(C2)subplot(1,5,4);imshow(C3)subplot(1,5,5);imshow(C4)本讲稿第二十九页,共四十六页 (a)(b)(c)(d)(e)图3-16 二值图像的膨胀运算 M、N、P、Q是4个算子,M是一个列向量,N是一个行向量。P、Q都是3 3矩阵,P、Q分别为:算子由算子由0、1构成,有构成,有1的位置用来定义算子覆盖区域的邻域。这里的的位置用来定义算子覆盖区域的邻域。这里的(算子覆盖)邻域概念很重要,算子覆盖时,算子上有(算子覆盖)邻域概念很重要,算子覆盖时,算子上有1的地方称为的地方称为中
37、心点处的邻域。中心点处的邻域。在对二值图像进行膨胀运算时,也使用算子在图像上滑动。如果图像的在对二值图像进行膨胀运算时,也使用算子在图像上滑动。如果图像的算子覆盖邻域内有算子覆盖邻域内有1 1,那么覆盖区域中心的输出值就为,那么覆盖区域中心的输出值就为1 1,也就是新图像,也就是新图像在覆盖区域中心的值为在覆盖区域中心的值为1 1。否则为。否则为0 0。本讲稿第三十页,共四十六页程序中读入的图像程序中读入的图像bc.bmp是白色背景黑色字体,使用语句是白色背景黑色字体,使用语句B=A把图像把图像bc.bmp变为黑色背景白色字体,如图变为黑色背景白色字体,如图3-16(a)所示。该图像是二值图像
38、,所示。该图像是二值图像,所有数据显示在图所有数据显示在图3-17中。字体中。字体b与与c所在范围用灰色标出。所在范围用灰色标出。图3-17 二值图像bc.bmp的颜色数据 本讲稿第三十一页,共四十六页为了节省篇幅,这里只研究字母b被膨胀后的变化情况。下图中的4个图像都是字母b的变化情况。(a)使使用用M膨膨胀胀后后的的结结果果(b)使使用用N膨膨胀胀后后的的结结果果(c)使使用用P膨膨胀胀后后的的结结果果(d)使使用用Q膨膨胀胀后后的的结结果果 本讲稿第三十二页,共四十六页下面以图下面以图3-19为例详细讲解二值图像膨胀运算规则。为例详细讲解二值图像膨胀运算规则。图图3-19使用的是算子使用
39、的是算子Q。对于算子。对于算子Q,只要覆盖区域的左下角与右,只要覆盖区域的左下角与右上角至少有一个为上角至少有一个为1(两个为(两个为1也可以),那么在覆盖区域的中也可以),那么在覆盖区域的中心位置的返回值就是心位置的返回值就是1。所以,当算子移动到位置。所以,当算子移动到位置“1”时,因时,因为右上角处颜色值为为右上角处颜色值为1,所以在覆盖区域中心(,所以在覆盖区域中心(5,3)处输出颜色)处输出颜色值值1,如图,如图3-19(b)位置位置“1”所示。所示。当算子移动到位置当算子移动到位置“2”时,因为右上角处颜色值为时,因为右上角处颜色值为1(其他处为(其他处为1不起作用),所以在覆盖区
40、域中心(不起作用),所以在覆盖区域中心(8,7)处输出颜色值)处输出颜色值1,如图,如图3-19(b)位置位置“2”所示。所示。当算子移动到位置当算子移动到位置“3”时,因为左下角与右上角处颜色值都时,因为左下角与右上角处颜色值都不为不为1,所以在覆盖区域中心(,所以在覆盖区域中心(12,9)处输出颜色值)处输出颜色值0,如图,如图3-19(b)位置位置“3”所示。所示。本讲稿第三十三页,共四十六页(a)图像图像3-16(a)的一部分,即有字母的一部分,即有字母b的那部分,图的那部分,图3-17左边的一部分数据左边的一部分数据 本讲稿第三十四页,共四十六页(b)图图(a)使用使用Q膨胀后的部分
41、结果,即膨胀后的部分结果,即3-18(d)的放大。的放大。图图3-19 二值图像膨胀运算规则二值图像膨胀运算规则 本讲稿第三十五页,共四十六页其他算子的运算规则都与上面所述相同。运算结果与原图像有关,算子形状与图像的邻域情况决定了运算结果。另外,从上面描述情况看,二值图像膨胀运算本质上是逻辑运算。数学上,二值图像膨胀运算可以用集合定义如下:其中,A为原图像,B为算子。就是上面描述的那种覆盖操作,是空集,是计算后的输出值。本讲稿第三十六页,共四十六页2 2 二值图像腐蚀运算二值图像腐蚀运算 二值图像腐蚀运算本质上也是逻辑运算,可以用如下数学定义描述二值图像腐蚀运算:其中,A为原图像,B为算子。A
42、c是A的补集。是移动覆盖操作,是空集,是计算后的输出值。在进行腐蚀运算时,算子移动一下,输出一个新值赋给算子覆盖处的中心位置。计算输出值的方法是:如果算子覆盖邻域内图像像素值有为0的,那么中心位置的输出值为0,否则为1。根据上面定义与说明,结合下面例3-17来理解图像腐蚀运算规则。本讲稿第三十七页,共四十六页【例3-17】对二值图像实施腐蚀运算。把3-16中程序语句:C1=imdilate(B,M);C2=imdilate(B,N);C1=imdilate(B,M);C2=imdilate(B,N);C3=imdilate(B,P);C4=imdilate(B,Q);C3=imdilate(B
43、,P);C4=imdilate(B,Q);修改为:C1=imerode(B,M);C2=imerode(B,N);C1=imerode(B,M);C2=imerode(B,N);C3=imerode(B,P);C4=imerode(B,Q);C3=imerode(B,P);C4=imerode(B,Q);其他语句不变,程序运行的结果是图3-20。图3-20 二值图像腐蚀运算 程序中的函数程序中的函数imerode是用来进是用来进行腐蚀运算的。腐行腐蚀运算的。腐蚀运算后,原来图蚀运算后,原来图像一般会变细变小。像一般会变细变小。本讲稿第三十八页,共四十六页【例3-18】对二值图像实施腐蚀运算,并
44、且与膨胀运算进行比较。设计下面程序:A=imread(0370.bmp);B=im2bw(A);B=B;M=strel(diamond,3);C1=imerode(B,M);C2=imdilate(B,M);subplot(1,3,1);imshow(B)subplot(1,3,2);imshow(C1)subplot(1,3,3);imshow(C2)程序运行结果如图3-21所示。本讲稿第三十九页,共四十六页 (a)原图像 (b)腐蚀后的图像 (c)膨胀后的图像 图3-21 二值图像腐蚀与膨胀比较 函数strel是专门用来生成算子模板的,strel(diamond,3)生成的算子模板为:0
45、0 0 1 0 0 00 0 0 1 0 0 00 0 1 1 1 0 00 0 1 1 1 0 00 1 1 1 1 1 00 1 1 1 1 1 01 1 1 1 1 1 11 1 1 1 1 1 10 1 1 1 1 1 00 1 1 1 1 1 00 0 1 1 1 0 00 0 1 1 1 0 00 0 0 1 0 0 00 0 0 1 0 0 0函数strel还可以生成square、line、disk、periodicline、pair、octagon等模板。该算子模板呈菱形结构,一共有25个1。该算子覆盖区域呈菱形。本讲稿第四十页,共四十六页3 3 灰度图像膨胀与腐蚀灰度图像膨胀
46、与腐蚀灰灰度度图图像像膨膨胀胀腐腐蚀蚀定定义义分分平平坦坦与与非非平平坦坦两两种种,关关于于灰灰度度图图像像非非平平坦坦膨膨胀胀腐腐蚀蚀定定义义,可可以以参参考考其其他他资资料料。这这里里提提到到灰灰度度图图像像膨膨胀胀腐腐蚀蚀都都是是指指平平坦坦的灰度图像膨胀腐蚀。的灰度图像膨胀腐蚀。灰灰度度图图像像膨膨胀胀腐腐蚀蚀的的定定义义与与二二值值图图像像膨膨胀胀腐腐蚀蚀的的定定义义有有些些区区别别,一一般般定定义义灰灰度图像膨胀为度图像膨胀为定义灰度图像腐蚀为定义灰度图像腐蚀为灰灰度度图图像像膨膨胀胀实实质质上上是是求求邻邻域域内内最最大大值值作作为为输输出出;灰灰度度图图像像腐腐蚀蚀是是求求邻邻
47、域域内内最小值作为输出。邻域仍然是由各种算子模板来定义的。最小值作为输出。邻域仍然是由各种算子模板来定义的。本讲稿第四十一页,共四十六页【例3-19】对灰度图像实施膨胀腐蚀运算。设计下面程序A=imread(D:flower1.bmp);A1=rgb2gray(A);se=strel(square,3);A2=imdilate(A1,se);A3=imerode(A1,se);subplot(1,3,1),imshow(A1);subplot(1,3,2),imshow(A2);subplot(1,3,3),imshow(A3);程序运行结果是图3-22(见下页图)。因为膨胀是取最大值,所以膨
48、胀后图象白色成分增多;腐蚀取最小值,所以黑色成分增加。本讲稿第四十二页,共四十六页(a)原图像 (b)膨胀 (c)腐蚀 图3-22 灰度图像膨胀与腐蚀 程序中,程序中,strel(square,3);是生成了一个是生成了一个3行行3列的矩阵,每个元素都是列的矩阵,每个元素都是1。如果把参数如果把参数se变成变成6*6大小方形区域,膨胀或腐蚀的区域变大,所以图形的改变大小方形区域,膨胀或腐蚀的区域变大,所以图形的改变也比较大。如图也比较大。如图3-23所示。所示。(a)原图像 (b)膨胀 (c)腐蚀 图3-23 图像膨胀与腐蚀(块区域为6*6)本讲稿第四十三页,共四十六页开运算与闭运算 1 开运
49、算定义如下:对二值图像来说,开运算能够删除不包含模板形状的对象区域,能够平滑对象轮廓,断开狭窄的连接,去掉细小的突出部分。Matlab提供了函数imopen用来完成两个图像的开运算。2 闭运算定义如下:闭运算能平滑图像的轮廓,能将狭窄的缺口连接起来形成细长的弯口,能填充比模板邻域小的洞。Matlab提供了函数imclose用来完成两个图像的闭运算。本讲稿第四十四页,共四十六页【例3-20】对图像实施开闭运算。设计如下程序:A=imread(D:125.jpg);B=rgb2gray(A);M=strel(diamond,2);C1=imopen(B,M);C2=imclose(B,M);subplot(1,3,1);imshow(B)subplot(1,3,2);imshow(C1)subplot(1,3,3);imshow(C2)本讲稿第四十五页,共四十六页程序的运行结果如图3-24所示。程序中先使用语句M=strel(diamond,2);生成一个菱形模板,使用该模板对图像B进行开闭运算分别得到图像(矩阵)C2与C2,从图3-24能够看出开闭运算的区别。(a)原图像 (b)开运算 (c)闭运算 图3-24 图像开运算与闭运算 本讲稿第四十六页,共四十六页
限制150内