图像代数运算与逻辑运算_第1页
图像代数运算与逻辑运算_第2页
图像代数运算与逻辑运算_第3页
图像代数运算与逻辑运算_第4页
图像代数运算与逻辑运算_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图像代数运算与逻辑运算第一页,共四十六页,编辑于2023年,星期五例3-1利用矩阵的加减运算增加或减少图像中的某种颜色成分。A=imread('0045.jpg');s=size(A);B=double(A);C(:,:,1)=B(:,:,1)+B(:,:,2);C(:,:,2)=B(:,:,2);C(:,:,3)=B(:,:,3)-B(:,:,2);fori=1:s(1)forj=1:s(2)fork=1:s(3)ifC(i,j,k)<0C(i,j,k)=0;endifC(i,j,k)>255C(i,j,k)=255;endendendendC=uint8(C);subplot(1,2,1);imshow(A)subplot(1,2,2);imshow(C)3.1图像的加减乘除运算第二页,共四十六页,编辑于2023年,星期五例3-2A=imread('0045.jpg');s=size(A);B=double(A);Q1=zeros(s(1),s(2));Q2=zeros(s(1),s(2));form=s(1):-1:1forn=s(2):-1:1Q1(m,n)=m;Q2(m,n)=n;endendC(:,:,1)=B(:,:,1);C(:,:,2)=B(:,:,2)-Q2;C(:,:,3)=B(:,:,3)+Q1/3;fori=1:s(1)forj=1:s(2)fork=1:s(3)ifC(i,j,k)<0C(i,j,k)=0;endifC(i,j,k)>255C(i,j,k)=255;endendendendC=uint8(C);subplot(1,2,1);imshow(A)subplot(1,2,2);imshow(C)第三页,共四十六页,编辑于2023年,星期五图像加减运算图像的加减运算实质上就是两个矩阵或者三维数组进行加减运算。

【例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作为背景。第四页,共四十六页,编辑于2023年,星期五程序的运行结果为图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中的程序,使背景图象清楚一些。

第五页,共四十六页,编辑于2023年,星期五【例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让花附近的蓝颜色逐渐减少。

第六页,共四十六页,编辑于2023年,星期五(a)i=1(b)i=150(c)i=250图3-4图像局部块蓝色逐渐消失【思考题】如何修改上面例3-4中的程序,使花附近的绿颜色逐渐渐少。

程序运行结果是一个花颜色逐渐改变的动画,为了方便观察分析,取其中几帧放在图3-4中。

第七页,共四十六页,编辑于2023年,星期五图像的乘除运算

图像的乘除运算主要指图像矩阵与常数进行乘除运算、图像矩阵与图像矩阵对应元素进行乘除运算、图像矩阵与图像矩阵进行矩阵乘法运算等。1图像矩阵与常数进行乘除运算图像矩阵与常数进行乘除运算就相当于把矩阵所有元素都扩大或缩小一定的倍数。当矩阵(元素)乘以大于1的数时,图像亮度增加;乘以小于1的数时,图像变暗。

第八页,共四十六页,编辑于2023年,星期五2图像矩阵与图像矩阵进行逐元素对应乘除运算在Matlab中,两个数组进行逐元素对应相乘使用语句A.*B,即在前一个数组的右下角加上一个点。这种乘法要求A与B两个数组维数相同,运算完后得到相同维数的数组。在这本书中,我们把这种乘法叫做矩阵(元素)对应相乘。

3两个图像矩阵按照数学上定义的乘法进行运算两个图像矩阵按照数学上定义的乘法进行运算以后,得到的新图像已经完全失去了原图像的形状,得到的新图像往往是不可思议的。

第九页,共四十六页,编辑于2023年,星期五【例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。

第十页,共四十六页,编辑于2023年,星期五【例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)

设计左面程序,实现两个矩阵对应相乘运算。第十一页,共四十六页,编辑于2023年,星期五

程序运行结果如图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中实现的合成效果比较好,加法运算出现不了这个效果。一般情况下,乘法能够保留黑色,加法能够保留白色。【思考题】为什么一般情况下,乘法能够保留黑色,加法能够保留白色?

第十二页,共四十六页,编辑于2023年,星期五【例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)第十三页,共四十六页,编辑于2023年,星期五利用上面程序,更换读入的图像,可以得到图3-7所示图形。

(a)实验用的4个图像

(b)一个0与一个1的乘积

(c)一个0与另一个0的乘积

(d)一个1与另一个1的乘积

图3-7不同图像实行矩阵乘法以后得到的乘积图像比较在这个例题中,完全可以先把图像变为灰度图像。这样的话,就可以简化程序。不过,上面程序是针对任意彩色图像编写的,所以可以使用该程序对其他彩色图像进行实验。可以利用例3-7的方法对手写数字与手写汉字等进行识别。

第十四页,共四十六页,编辑于2023年,星期五3.2图像的特征值与奇异值

图像矩阵的特征值1图像矩阵特征值矩阵特征值是这样定义的:设A是[nn]矩阵,如果数λ与n维非零向量X满足方程(3-1)则称数λ为矩阵A的特征值,称非零向量X为矩阵A的特征向量。

Matlab提供了求取特征值的函数eig(A),其中A是参数,是要求取特征值的矩阵。

第十五页,共四十六页,编辑于2023年,星期五【例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的手写图像相同的行或者列比较多。第十六页,共四十六页,编辑于2023年,星期五(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第十七页,共四十六页,编辑于2023年,星期五程序运行时,需要四次输入4个图像文件名。程序的运行结果如图3-9所示。图3-9中的4个曲线从上到下分别对应着图像0.bmp、00.bmp、1.bmp、11.bmp,是把这4个图像的特征值求出,然后取绝对值(复数取模),最后把绝对值绘制出来。从图3-9可以看出两个0的特征值分布曲线比较接近,两个1的特征值分布曲线比较接近,所以可以使用这种方法对手写数字图像进行识别。语句k=input('请输入文件名:')运行后,函数input将在命令窗口显示提示行“请输入文件名:”,输入文件名时,要把路径与文件名加上单引号。

图3-9四个手写数字图像的特征值分布

第十八页,共四十六页,编辑于2023年,星期五

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的特征向量。第十九页,共四十六页,编辑于2023年,星期五图像矩阵的奇异值

矩阵的奇异值是这样定义的:设m×n矩阵A的秩为r,则必存在一个m×m阶正交矩阵Qm和一个n×n阶正交矩阵Qn,使

QmTAQn=S

右端矩阵S为n×n阶对角矩阵,我们称S的主对角元为A的奇异值。矩阵的奇异值都是实数,并且矩阵不必须是方阵。图像矩阵的奇异值是图像的一个比较重要的特征,在图象识别研究中有着广泛的应用。

第二十页,共四十六页,编辑于2023年,星期五第二十一页,共四十六页,编辑于2023年,星期五【例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)第二十二页,共四十六页,编辑于2023年,星期五程序的运行结果是图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是用来产生噪音的,为了实验的需要,在图像中加入噪音。

第二十三页,共四十六页,编辑于2023年,星期五处理完这几个图像后,接着就求取这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个图像奇异值的工作。第二十四页,共四十六页,编辑于2023年,星期五3.3图像逻辑运算

二值图像逻辑运算【例3-14】使用函数im2bw()把灰度图像、索引图像、RGB图像等转化为二值图像并显示结果。(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)subplot(2,3,6);imshow(B3)

第二十五页,共四十六页,编辑于2023年,星期五图像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图像等转化为二值图像第二十六页,共四十六页,编辑于2023年,星期五例3-15二值图像与、或、非、异或运算A1=imread('1.bmp');A2=imread('11.bmp');A3=imread('0.bmp');A4=imread('00.bmp');B1=im2bw(A1);B2=im2bw(A2);B3=im2bw(A3);B4=im2bw(A4);C1=B1&B3;C2=B2|B3;C3=~B1;C4=xor(B3,B4);subplot(2,4,1);imshow(B1)subplot(2,4,2);imshow(B2)subplot(2,4,3);imshow(B3)subplot(2,4,4);imshow(B4)subplot(2,4,5);imshow(C1)subplot(2,4,6);imshow(C2)subplot(2,4,7);imshow(C3)subplot(2,4,8);imshow(C4)第二十七页,共四十六页,编辑于2023年,星期五二值图像膨胀与腐蚀

一般来说对于二值图像,膨胀运算后图像中物体“加长”或“变粗”;腐蚀运算后图像中物体“收缩”或“细化”。下面先通过一些例题观察分析膨胀与腐蚀后的效果,总结二值图像膨胀与腐蚀运算的方法与原则,最后给出二值图像膨胀与腐蚀运算的准确描述以及简单的应用。

1二值图像膨胀运算

先通过下面例题观察分析几个二值图像膨胀算子的不同效果。

第二十八页,共四十六页,编辑于2023年,星期五【例3-16】对二值图像实施膨胀运算。

设计如下程序,结果显示在图3-16中。

A=imread('C:\MATLAB6p5\work\bc.bmp');B=~A;M=[1;1;1];N=[110];P=[001;010;000];Q=[001;000;100];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,2);imshow(C1)subplot(1,5,3);imshow(C2)subplot(1,5,4);imshow(C3)subplot(1,5,5);imshow(C4)

第二十九页,共四十六页,编辑于2023年,星期五

(a)(b)(c)(d)(e)

图3-16二值图像的膨胀运算

M、N、P、Q是4个算子,M是一个列向量,N是一个行向量。P、Q都是[33]矩阵,P、Q分别为:

算子由0、1构成,有1的位置用来定义算子覆盖区域的邻域。这里的(算子覆盖)邻域概念很重要,算子覆盖时,算子上有1的地方称为中心点处的邻域。在对二值图像进行膨胀运算时,也使用算子在图像上滑动。如果图像的算子覆盖邻域内有1,那么覆盖区域中心的输出值就为1,也就是新图像在覆盖区域中心的值为1。否则为0。

第三十页,共四十六页,编辑于2023年,星期五程序中读入的图像bc.bmp是白色背景黑色字体,使用语句B=~A把图像bc.bmp变为黑色背景白色字体,如图3-16(a)所示。该图像是二值图像,所有数据显示在图3-17中。字体b与c所在范围用灰色标出。

图3-17二值图像bc.bmp的颜色数据

第三十一页,共四十六页,编辑于2023年,星期五为了节省篇幅,这里只研究字母b被膨胀后的变化情况。下图中的4个图像都是字母b的变化情况。

(a)使用M膨胀后的结果

(b)使用N膨胀后的结果

(c)使用P膨胀后的结果

(d)使用Q膨胀后的结果

第三十二页,共四十六页,编辑于2023年,星期五下面以图3-19为例详细讲解二值图像膨胀运算规则。图3-19使用的是算子Q。对于算子Q,只要覆盖区域的左下角与右上角至少有一个为1(两个为1也可以),那么在覆盖区域的中心位置的返回值就是1。所以,当算子移动到位置“1”时,因为右上角处颜色值为1,所以在覆盖区域中心(5,3)处输出颜色值1,如图3-19(b)位置“1”所示。当算子移动到位置“2”时,因为右上角处颜色值为1(其他处为1不起作用),所以在覆盖区域中心(8,7)处输出颜色值1,如图3-19(b)位置“2”所示。当算子移动到位置“3”时,因为左下角与右上角处颜色值都不为1,所以在覆盖区域中心(12,9)处输出颜色值0,如图3-19(b)位置“3”所示。

第三十三页,共四十六页,编辑于2023年,星期五(a)图像3-16(a)的一部分,即有字母b的那部分,图3-17左边的一部分数据

第三十四页,共四十六页,编辑于2023年,星期五(b)图(a)使用Q膨胀后的部分结果,即3-18(d)的放大。图3-19二值图像膨胀运算规则

第三十五页,共四十六页,编辑于2023年,星期五其他算子的运算规则都与上面所述相同。运算结果与原图像有关,算子形状与图像的邻域情况决定了运算结果。另外,从上面描述情况看,二值图像膨胀运算本质上是逻辑运算。数学上,二值图像膨胀运算可以用集合定义如下:其中,A为原图像,B为算子。就是上面描述的那种覆盖操作,是空集,是计算后的输出值。

第三十六页,共四十六页,编辑于2023年,星期五2二值图像腐蚀运算二值图像腐蚀运算本质上也是逻辑运算,可以用如下数学定义描述二值图像腐蚀运算:

其中,A为原图像,B为算子。Ac是A的补集。是移动覆盖操作,是空集,是计算后的输出值。在进行腐蚀运算时,算子移动一下,输出一个新值赋给算子覆盖处的中心位置。计算输出值的方法是:如果算子覆盖邻域内图像像素值有为0的,那么中心位置的输出值为0,否则为1。根据上面定义与说明,结合下面例3-17来理解图像腐蚀运算规则。

第三十七页,共四十六页,编辑于2023年,星期五【例3-17】对二值图像实施腐蚀运算。把3-16中程序语句:C1=imdilate(B,M);C2=imdilate(B,N);C3=imdilate(B,P);C4=imdilate(B,Q);修改为:C1=imerode(B,M);C2=imerode(B,N);C3=imerode(B,P);C4=imerode(B,Q);其他语句不变,程序运行的结果是图3-20。

图3-20二值图像腐蚀运算

程序中的函数imerode是用来进行腐蚀运算的。腐蚀运算后,原来图像一般会变细变小。

第三十八页,共四十六页,编辑于2023年,星期五【例3-18】对二值图像实施腐蚀运算,并且与膨胀运算进行比较。设计下面程序:

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所示。

第三十九页,共四十六页,编辑于2023年,星期五

(a)原图像

(b)腐蚀后的图像

(c)膨胀后的图像图3-21二值图像腐蚀与膨胀比较

函数strel是专门用来生成算子模板的,strel('diamond',3)生成的算子模板为:0001000001110001111101111111011111000111000001000函数strel还可以生成‘square’、‘line’、‘disk’、‘periodicline’、‘pair’、‘octagon’等模板。该算子模板呈菱形结构,一共有25个1。该算子覆盖区域呈菱形。第四十页,共四十六页,编辑于2023年,星期五3灰度图像膨胀与腐蚀灰度图像膨胀腐蚀定义分平坦与非平坦两种,关于灰度图像非平坦膨胀腐蚀定义,可以参考其他资料。这里提到灰度图像膨胀腐蚀都是指平坦的灰度图像膨胀腐蚀。灰度图像膨胀腐蚀的定义与二值图像膨胀腐蚀的定义有些区别,一般定义灰度图像膨胀为定义灰度图像腐蚀为灰度图像膨胀实质上是求邻域内最大值作为输出;灰度图像腐蚀是求邻域内最小值作为输出。邻域仍然是由各种算子模板来定义的。第四十一页,共四十六页,编辑于2023年,星期五【例3-19】对灰度图像实施膨胀腐蚀运算。设计下面程序A=imread('D:\flower1.bmp');A1=rgb2gray(A);se=strel('square',3);A2=imdilate(A1,se);A3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论