Matlab 图像几何操作



《Matlab 图像几何操作》由会员分享,可在线阅读,更多相关《Matlab 图像几何操作(64页珍藏版)》请在装配图网上搜索。
1、单击此处编辑母版标题样式,,*,*,*,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,第2章 图像几何操作,,2.1 图像的裁剪、缩放与旋转,,2.2 图像的几何变换,,2.3,图像的邻域操作,,2.4,图像的区域选取,,2.5,图像增强,,2.6,图像滤波,2.1 图像的裁剪、缩放与旋转,图像裁剪,,就是在原图像中裁剪出图像块来。,,,根据裁剪区域的不同,可以对图像进行:,,矩形区域裁剪:,imcrop,函数(,1.3,节),,多边形区域裁剪:,roiploy,函数(,2.4,节),,2.1 图像的裁剪、缩放与旋转,图像缩放,,缩小:从图像中,删除部分像素。,,放
2、大:向图像中,增加部分像素。增加像素的取值是根据周围相邻像素的值进行插值计算得到的。,,,图像缩放的常用函数是,imresize,。通过查看,imresize,函数的帮助信息,可以看出,,imresize,可以使用三种不同的插值方法:,,最近邻插值法:,imresize,函数默认的插值方法,,双线性插值法,,双立方插值法,2.1 图像的裁剪、缩放与旋转,图像缩放:最近邻插值法,'nearest‘,,令新增加的像素的,灰度值等于距它最近的输入像素的灰度值。,,其实现方法最为简单,处理速度快,但它只是将原始象素简单复制到其邻域内,,,随着放大倍数的增加,放大图像会出现相对严重的方块和锯齿,不能很
3、好的保留原始图像的边缘信息。,2.1 图像的裁剪、缩放与旋转,图像缩放:双线性插值法,'bilinear',,要求新增加的像素的灰度值,由周围的,4,个像素的灰度值决定。,,双线性内插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的的情况。由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊。,,,,2.1 图像的裁剪、缩放与旋转,图像缩放:双立方插值法,',bicubic,',,能够克服以上两种算法的不足,计算精度高,但计算量大,因为计算新增加的像素的灰度值时,需要考虑周围的,16,个邻点,。,2.1 图像的裁剪、缩放与旋转,图像缩放举例
4、,,I =,imread('cell.tif,');,,figure(1),,,imshow(I,),,title(',原始图像,'),,pause,,for i=1:3,,,nI,= imresize(I,2*,I,’nearest,’);,,figure(1),,,imshow(nI,),,,title(strcat,(',放大了,',int2str(2*i),',倍,')),,pause,,end,2.1 图像的裁剪、缩放与旋转,图像旋转,,Matlab,使用,imrotate,函数旋转图像。,,在图像旋转的过程中,也可能涉及插值问题。默认采用最近邻插值法。,,【例】,,B=,imre
5、ad('blobs.png,');,,imshow(B,),,figure,,imrotate(B,30,'bilinear','crop'),,其中,,’crop’,表示旋转时图像底版大小保持不变,但图像可能被切割。,,若是,’loose’,,则图像底版大小可能会发生变化。,2.1 图像的裁剪、缩放与旋转,【例】使用,imrotate,函数旋转图像,制作动画效果,,I = imread('blobs.png');,,for i=1:20,,imrotate(I,3*i,’loose');,,end,2.2 图像的几何变换,图像的几何变换是指图像几何操作后,内部结构比例等发生变化,但整体布
6、局与形状没有改变。,,本节主要介绍图像的二维空间变换。,2.2 图像的几何变换,图像二维空间变换,,Matlab,使用,imtransform,函数完成图像二维空间变换。,,imtransform,函数的调用形式为:,,imtransform(I,T,),,参数,I,:要变换的图像,,参数,T,:由,maketform,函数产生的变换结构。根据变换结构的不同,可以实现不同的空间变换。例如:,,二维仿射变换,,投影变换,2.2 图像的几何变换,在函数,maketform(P,,……),中,参数,P,可以是以下形式:,,‘affine’,仿射变换形式,,‘projective’,投影变换形式,
7、,‘custom’,自定义函数进行变换,,‘box’,依靠函数中的另外参数产生仿射变换结构,,‘composite’,该参数实现多次调用,tformfwd,功能,2.2 图像的几何变换,【例】使用,imtransform,函数实现图像平面扭曲功能,,transformtype,= 'affine'; %,仿射变换,,transformmatrix,= [0.5 0 0; 0.5 1 0; 0 0 1];,,%,仿射变换要求变换矩阵的最后一列除最后一个元素为,1,之外,,,%,其它的均为,0,,T =,maketform(transformtype,transformmatrix,);,
8、,I =,imread('cameraman.tif,');,,nI,=,imtransform(I,T,);,,subplot(1,2,1),imshow(I),,subplot(1,2,2),imshow(nI),,2.2 图像的几何变换,仿射变换是由一个线性变换接上一个平移组成的。因此,仿射变换的矩阵表达可描述为:,请思考:,,在上例中,原图像的像素点,(,x,y,),与变换后得到的像素点,(,x’,y,’),之间的关系是?,,平移、比例缩放、旋转能否看成是仿射变换的特殊情况?,或用齐次坐标表示为:,2.2 图像的几何变换,两种特殊的仿射变换,平移,旋转,比例缩放,2.2 图像的几
9、何变换,使用,imtransform,函数实现图像缩放功能,,transformtype,= 'affine';,,transformmatrix,= [0.5 0 0; 0 0.5 0; 0 0 1];,,T =,maketform(transformtype,transformmatrix,);,,I =,imread('cameraman.tif,');,,nI,=,imtransform(I,T,);,,subplot(1,2,1),imshow(I),,subplot(1,2,2),imshow(nI),,2.2 图像的几何变换,使用,imtransform,函数实现图像旋转功能,
10、,transformtype,= 'affine';,,transformmatrix,= [cos(pi/6) sin(pi/6) 0;,,-sin(pi/6) cos(pi/6) 0;,,0 0 1];,,T =,maketform(transformtype,transformmatrix,);,,I =,imread('cameraman.tif,');,,nI,=,imtransform(I,T,);,,subplot(1,2,1),imshow(I),,subplot(1,2,2),imshow(nI),2.2 图像的几何变换,二维投影变换可以
11、把一幅图像按照近大远小的投影规律投影到一个平面上,从而产生立体的效果。,,【例】使用,imtransform,函数实现图像的二维投影变换,,figure(2),,transformtype,= 'projective'; %,投影变换,,transformmatrix,= [ 1.1581 0 0;,,-0.4228 0.6066 -0.0074;,,4.2279 4.3566 1.0000 ];,,%,transformmatrix,=[0.8 0 0; -0.2 0.8 -0.003; 3.5 1.5,1.5,];,,T =,maketform(
12、transformtype,,,transformmatrix,);,,I =,imread('cameraman.tif,');,,nI,=,imtransform(I,T,);,,subplot(1,2,1),imshow(I),,subplot(1,2,2),imshow(nI),2.2 图像的几何变换,投影变换的矩阵表达,,,,在进行乘法计算之后,通常齐次元素,w,c,,并不为,1,,所以为了映射回真实平面需要进行齐次除法,即每个元素都除以,w,c,,:,,,,,实际地,仿射变换可看作是一种特殊的投影变换。它要求,变换矩阵的最后一列除最后一个元素为,1,之外,,,其它的均为,0,。,
13、2.,3,图像的邻域操作,邻域操作方法充分地利用了图像相邻像素间的颜色、灰度等关系,实现对图像的平滑、增强、边缘提取、滤波和恢复等操作。,2.,3.1,邻域操作,【例】对小狮子图像进行邻域操作,使小狮子图像的轮廓变得清晰。,,I =,imread('shizi.bmp,');,,I = double(rgb2gray(I));,,figure(1),subplot(1,2,1),imshow(I,[]),,[,m,n,] =,size(I,);,,nI,=,zeros(m,n,),,C = [ -1,-1,,-1,; -1 8 -1; -1,-1,,-1,];,,for i=2:m-1,,
14、for j=2:n-1,,L = I(i-1:i+1, j-1:j+1) .* C;,,,nI(i,j,) =,sum(sum(L,));,,end,,end,,figure(1),subplot(1,2,2),imshow(nI,[]),2.,3.1,邻域操作,矩阵,C,,称为滑动块矩阵、掩膜矩阵或空域滤波器。,在矩阵,C,上进行滑动的时候,首先从图左上角开始,修改的是原图像的,(2,2),元素,修改该元素的方法是:,,1,.使用滑动块矩阵,C=,与,,(即以,,,,原图像的,(2,2),元素为中心的,3*3,邻域矩阵)对应元素相乘,得到了新的,3*3,矩阵,D=,,,,2,.,把新得到的矩
15、阵,D,的所有元素相加,其和作为新图像的,(2,2),元素的值。程序中使用的语句为:,nI(i,j,)=sum(sum(L)),。,该例子中,新图像的,(2,2),元素的值为,0,。,,2.,3.1,邻域操作,接着修改的第2个元素是(2,3),然后是(2,4),…,(2,,n-1),,但,(2,n),没有修改。,,接着修改第3行(3,2)到(3,,n-1),元素,如此下去,最后一行没有修改。,,从上例可以看出,使用语言编写程序对图像进行邻域操作时,主要是利用多重循环语句实现。,,值得注意的是,循环结束后,新矩阵,nI,中会有很多负值,使用,imshow,函数能够自动对矩阵数据按比例进行调整。,
16、,程序运行结果如下所示:,2.3.2,Matlab,邻域操作函数,Matlab,提供了可以实现邻域操作的函数,因此可以直接调用相应的邻域操作函数,完成各种邻域操作功能:,,nlfilter,,colfilt,,blkproc,2.3.2,Matlab,邻域操作函数,nlfilter,函数的一般形式为:,,nI,=,nlfilter(I,[M,N],FUN),,其中,:,,I,是被处理的图像,,,[,M N],表示滑动块的高为,M、,宽为,N。,,FUN,是要对滑动覆盖区域进行操作的函数名,该函数可以是各种滤波算子,可以是任意定义的矩阵。,,【例】使用,nlfilter,函数对图像进行均值平滑邻
17、域操作。,,I =,imread('shizi.bmp,');,,I = rgb2gray(I);,,figure(1),subplot(1,2,1);,imshow(I,);,,fun =,inline('mean(mean(x,))');,,nI,= nlfilter(I,[3 3],fun);,,figure(1),subplot(1,2,2);,imshow(nI,,[]);,2.3.2,Matlab,邻域操作函数,inline(‘mean(mean(x,))’),的含义:,,根据参数字串,mean(mean(x,)),创建内联函数,以便在后面的程序语句中调用该函数。,,nlfilte
18、r(I,[3 3],fun),的含义:,,使用,3,行,3,列大小的滑动块在图像,I,上滑动,每滑动一次就以滑块遮住的部分作为参数,x,调用函数,fun,。,,由于,fun,即为上述定义的内联函数,因此新产生的图像,nI,中除边界外,每个像素都是图像,I,中某,3,行,3,列图像块的均值。,,函数,nfilter,在边界处用,0,填补。,2.3.2,Matlab,邻域操作函数,调用函数,nlfilter,时,如果参数,FUN,有参数,则需要使用下面格式:,,nI,=,nlfilter(I,[M,N],FUN,P1,P2,...),,其中,,P1,P2,...,为函数,FUN,的实参,把值传入函
19、数体中。,,【例】若已有函数定义:,,function r = myfun(t,p1,p2),,r =,mean(mean(t,)).*p1 + p2;,,,则可设计如下程序:,,I =,imread('shizi.bmp,');,,I = rgb2gray(I);,,figure(1),subplot(1,2,1);,imshow(I,);,,fun = @,myfun,;,,p1 = 2; p2 = 1;,,nI,= nlfilter(I,[3 3],fun,p1,p2);,,figure(1),subplot(1,2,2);,imshow(nI,,[]);,2.3.2,Matlab,邻域
20、操作函数,colfilt,函数与,nlfilter,函数的主要区别有:,,colfilt,函数在处理图像时,先把滑动块遮住的图像块排成一个列向量,处理之后再恢复成图像块。,,nlfilter,函数采取逐像素滑动的方式,,colfilt,函数在移动的时候可以选择:,,‘,sliding’,:逐像素滑动,,‘,distinct’,:逐图像块滑动,滑动时图像块互不重叠。,,2.3.2,Matlab,邻域操作函数,【例】,使用,colfilt,函数进行图像邻域操作(逐像素),,若已有函数定义:,,function r = myfun(x,p1,p2),,r =,mean(x,).*p1 + p2;,,
21、则可设计如下程序:,,I =,imread('shizi.bmp,');,,I = rgb2gray(I);,,figure(1),subplot(1,2,1),,imshow(I,,[]);,,fun = @,myfun,;,,p1 = 2; p2 = 1;,,nI,= colfilt(I,[3 3],'sliding',fun,p1,p2);,,figure(1),subplot(1,2,2),,imshow(nI,,[]),2.3.2,Matlab,邻域操作函数,【例】,使用,colfilt,函数进行图像邻域操作(逐图像块),,若已有函数定义:,,function r = myfun(x
22、,len,p1,p2),,r = mean(x)*p1+p2;,,r = ones(len,1)*r;,,则可设计如下程序:,,I =,imread('shizi.bmp,');,,I = rgb2gray(I);,,figure(1),subplot(1,2,1),,imshow(I,,[]);,,fun = @,myfun,;,,m =3; n =3;,len,= m*n;,,p1 = 2; p2 = 1;,,nI,=,colfilt(I,[m,n],'distinct',fun,len,p1,p2);,,figure(1),subplot(1,2,2),,imshow(nI,,[]),2
23、.3.2,Matlab,邻域操作函数,blkproc,函数是专门进行分块操作的函数,,若已有函数定义:,,function r = myfun(x,m,n,p1,p2),,r = mean(mean(x))*p1+p2;,,r = ones(m,n)*r;,,则可设计如下程序:,,I =,imread('shizi.bmp,');,,I = rgb2gray(I);,,figure(1),subplot(1,2,1),,imshow(I,,[]);,,fun = @,myfun,;,,m =3; n =3;,len,= m*n;,,p1 = 2; p2 = 1;,,nI,=,blkproc(I
24、,[m,n],fun,m,n,p1,p2);,,figure(1),subplot(1,2,2),,imshow(nI,,[]),2.3.2,Matlab,邻域操作函数,image=,imread('cameraman.tif,');,,image=im2double(image);,,T=dctmtx(8);,,B=blkproc(image,[8 8],'P1*x*P2',T,T');,,mask,=[ 1 1 1 1 0 0 0 0; 1 1 1 0 0 0 0 0; 1 1 0 0 0 0 0 0;,,1 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0; 0 0 0 0
25、0 0 0 0;,,0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0];,,,B2=blkproc(B,[8 8],'P1.*x',mask);,,reconstructedImage= blkproc(B2,[8,8],'P1*x*P2',T',T);,,Subplot(1,2,1);,,Imshow(image);,,title(',原图像,');,,Subplot(1,2,2);,,Imshow(reconstructedImage);,,title(',压缩图像,');,2.4 图像区域选取,块选取函数,,imcrop,函数:矩形区域选取,,Roipoly,函数:,可
26、以完成各种多边形块的选取功能,返回结果是一个与输入图像一样大小的二值图像。,,,,曲线围成的区域,,在计算机中没有严格的连续曲线,所有的曲线都是多边形。所以可以用,roipoly,函数选取近似的曲边区域。,2.4 图像区域选取,[,I,m,] =,imread('shamo.jpg,');,,I = double(rgb2gray(I));,,figure(1),subplot(1,2,1),imshow(I,m),,C1 = [110 330 380 ];,,C2 = [120 200 368 ];,,BW = roipoly(I,C1,C2);,,B =,double(BW,
27、).*256;,,nI,= (I + B);,,figure(1),subplot(1,2,2),imshow(nI,m),2.4 图像区域选取,[,I,m,] =,imread('shamo.jpg,');,,I = double(rgb2gray(I));,,figure(1),subplot(1,2,1),imshow(I,m),,C1 = 10:pi:180;,,C2 = 100+floor(20*sin(C1));,,BW = roipoly(I,C1,C2);,,B =,double(BW,).*256;,,nI,= (I + B);,,figure(1),subplot(1,2
28、,2),imshow(nI,m),2.5 图像增强,图像增强是对图像进行操作,得到视觉效果更好或者更有用的新图像。,,狭义上的图像增强就是加强或减弱灰度图像的明暗对比度(,将亮度的最大值和最小值之比称为,对比度,)。,,广义上的图像增强除了对灰度图像进行增强外,还包括彩色图像增强等。,2.5,.1,灰度调整,灰度调整:,,增加明暗对比度的一种常用方法是灰度调整方法。,,灰度调整方法是基于灰度直方图的一种图像增强方法。,,所谓灰度直方图就是灰度图像的灰度值统计图,如下例所示:,2.5,.1,灰度调整,【,例,】,统计某幅图像的灰度信息,即计算图像中,0-255,种灰度级各自的像素点个数。,,I
29、 =,imread('pout.tif,');,,figure(1),subplot(1,2,1),imshow(I),,nI,=,floor(double(I,));,,[,m,n,] =,size(nI,);,,H = zeros(256);,,for i = 1:m,,for j = 1:n,,k =,nI(i,j,);,,H(k+1)=H(k+1)+1;,,end,,end,,figure(1),subplot(1,2,2),bar(H),2.5,.1,灰度调整,【,例,】,按线性灰度变换规则,增强图像的明暗对比度。,,,I =,imread('pout.tif,');,,I =,do
30、uble(I,);,,a = 90; b = 120;,na,= 0;,nb,= 255;,,k = (,nb-na)./(b-a,);,,nI,=,na,+ k.*(I-a);,nI,=,round(nI,);,,[,m,n,] =,size(I,);,,for i=1:m,,for j=1:n,,if,nI(i,j,)<,na,,nI(i,j,)=,na,; end,,if,nI(i,j,)>,nb,,nI(i,j,)=,nb,; end,,end,,end,,subplot(1,2,1),imshow(I,[]),,subplot(1,2,2),imshow(nI,[]),2.5
31、,.1,灰度调整,,2.5,.1,灰度调整,,2.5,.1,灰度调整,,2.5,.1,灰度调整,,2.5,.2,灰度调整函数,在,Matlab,中,与灰度调整相关的函数主要有:,,imadjust,,用于将图像的灰度值调整到指定的范围。,,stretchlim,,用来计算灰度图像的最佳输入区间的。所谓最佳就是按照该区间输入,图像灰度的对比度最大。,,histeq,,用于自动完成图像灰度调整,使得调整后图像的灰度直方图趋于均衡化。,,brighten,,用来改变显示灰度图像时的亮度,但并不改变原始图像自身的灰度。,2.5,.2,灰度调整函数,imadjust,函数的一般调用格式为:,,,nI,=
32、,imadjust(I,[low_in,,high_in],[low_out,,high_out],gamma,),,,其中,:,,[,low_in,,high_in,],:,,用来限制输入范围,且取值范围落在,[0,1],区间。,,例如,若,low_in,=0.2,,则表示最小的输入灰度值为,255*0.2,。,,[,low_out,,high_out,],:,,用来限制输出范围,且取值范围落在,[0,1],区间,,gamma,:,,用来说明是否指数变换时的指数值。缺省时,,gamma=1,,表示线性变换,2.5,.2,灰度调整函数,【,例,】,使用,imadjust,函数对图像进行灰度调整
33、,,,I =,imread('pout.tif,');,,a = 90; b = 120;,,na,= 0;,nb,= 255;,,nI,= imadjust(I,[a/255 b/255],[na/255,nb/255]);,,figure(2),subplot(1,2,1),imshow(I,[]),,figure(2),subplot(1,2,2),imshow(nI,[]),尝试给参数,gamma,传递一个大于,1,以及小于,1,的值,观察结果。,2.5,.2,灰度调整函数,【例】使用函数,imadjust,对,RGB,彩色图像进行颜色调整。,,I =,imread('peppers.
34、png,');,,nI,=,imadjust(I,, [.2 .3 0; .6 .7 1]);,,figure(1),subplot(1,2,1),,imshow(I,),,figure(1), subplot(1,2,2),,imshow(nI,),,,2.5,.2,灰度调整函数,stretchlim,函数的一般调用格式为:,,LOW_HIGH,=,stretchlim(I,TOL,),,LOW_HIGH =,stretchlim(I,TOL,) returns a pair of intensities that can be used by,imadjust,to increase
35、the contrast of an image.,,其中,:,,TOL = [LOW_FRACT HIGH_FRACT],:用于说明在低灰度以及高灰度时的饱和度。,饱和度可认为是某色调的纯色掺入白色光的比例,,如果TOL,是个常量,则,TOL = LOW_FRACT,,同时,HIGH_FRACT = 1 - LOW_FRACT,,表明,在低灰度以及高灰度时的饱和度相同,.,,如果,省略,TOL,,则默认,TOL =,[0.01 0.99],,饱和度为,2%.,,如果,TOL = 0,,则,LOW_HIGH = [,min(I,(:)),max(I,(:))].,2.5,.2,灰度调整函数,【
36、,例,】,,I =,imread('pout.tif,');,,nI,=,imadjust(I,stretchlim(I,),[]);,,figure(1),subplot(1,2,1),imshow(I,[]),,figure(1),subplot(1,2,2),imshow(nI,[]),,【,例,】,,I =,imread('peppers.png,');,,nI,=,imadjust(I,,,stretchlim(I,));,,figure(1),subplot(1,2,1),,imshow(I,),,figure(1), subplot(1,2,2),,imshow(nI,),,,,
37、2.5,.2,灰度调整函数,histeq,,用于自动完成图像灰度调整,使得调整后图像的灰度直方图趋于均衡化。,,,I =,imread('pout.tif,');,,figure(1),subplot(1,2,1),imshow(I);,,figure(1),subplot(1,2,2),,imhist(I,);,,nI,=,histeq(I,);,,figure(2),subplot(1,2,1),,imshow(nI,);,,figure(2),subplot(1,2,2),,imhist(nI,);,2.5,.2,灰度调整函数,brighten,,用来改变显示灰度图像时的亮度,但并不改变
38、原始图像自身的灰度。,,它的一般调用格式为:,,brighten(beta,),,【,例,】,,I =,imread('tire.tif,');,,figure(1),imshow(I);,,figure(2),imshow(I);,,brighten(0.75);,,%,函数,brighten,通常放在,imshow,之后,请思考为什么。,2.6 图像滤波,滤波是一种应用广泛的图像处理技术,可以通过滤波来强调或删除图像的某些特征。,,滤波是一种邻域操作,即处理后的图像每个象素值是原来该象素周围的颜色值经过某种计算得到的。,,2.3节介绍的图像邻域操作就是一种图像滤波。本节进一步地介绍和分析
39、滤波技术。,,滤波函数,imfilter,,滤波器的定义,2.6,.1,图像滤波函数,函数,imfilter,是,Matlab,中使用较多的滤波函数,基本调用格式为:,,nI,=,imfilter(I,H,OPTION,),,其中,:,,I,为要进行滤波的图像矩阵,可以为多维的彩色图像矩阵(数组);,,H,是已经定义的滤波算子。,,imfilter,函数本身也是基于邻域滑动设计实现的,所以也涉及到边界如何填补的问题。如果调用时省略,OPTION,参数,则默认以,0,填补边界。,,参数,OPTION,可以选择边界填补参数:,,‘replicate’,:将边界内的值复制到边界处。,,‘,symme
40、tric’,:将边界内的值通过镜像对称反射方法填补到边界处。,,‘circular’,:把图像看成是一个二维周期函数来实现边界的填补。,2.6,.1,图像滤波函数,【,例,】,,I =,imread('football.jpg,');,,h = ones(3,3)/9; %,均值滤波,,nI1 =,imfilter(I,h,);,,nI2 =,imfilter(I,h,'replicate,');,,nI3 =,imfilter(I,h,'symmetric,');,,nI4 =,imfilter(I,h,'circular,');,,figure(1),imshow(I),,title(
41、'Original,'),,figure(2), imshow(nI1),,title('Boundary,Default' ),,figure(3), imshow(nI2),,title('Boundary,Replication'),,figure(4), imshow(nI3),,title('Boundary,Symmetric' ),,figure(5), imshow(nI4),,title('Boundary,Circular'),2.6,.1,图像滤波函数,与,nlfilter,不同的是,,imfilter,函数不需要定义操作函数。,,被滑动块(或称滤波器)遮盖的图像块与滑动
42、块之间进行何种操作,取决于参数,OPTION,:,,‘,corr,’,:相关运算。缺省时,默认为‘,corr,’,。,,滤波后,某像素点的值通常是某图像块与滑动块(或称滤波器)的,对应元素,相乘之后再取总和。,,‘,conv,’,:卷积运算,,滤波后,某像素点的值通常是某图像块与滑动块(或称滤波器)的,首尾呼应的元素,相乘之后再取总和得到。,2.6,.1,图像滤波函数,【,例,】,验证‘,corr,’,,假定已有函数定义:,,function r =,myfun(t,h,),,r =,sum(sum(t,.*h));,,则可验证,nI1==nI2,,I =floor(256*randn(8,8
43、));,,fun = @,myfun,;,,h = randn(3,3);,,nI1 = nlfilter(I,[3 3],fun,h); nI1 = floor(nI1);,,nI2 =,imfilter(I,h,); nI2 = floor(nI2);,,,sum(sum(nI1-nI2)),,2.6,.1,图像滤波函数,【,例,】,验证‘,conv,’,,假定已有函数定义:,,function r = myfun(t,h),,t = t(:); h = h(:);,,len = length(h);,,v = zeros(len,1);,,for i=1:len,,v(i) = t(i)
44、.*h(len-i+1);,,end,,r = sum(v);,,则可验证,nI1==nI2,,I =floor(256*randn(8,8));,,fun = @,myfun,;,,h = randn(3,3);,,nI1 = nlfilter(I,[3 3],fun,h); nI1 = floor(nI1);,,nI2 =,imfilter(I,h,’conv,’); nI2 = floor(nI2);,,,sum(sum(nI1-nI2)),,2.6,.1,图像滤波函数,【,例,】,滤波算子不同,滤波后的效果会有很大的不同。,,I = rgb2gray(imread('003.bmp')
45、);,,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 0 -1,,2 0 -2,,1 0 -1];,,h3 = [0.1667 0.6667 0.1667,,0.6667 -3.3333 0.6667,,0.1667 0.6667 0.1667]
46、;,,I1 = imfilter(I,h1);,,I2 = imfilter(I,h2);,,I3 = imfilter(I,h3);,,subplot(2,2,1),,imshow(I,), title(',原图像,'),,subplot(2,2,2), imshow(I1), title(',运动滤波,'),,subplot(2,2,3), imshow(I2), title(',水平边缘增强,'),,subplot(2,2,4), imshow(I3), title(',拉普拉斯滤波,'),2.6,.2,滤波器的定义,可以利用,Matlab,提供的,fspecial,函数产生相应的线性
47、滤波算子。,,函数,fspecial,的一般调用格式为:,,fspecial(T,P,),,其中:,,参数,P,为辅助说明参数,,参数,T,的取值可以为:,,,',average,',,均值滤波器,,',disk',圆形均值滤波器,,',motion',运动滤波器,,',gaussian,',高斯低通滤波器,,',laplacian,',二维拉普拉斯滤波器,,',log',高斯拉普拉斯滤波器,,',prewitt,' Prewitt,水平边缘增强滤波器,,',sobel,',Sobel,水平边缘增强滤波器,,滤波器的设计,,,可以根据不断的实验探索,,也可以根据数学原理产生。,2.6,
48、.2,滤波器的定义,如果对邻域内像素的计算为线性运算,那么对应的滤波操作则称为线性滤波。函数,imfilter,是一个线性滤波函数。它采用的滤波器也常被称为线性滤波器,或线性滤波算子。,,非线性滤波也是基于邻域操作的,但是不象线性滤波那样,滤波器与对应元素相乘然后相加。非线性滤波不再用线性组合的方法得到新的元素,使用的是可能统计的方法或非线性组合的方法。,,【,例,】,排序取中值操作就是一种非线性滤波操作,,fun =,inline('median(x,(:))');,,B = nlfilter(A1,[3 3],fun);,2.6,.2,滤波器的定义,Matlab,提供了函数,medfilt2( ),专门进行二维中值滤波。,,【,例,】,使用函数,medfilt2,进行二维中值滤波。,,,I= imread('005.bmp');,,I = 255*,double(I,);,,,nI,= medfilt2(I);,,figure(1),subplot(1,2,1),imshow(I,[]),,figure(1),subplot(1,2,2),imshow(nI,[]),,2.6,.2,滤波器的定义,,思考题,,课后习题,,选取编程题做上机练习,
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。