Matlab图像几何操作行业信息

上传人:枫** 文档编号:579033750 上传时间:2024-08-25 格式:PPT 页数:64 大小:2.33MB
返回 下载 相关 举报
Matlab图像几何操作行业信息_第1页
第1页 / 共64页
Matlab图像几何操作行业信息_第2页
第2页 / 共64页
Matlab图像几何操作行业信息_第3页
第3页 / 共64页
Matlab图像几何操作行业信息_第4页
第4页 / 共64页
Matlab图像几何操作行业信息_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《Matlab图像几何操作行业信息》由会员分享,可在线阅读,更多相关《Matlab图像几何操作行业信息(64页珍藏版)》请在金锄头文库上搜索。

1、第第2 2章章 图像几何操作图像几何操作 l2.1 2.1 图像的裁剪、缩放与旋转图像的裁剪、缩放与旋转l2.2 2.2 图像的几何变换图像的几何变换 l2.3 2.3 图像的邻域操作图像的邻域操作l2.4 2.4 图像的区域选取图像的区域选取l2.5 2.5 图像增强图像增强l2.6 2.6 图像滤波图像滤波 1学习课件2.1 图像的裁剪、缩放与旋转l图像裁剪图像裁剪就是在原图像中裁剪出图像块来。就是在原图像中裁剪出图像块来。l根据裁剪区域的不同,可以对图像进行:根据裁剪区域的不同,可以对图像进行:矩形区域裁剪:矩形区域裁剪: imcrop函数(函数(1.3节)节)多边形区域裁剪:多边形区域

2、裁剪:roiploy函数(函数(2.4节)节)2学习课件2.1 图像的裁剪、缩放与旋转l图像缩放图像缩放缩小:从图像中,删除部分像素。缩小:从图像中,删除部分像素。放大:向图像中,增加部分像素。增加像素的取值放大:向图像中,增加部分像素。增加像素的取值是根据周围相邻像素的值进行插值计算得到的。是根据周围相邻像素的值进行插值计算得到的。l图像缩放的常用函数是图像缩放的常用函数是imresize。通过查看。通过查看imresize函数的帮助信息,可以看出,函数的帮助信息,可以看出,imresize可以使用三种不同的插值方法:可以使用三种不同的插值方法:最近邻插值法:最近邻插值法: imresize

3、函数默认的插值方法函数默认的插值方法双线性插值法双线性插值法双立方插值法双立方插值法3学习课件2.1 图像的裁剪、缩放与旋转l图像缩放:最近邻插值法图像缩放:最近邻插值法 nearest令新增加的像素的令新增加的像素的灰度值等于距它最近的输入像素灰度值等于距它最近的输入像素的灰度值。的灰度值。其实现方法最为简单,处理速度快,但它只是将原其实现方法最为简单,处理速度快,但它只是将原始象素简单复制到其邻域内始象素简单复制到其邻域内,随着放大倍数的增加,随着放大倍数的增加,放大图像会出现相对严重的方块和锯齿,不能很好放大图像会出现相对严重的方块和锯齿,不能很好的保留原始图像的边缘信息。的保留原始图像

4、的边缘信息。 4学习课件2.1 图像的裁剪、缩放与旋转l图像缩放:双线性插值法图像缩放:双线性插值法 bilinear要求新增加的像素的灰度值,由周围的要求新增加的像素的灰度值,由周围的4个像素的个像素的灰度值决定。灰度值决定。双线性内插值法计算量大,但缩放后图像质量高,双线性内插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的的情况。由于双线性插值不会出现像素值不连续的的情况。由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊。能会使图像轮廓在一定程度上变得模糊。 5学习课件2.1 图像的裁剪、缩放

5、与旋转l图像缩放:双立方插值法图像缩放:双立方插值法 bicubic能够克服以上两种算法的不足,计算精度高,但计能够克服以上两种算法的不足,计算精度高,但计算量大,因为计算新增加的像素的灰度值时,需要算量大,因为计算新增加的像素的灰度值时,需要考虑周围的考虑周围的16个邻点个邻点。6学习课件2.1 图像的裁剪、缩放与旋转l图像缩放举例图像缩放举例I = imread(cell.tif);figure(1),imshow(I)title(原始图像原始图像)pausefor i=1:3 nI = imresize(I,2*I,nearest); figure(1),imshow(nI) title

6、(strcat(放大了放大了,int2str(2*i),倍倍) pauseend7学习课件2.1 图像的裁剪、缩放与旋转l图像旋转图像旋转MatlabMatlab使用使用imrotateimrotate函数旋转图像。函数旋转图像。在图像旋转的过程中,也可能涉及插值问题。默认在图像旋转的过程中,也可能涉及插值问题。默认采用最近邻插值法。采用最近邻插值法。【例】【例】B=imread(blobs.png);imshow(B)figureimrotate(B,30,bilinear,crop)其中,其中,crop表示旋转时图像底版大小保持不变,表示旋转时图像底版大小保持不变,但图像可能被切割。但图像

7、可能被切割。若是若是loose,则图像底版大小可能会发生变化。,则图像底版大小可能会发生变化。8学习课件2.1 图像的裁剪、缩放与旋转l【例】使用【例】使用imrotate函数旋转图像,制作动画效果函数旋转图像,制作动画效果I = imread(blobs.png);for i=1:20 imrotate(I,3*i,loose);end9学习课件2.2 2.2 图像的几何变换图像的几何变换l图像的几何变换是指图像几何操作后,图像的几何变换是指图像几何操作后,内部结构比例等发生变化,但整体布局内部结构比例等发生变化,但整体布局与形状没有改变。与形状没有改变。l本节主要介绍图像的二维空间变换。本

8、节主要介绍图像的二维空间变换。10学习课件2.2 2.2 图像的几何变换图像的几何变换l图像二维空间变换图像二维空间变换Matlab使用使用imtransform函数完成图像二维空间变换。函数完成图像二维空间变换。imtransform函数的调用形式为:函数的调用形式为:imtransform(I,T)参数参数I:要变换的图像:要变换的图像参数参数T:由:由maketform函数产生的变换结构。根据变换结函数产生的变换结构。根据变换结构的不同,可以实现不同的空间变换。例如:构的不同,可以实现不同的空间变换。例如:l二维仿射变换二维仿射变换l投影变换投影变换11学习课件2.2 2.2 图像的几何

9、变换图像的几何变换l在函数在函数maketform(P,)中,参数中,参数P可以是以下可以是以下形式:形式:affine仿射变换形式仿射变换形式projective 投影变换形式投影变换形式custom 自定义函数进行变换自定义函数进行变换box 依靠函数中的另外参数产生仿射变换结构依靠函数中的另外参数产生仿射变换结构composite该参数实现多次调用该参数实现多次调用tformfwd功能功能12学习课件2.2 2.2 图像的几何变换图像的几何变换l【例】使用【例】使用imtransform函数实现图像平面扭曲功能函数实现图像平面扭曲功能transformtype = affine; % 仿

10、射变换仿射变换transformmatrix = 0.5 0 0; 0.5 1 0; 0 0 1;% 仿射变换要求变换矩阵的最后一列除最后一个元素为仿射变换要求变换矩阵的最后一列除最后一个元素为1之外,之外,% 其它的均为其它的均为0T = maketform(transformtype,transformmatrix);I = imread(cameraman.tif);nI = imtransform(I,T);subplot(1,2,1),imshow(I)subplot(1,2,2),imshow(nI)13学习课件2.2 2.2 图像的几何变换图像的几何变换l仿射变换是由一个线性变换

11、接上一个平移组成仿射变换是由一个线性变换接上一个平移组成的。因此,仿射变换的矩阵表达可描述为:的。因此,仿射变换的矩阵表达可描述为:l 请思考:请思考:l 在上例中,原图像的像素点在上例中,原图像的像素点(x,y)与变换后得到的像素点与变换后得到的像素点(x,y)之间的关系是?之间的关系是?l 平移、比例缩放、旋转能否看成是仿射变换的特殊情况?平移、比例缩放、旋转能否看成是仿射变换的特殊情况? 或用齐次坐标表示为:或用齐次坐标表示为:14学习课件2.2 2.2 图像的几何变换图像的几何变换l两种特殊的仿射变换两种特殊的仿射变换平移平移旋转旋转比例缩放比例缩放15学习课件2.2 2.2 图像的几

12、何变换图像的几何变换l使用使用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) 16学习课件2.2 2.2 图像的几何变换图像的几何变换l使用使用imtransform函

13、数实现图像旋转功能函数实现图像旋转功能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)17学习课件2.2 2.2 图像的几何变换图像的几何变换l二维投影变换可以把一幅图像按照

14、近大远小的投二维投影变换可以把一幅图像按照近大远小的投影规律投影到一个平面上,从而产生立体的效果。影规律投影到一个平面上,从而产生立体的效果。l【例】使用【例】使用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

15、 = maketform(transformtype ,transformmatrix);I = imread(cameraman.tif);nI = imtransform(I,T);subplot(1,2,1),imshow(I)subplot(1,2,2),imshow(nI)18学习课件2.2 2.2 图像的几何变换图像的几何变换l投影变换的矩阵表达投影变换的矩阵表达l在进行乘法计算之后,通常齐次元素在进行乘法计算之后,通常齐次元素 wc 并不并不为为 1,所以为了映射回真实平面需要进行齐次,所以为了映射回真实平面需要进行齐次除法,即每个元素都除以除法,即每个元素都除以 wc :l实际

16、地,仿射变换可看作是一种特殊的投影变换。它实际地,仿射变换可看作是一种特殊的投影变换。它要求要求变换矩阵的最后一列除最后一个元素为变换矩阵的最后一列除最后一个元素为1之外,之外, 其其它的均为它的均为0。19学习课件2. 2.3 3 图像的邻域操作图像的邻域操作l邻域操作方法充分地利用了图像相邻像素间的邻域操作方法充分地利用了图像相邻像素间的颜色、灰度等关系,实现对图像的平滑、增强、颜色、灰度等关系,实现对图像的平滑、增强、边缘提取、滤波和恢复等操作。边缘提取、滤波和恢复等操作。20学习课件2. 2.3.1 3.1 邻域操作邻域操作l【例】对小狮子图像进行邻域操作,使小狮子图像的轮廓【例】对小

17、狮子图像进行邻域操作,使小狮子图像的轮廓变得清晰。变得清晰。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 for j=2:n-1 L = I(i-1:i+1, j-1:j+1) .* C; nI(i,j) = sum(sum(L); end endfigure(1),subplot(1,2,2),imshow(nI,)21学习课件2. 2

18、.3.1 3.1 邻域操作邻域操作l矩阵矩阵C,称为滑动块矩阵、掩膜矩阵或空域滤波器。称为滑动块矩阵、掩膜矩阵或空域滤波器。22学习课件在在矩矩阵阵C上上进进行行滑滑动动的的时时候候,首首先先从从图图左左上上角角开开始始,修修改改的的是原图像的是原图像的(2,2)元素,修改该元素的方法是:元素,修改该元素的方法是:1使用滑动块矩阵使用滑动块矩阵C= 与与 (即以(即以原图像的原图像的(2,2)元素为中心的元素为中心的3*3邻域矩阵)对应元素相乘,邻域矩阵)对应元素相乘,得到了新的得到了新的3*3矩阵矩阵D=2把新得到的矩阵把新得到的矩阵D的所有元素相加,其和作为新图像的的所有元素相加,其和作为

19、新图像的(2,2)元素的值。程序中使用的语句为:元素的值。程序中使用的语句为:nI(i,j)=sum(sum(L)。该例子中,新图像的该例子中,新图像的(2,2)元素的值为元素的值为0。 23学习课件2. 2.3.1 3.1 邻域操作邻域操作接着修改的第接着修改的第2个元素是个元素是(2,3),然后是,然后是(2,4),(2,n-1),但,但(2,n)没有修改。没有修改。接着修改第接着修改第3行行(3,2)到到(3,n-1)元素,如此下去,最后一行没有修改。元素,如此下去,最后一行没有修改。l从上例可以看出,使用语言编写程序对图像进行邻域操作时,从上例可以看出,使用语言编写程序对图像进行邻域操

20、作时,主要是利用多重循环语句实现。主要是利用多重循环语句实现。 l值得注意的是,循环结束后,新矩阵值得注意的是,循环结束后,新矩阵nI中会有很多负值,使中会有很多负值,使用用imshow函数能够自动对矩阵数据按比例进行调整。函数能够自动对矩阵数据按比例进行调整。l程序运行结果如下所示:程序运行结果如下所示:24学习课件2.3.2 Matlab2.3.2 Matlab邻域操作函数邻域操作函数lMatlab提供了可以实现邻域操作的函数,因此提供了可以实现邻域操作的函数,因此可以直接调用相应的邻域操作函数,完成各种可以直接调用相应的邻域操作函数,完成各种邻域操作功能:邻域操作功能:nlfilterc

21、olfiltblkproc25学习课件2.3.2 Matlab2.3.2 Matlab邻域操作函数邻域操作函数lnlfilternlfilter函数的一般形式为:函数的一般形式为:nI =nlfilter(I,M N,FUN)nI =nlfilter(I,M N,FUN)l其中其中: :I I 是被处理的图像,是被处理的图像, M NM N表示滑动块的高为表示滑动块的高为M M、宽为宽为N N。FUNFUN是要对滑动覆盖区域进行操作的函数名,该函数可以是各种滤波算子,是要对滑动覆盖区域进行操作的函数名,该函数可以是各种滤波算子,可以是任意定义的矩阵。可以是任意定义的矩阵。【例】使用【例】使用n

22、lfilternlfilter函数对图像进行均值平滑邻域操作。函数对图像进行均值平滑邻域操作。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,);26学习课件2.3.2 Matlab2.3.2 Matlab邻域操作函数邻域操作函数linline(mean(mean(x)的含义:的含义:根据参数字串根据参数字串mean(mea

23、n(x)创建内联函数,以便创建内联函数,以便在后面的程序语句中调用该函数。在后面的程序语句中调用该函数。lnlfilter(I,3 3,fun)的含义:的含义:使用使用3行行3列大小的滑动块在图像列大小的滑动块在图像I上滑动,每滑动一上滑动,每滑动一次就以滑块遮住的部分作为参数次就以滑块遮住的部分作为参数x调用函数调用函数fun。由于由于fun即为上述定义的内联函数,因此新产生的图即为上述定义的内联函数,因此新产生的图像像nI中除边界外,每个像素都是图像中除边界外,每个像素都是图像I中某中某3行行3列图列图像块的均值。像块的均值。函数函数nfilter在边界处用在边界处用0填补。填补。27学习

24、课件2.3.2 Matlab2.3.2 Matlab邻域操作函数邻域操作函数l调用函数调用函数nlfilter时,如果参数时,如果参数FUN 有参数,则需要使用有参数,则需要使用下面格式:下面格式:nI = nlfilter(I,M N,FUN,P1,P2,.)l其中,其中,P1,P2,.为函数为函数FUN的实参,把值传入函数体中。的实参,把值传入函数体中。l【例】若已有函数定义:【例】若已有函数定义:function r = myfun(t,p1,p2)r = mean(mean(t).*p1 + p2;则可设计如下程序:则可设计如下程序:I = imread(shizi.bmp);I =

25、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,);28学习课件2.3.2 Matlab2.3.2 Matlab邻域操作函数邻域操作函数lcolfilt函数与函数与nlfilter函数的主要区别有:函数的主要区别有:colfilt函数在处理图像时,先把滑动块遮住的图像块函数在处理图像时,先把滑动块遮住的图像块排成一个列向量,处理之后再恢复成图像块。排成一个列向量

26、,处理之后再恢复成图像块。nlfilter函数采取逐像素滑动的方式,函数采取逐像素滑动的方式,colfilt函数在移函数在移动的时候可以选择:动的时候可以选择:lsliding:逐像素滑动:逐像素滑动ldistinct:逐图像块滑动,滑动时图像块互不重叠。:逐图像块滑动,滑动时图像块互不重叠。29学习课件2.3.2 Matlab2.3.2 Matlab邻域操作函数邻域操作函数l【例】【例】使用使用colfilt函数进行图像邻域操作(逐函数进行图像邻域操作(逐像素)像素)若已有函数定义:若已有函数定义:function r = myfun(x,p1,p2)r = mean(x).*p1 + p2

27、;则可设计如下程序:则可设计如下程序: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,)30学习课件2.3.2 Matlab2.3.2 Matlab邻域操作函数邻域操作函数l【例】【例】使用使用colfilt函数进行图像邻域操作(逐图像块)函数进行图像邻域操作(逐图像块)若已有函数定义:若已有函

28、数定义:function r = myfun(x,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,)31学习课件2

29、.3.2 Matlab2.3.2 Matlab邻域操作函数邻域操作函数lblkproc函数是专门进行分块操作的函数函数是专门进行分块操作的函数若已有函数定义:若已有函数定义: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;n

30、I = blkproc(I,m n,fun,m,n,p1,p2);figure(1),subplot(1,2,2), imshow(nI,)32学习课件2.3.2 Matlab2.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

31、0; 0 0 0 0 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(压缩图像压缩图像);33学习课件2.4 图像区域选取l块选取函数imcrop函数:矩形区域选取函数:矩形区域选取Roipoly函数:函数:可以完成各种多

32、边形块的选取功能,可以完成各种多边形块的选取功能,返回结果是一个与输入图像一样大小的二值图像。返回结果是一个与输入图像一样大小的二值图像。 l曲线围成的区域在在计计算算机机中中没没有有严严格格的的连连续续曲曲线线,所所有有的的曲曲线线都都是是多多边边形形。所所以以可可以以用用roipoly函函数数选选取取近近似似的的曲曲边边区区域。域。34学习课件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 3

33、68 ;BW = roipoly(I,C1,C2);B = double(BW).*256;nI = (I + B);figure(1),subplot(1,2,2),imshow(nI,m)35学习课件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)

34、,subplot(1,2,2),imshow(nI,m)36学习课件2.5 图像增强l图像增强是对图像进行操作,得到视觉图像增强是对图像进行操作,得到视觉效果更好或者更有用的新图像。效果更好或者更有用的新图像。狭义上的图像增强就是加强或减弱灰度图像狭义上的图像增强就是加强或减弱灰度图像的明暗对比度(的明暗对比度(将亮度的最大值和最小值之比称为对比度)。)。广义上的图像增强除了对灰度图像进行增强广义上的图像增强除了对灰度图像进行增强外,还包括彩色图像增强等。外,还包括彩色图像增强等。37学习课件2.5.1 灰度调整l灰度调整:灰度调整:增加明暗对比度的一种常用方法是灰度调整增加明暗对比度的一种常

35、用方法是灰度调整方法。方法。灰度调整方法是基于灰度直方图的一种图像灰度调整方法是基于灰度直方图的一种图像增强方法。增强方法。所谓灰度直方图就是灰度图像的灰度值统计所谓灰度直方图就是灰度图像的灰度值统计图,如下例所示:图,如下例所示:38学习课件2.5.1 灰度调整l【例例】统计某幅图像的灰度信息,即计算图像中统计某幅图像的灰度信息,即计算图像中0-255种灰度级各种灰度级各自的像素点个数。自的像素点个数。I = imread(pout.tif);figure(1),subplot(1,2,1),imshow(I)nI = floor(double(I);m,n = size(nI);H = z

36、eros(256);for i = 1:m for j = 1:n k = nI(i,j); H(k+1)=H(k+1)+1; endendfigure(1),subplot(1,2,2),bar(H)39学习课件2.5.1 灰度调整l【例例】按线性灰度变换规则,增强图像的明暗对比度。按线性灰度变换规则,增强图像的明暗对比度。I = imread(pout.tif);I = double(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)

37、;for i=1:m for j=1:n if nI(i,j)nb nI(i,j)=nb; end endendsubplot(1,2,1),imshow(I,)subplot(1,2,2),imshow(nI,)40学习课件2.5.1 灰度调整41学习课件2.5.1 灰度调整42学习课件2.5.1 灰度调整43学习课件2.5.1 灰度调整44学习课件2.5.2 灰度调整函数l在在Matlab中,与灰度调整相关的函数主要有:中,与灰度调整相关的函数主要有:imadjustl用于将图像的灰度值调整到指定的范围。用于将图像的灰度值调整到指定的范围。stretchliml用来计算灰度图像的最佳输入区

38、间的。所谓最佳就是按照用来计算灰度图像的最佳输入区间的。所谓最佳就是按照该区间输入,图像灰度的对比度最大。该区间输入,图像灰度的对比度最大。histeql用于自动完成图像灰度调整,使得调整后图像的灰度直方用于自动完成图像灰度调整,使得调整后图像的灰度直方图趋于均衡化。图趋于均衡化。brightenl用来改变显示灰度图像时的亮度,但并不改变原始图像自用来改变显示灰度图像时的亮度,但并不改变原始图像自身的灰度。身的灰度。45学习课件2.5.2 灰度调整函数limadjust函数的一般调用格式为:函数的一般调用格式为:nI=imadjust(I,low_in high_in,low_out high

39、_out,gamma)其中其中:low_in high_in:l用来限制输入范围,且取值范围落在用来限制输入范围,且取值范围落在0,1区间。区间。l例如,若例如,若low_in=0.2,则表示最小的输入灰度值为,则表示最小的输入灰度值为255*0.2。low_out high_out:l用来限制输出范围,且取值范围落在用来限制输出范围,且取值范围落在0,1区间区间gamma:l用来说明是否指数变换时的指数值。缺省时,用来说明是否指数变换时的指数值。缺省时,gamma=1,表示线性变换,表示线性变换46学习课件2.5.2 灰度调整函数l【例例】使用使用imadjust函数对图像进行灰度调整函数对

40、图像进行灰度调整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的值,观察结果。的值,观察结果。47学习课件2.5.2 灰度调整函数l【例】使用函数【例】使用函数imadjust对对RGB彩色图像进行颜色调整。彩色图像进行颜色调整。I =

41、 imread(peppers.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) 48学习课件2.5.2 灰度调整函数lstretchlim函数的一般调用格式为:函数的一般调用格式为:LOW_HIGH = stretchlim(I,TOL)LOW_HIGH = stretchlim(I,TOL) returns a pair of intensities that can be used by imadjust to

42、increase 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

43、%. 如果如果 TOL = 0, 则则LOW_HIGH = min(I(:) max(I(:).49学习课件2.5.2 灰度调整函数l【例例】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,)l【例例】I = imread(peppers.png);nI = imadjust(I, stretchlim(I);figure(1),subplot(1,2,1), imshow(I) figure(1)

44、, subplot(1,2,2), imshow(nI) 50学习课件2.5.2 灰度调整函数lhisteq用于自动完成图像灰度调整,使得调整后图像的灰用于自动完成图像灰度调整,使得调整后图像的灰度直方图趋于均衡化。度直方图趋于均衡化。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);5

45、1学习课件2.5.2 灰度调整函数lbrighten用来改变显示灰度图像时的亮度,但并不改变原始用来改变显示灰度图像时的亮度,但并不改变原始图像自身的灰度。图像自身的灰度。它的一般调用格式为:它的一般调用格式为:brighten(beta)l【例例】I = imread(tire.tif);figure(1),imshow(I);figure(2),imshow(I);brighten(0.75);%函数函数brighten通常放在通常放在imshow之后,请思考为什么。之后,请思考为什么。52学习课件2.6 图像滤波l滤波是一种应用广泛的图像处理技术,可以通滤波是一种应用广泛的图像处理技术,

46、可以通过滤波来强调或删除图像的某些特征。过滤波来强调或删除图像的某些特征。l滤波是一种邻域操作,即处理后的图像每个象滤波是一种邻域操作,即处理后的图像每个象素值是原来该象素周围的颜色值经过某种计算素值是原来该象素周围的颜色值经过某种计算得到的。得到的。l2.3节介绍的图像邻域操作就是一种图像滤波。节介绍的图像邻域操作就是一种图像滤波。本节进一步地介绍和分析滤波技术。本节进一步地介绍和分析滤波技术。滤波函数滤波函数imfilterimfilter滤波器的定义滤波器的定义53学习课件2.6.1 图像滤波函数l函数函数imfilter是是Matlab中使用较多的滤波函数,基本调用格式为:中使用较多的

47、滤波函数,基本调用格式为:nI = imfilter(I,H,OPTION)l其中其中:I为要进行滤波的图像矩阵,可以为多维的彩色图像矩阵(数组);为要进行滤波的图像矩阵,可以为多维的彩色图像矩阵(数组);H是已经定义的滤波算子。是已经定义的滤波算子。imfilter函数本身也是基于邻域滑动设计实现的,所以也涉及到边界如何函数本身也是基于邻域滑动设计实现的,所以也涉及到边界如何填补的问题。如果调用时省略填补的问题。如果调用时省略OPTION参数,则默认以参数,则默认以0填补边界。填补边界。参数参数OPTION可以选择边界填补参数:可以选择边界填补参数:lreplicate:将边界内的值复制到边

48、界处。:将边界内的值复制到边界处。lsymmetric:将边界内的值通过镜像对称反射方法填补到边界处。:将边界内的值通过镜像对称反射方法填补到边界处。lcircular:把图像看成是一个二维周期函数来实现边界的填补。:把图像看成是一个二维周期函数来实现边界的填补。54学习课件2.6.1 图像滤波函数l【例例】I = imread(football.jpg); h = ones(3,3)/9; % 均值滤波均值滤波nI1 = imfilter(I,h);nI2 = imfilter(I,h,replicate); nI3 = imfilter(I,h,symmetric); nI4 = imfi

49、lter(I,h,circular); figure(1),imshow(I), title(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) 55学习课件2.6.1 图像滤波函数l与与nlfilter不同的是,不同的是,imf

50、ilter函数不需要定义操作函数不需要定义操作函数。函数。l被滑动块(或称滤波器)遮盖的图像块与滑动块被滑动块(或称滤波器)遮盖的图像块与滑动块之间进行何种操作,取决于参数之间进行何种操作,取决于参数OPTION:corr:相关运算。缺省时,默认为:相关运算。缺省时,默认为corr。l滤波后,某像素点的值通常是某图像块与滑动块(或称滤波器)滤波后,某像素点的值通常是某图像块与滑动块(或称滤波器)的的对应元素对应元素相乘之后再取总和。相乘之后再取总和。conv:卷积运算:卷积运算l滤波后,某像素点的值通常是某图像块与滑动块(或称滤波器)滤波后,某像素点的值通常是某图像块与滑动块(或称滤波器)的的

51、首尾呼应的元素首尾呼应的元素相乘之后再取总和得到。相乘之后再取总和得到。56学习课件2.6.1 图像滤波函数l【例例】验证验证corrl假定已有函数定义:假定已有函数定义:function r = myfun(t,h) r = sum(sum(t.*h);l则可验证则可验证nI1=nI2I =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); nI2 = floor(nI2); sum(sum(nI1-nI2) 57学

52、习课件2.6.1 图像滤波函数l【例例】验证验证convl假定已有函数定义:假定已有函数定义:function r = myfun(t,h) t = t(:); h = h(:); len = length(h); v = zeros(len,1); for i=1:len v(i) = t(i).*h(len-i+1); end r = sum(v);l则可验证则可验证nI1=nI2I =floor(256*randn(8,8);fun = myfun;h = randn(3,3);nI1 = nlfilter(I,3 3,fun,h); nI1 = floor(nI1);nI2 = imf

53、ilter(I,h,conv); nI2 = floor(nI2); sum(sum(nI1-nI2) 58学习课件2.6.1 图像滤波函数l【例例】滤波算子不同,滤波后的效果会有很大的不同。滤波算子不同,滤波后的效果会有很大的不同。I = rgb2gray(imread(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 0 -1 2 0 -2 1 0 -1; h3 = 0.1667 0.6667 0.1667 0.6667 -3.

54、3333 0.6667 0.1667 0.6667 0.1667; 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(拉普拉斯滤波拉普拉斯滤波)59学习课件2.6.2 滤波器的定义l可以利用可

55、以利用Matlab提供的提供的fspecial函数产生相应的线性滤波算子。函数产生相应的线性滤波算子。l函数函数fspecial的一般调用格式为:的一般调用格式为:fspecial(T,P)l其中:其中:参数参数P为辅助说明参数为辅助说明参数参数参数T的取值可以为:的取值可以为:l average 均值滤波器均值滤波器ldisk 圆形均值滤波器圆形均值滤波器l motion 运动滤波器运动滤波器lgaussian 高斯低通滤波器高斯低通滤波器l laplacian 二维拉普拉斯滤波器二维拉普拉斯滤波器l log 高斯拉普拉斯滤波器高斯拉普拉斯滤波器lprewitt Prewitt水平边缘增强滤

56、波器水平边缘增强滤波器l sobel Sobel水平边缘增强滤波器水平边缘增强滤波器 滤波器的设计,滤波器的设计,可以根据不断的实验探索可以根据不断的实验探索也可以根据数学原理产生。也可以根据数学原理产生。60学习课件2.6.2 滤波器的定义l如果对邻域内像素的计算为线性运算,那么对应的滤如果对邻域内像素的计算为线性运算,那么对应的滤波操作则称为线性滤波。函数波操作则称为线性滤波。函数imfilter是一个线性滤波是一个线性滤波函数。它采用的滤波器也常被称为线性滤波器,或线函数。它采用的滤波器也常被称为线性滤波器,或线性滤波算子。性滤波算子。l非线性滤波也是基于邻域操作的,但是不象线性滤波非线

57、性滤波也是基于邻域操作的,但是不象线性滤波那样,滤波器与对应元素相乘然后相加。非线性滤波那样,滤波器与对应元素相乘然后相加。非线性滤波不再用线性组合的方法得到新的元素,使用的是可能不再用线性组合的方法得到新的元素,使用的是可能统计的方法或非线性组合的方法。统计的方法或非线性组合的方法。【例例】排序取中值操作就是一种非线性滤波操作排序取中值操作就是一种非线性滤波操作fun = inline(median(x(:);B = nlfilter(A1,3 3,fun);61学习课件2.6.2 滤波器的定义lMatlab提供了函数提供了函数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,)62学习课件2.6.2 滤波器的定义63学习课件思考题l课后习题课后习题l选取编程题做上机练习选取编程题做上机练习64学习课件

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号