收藏 分享(赏)

matlab图像运算(二)15p.doc

上传人:马心欣 文档编号:21453990 上传时间:2023-11-27 格式:DOC 页数:15 大小:1.57MB
下载 相关 举报
matlab图像运算(二)15p.doc_第1页
第1页 / 共15页
matlab图像运算(二)15p.doc_第2页
第2页 / 共15页
matlab图像运算(二)15p.doc_第3页
第3页 / 共15页
亲,该文档总共15页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第十五讲 图像运算(二)【目录】一、领域操作11、概述12、滑动领域操作13、分离领域操作4二、区域操作71、区域选择72、区域操作9三、图像统计121、象素选择122、强度描述图123、图像轮廓图144、图像柱状图15【正文】一、领域操作1、概述邻域运算输出G的像素值取决于输入F的像素值及其某个邻域内的像素值。领域大小邻域是一个远小于图像尺寸、形状规则的像素块,例22、33的正方形,或用来近似表示圆及椭圆等形状的多边形。一幅图像所定义的所有邻域应大小相同。邻域类型滑动邻域操作、分离邻域操作。2、滑动领域操作(1) 方式该操作一次处理一个像素,输出图像的每一个像素都是通过对输入图像某邻域内的像

2、素值采用某种代数运算得到的。右图说明了一个65矩阵中3个元素的23滑动邻域,每一个邻域的中心像素都用一个黑点标出。(2) 中心像素是输入图像真正要进行处理的像素。如果邻域含有奇数行和列,那么中心像素就是邻域的真实中心;如果行或列有一维为偶数,那么中心像素将位于中心偏左或偏上方。表示为:floor(m,n+1)/2)例如,在一个22的邻域中,中心像素就是左上方的像素,而右上图所示的23邻域的中心像素为(1,2),即位于邻域中第二列、第一行的像素。(3) 实现步骤* 选择原图一个像素* 确定该像素的邻域* 用一个函数对邻域内的像素求值并返回标量结果* 在输出图像对应的位置填入计算值* 重复计算,遍

3、及所有象素(4) nlfilter滑动领域操作函数【格式】B=nlfilter(A,m n,fun)【说明】A为输入图像,B为输出图像,领域尺寸为mn,fun为运算函数【其它】mean 求向量的平均值, mean2求矩阵的平均值 std 求向量的的标准差,std2 求矩阵的标准差。 median求向量的中值 max 求向量的最大值 min 求向量的最小值 var 求向量的方差可以用inline自定义函数。【例】用函数mean作滑动处理CLFI=imread(tire.tif);I2=nlfilter(I,5 5,mean2);subplot(121),imshow(I,);subplot(12

4、2),imshow(I2,); 【例】用自定义函数作滑动处理CLFI=imread(tire.tif);f=inline(max(x(:);I2=nlfilter(I,3 3,f);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(I2); (5) colfilt快速领域操作函数【格式】B=colfilt(A,m n,sliding,fun)【说明】多一个参数sliding,指定该函数作滑动领域操作。这种操作称为列处理,加快操作速度。【例】快速滑动领域操作CLFI=imread(tire.tif);I2=colfilt(I,5 5,sliding,m

5、ean);subplot(121),imshow(I,);subplot(122),imshow(I2,); (6) im2col、col2im列操作函数【格式】B=im2col(A,m n,sliding)图像排成列 B=col2im(A,m n,mm,nn,sliding)列重构图像【例】用列操作函数实现滑动CLFI=imread(ic.tif);I1=im2col(I,3 3,sliding);I1=uint8(0 -1 0 -1 4 -1 0 -1 0*double(I1);I2=col2im(I1,3,3,size(I),sliding);subplot(121),imshow(I,

6、);subplot(122),imshow(I2,); 3、分离领域操作(1) 方式分离邻域操作也称图像的块操作。将矩阵划分为mn后得到矩形。分离邻域从左上角开始覆盖整个矩阵,邻域之间没有重叠部分。如果分割的邻域不能很好地适应图像的大小,那么需要为图像进行零填充。右图说明了一个被划分为9个48邻域的1122矩阵,零填充过程将数值0添加到图像矩阵所需的底部和右边,此时图像矩阵大小变为1224。(2) blkproc图像块操作函数【格式】B=blkproc(A,m n,fun)【说明】与滑动操作不同的是整块操作。【例】图像块操作CLFI=imread(tire.tif);f=inline(mean

7、2(x)*ones(size(x);I2=blkproc(I,8 8,f);subplot(1,2,1),imshow(I,)subplot(1,2,2),imshow(I2,) (3) colfilt快速块操作函数【格式】B=colfilt(A,m n,distinct,fun)【说明】参数distinct,说明该函数作快速块操作。【例】快速块操作CLFI=imread(tire.tif);f=inline(ones(64,1)* mean(x);I2=colfilt(I,8 8,distinct,f);subplot(1,2,1),imshow(I,)subplot(1,2,2),imsh

8、ow(I2,) (4) im2col、col2im列操作函数【格式】B=im2col(A,m n,distinct)图像排成列 B=col2im(A,m n,mm,nn,distinct)列重构图像【例】用列操作函数实现块操作CLFI=imread(tire.tif);I1=im2col(I,8 8,distinct);I1=ones(64,1)* mean(I1);I2=col2im(I1,8,8,size(I),distinct);subplot(121),imshow(I,);subplot(122),imshow(I2,); 二、区域操作要对特定的区域进行处理时,要定义我们感兴趣的区域

9、。Matlab中,对这个区域的定义通过一个二值图像(与原始图像大小相等)来实现。称为mask图像。所要选定的区域,在相应的mask图中值为1,否则为0。1、区域选择(1) 多边形选择法。用roipoly函数来设置一个多边形区域。【格式】BW = roipoly(I,c,r)【说明】用矢量c、r来指定多边形各定点的x、y坐标【格式】BW = roipoly(I)【说明】交互选择多边形【例】选择区域CLFI=imread(eight.tif);c=222 272 300 270 221 194;r=21 21 75 121 121 75;BW=roipoly(I,c,r);subplot(121)

10、,subimage(I);subplot(122),subimage(BW); (2) 灰度选择法。用roicolor函数可以实现安灰度选择区域。【格式】BW = roicolor(A,low,high)【说明】指定灰度范围,返回掩模mask图像【格式】BW = roicolor(A,v)【说明】按向量v指定的灰度,返回掩模mask图像【例】灰度选择法CLFI=imread(rice.tif);BW=roicolor(I,128,255);subplot(121),subimage(I);subplot(122),subimage(BW); (3) 矩阵产生法。用矩阵构造的方法选择区域。【例】

11、灰度选择法CLFI=imread(rice.tif);% BW=zeros(size(I);% BW(100:150,50:140)=1;BW=I150;subplot(121),subimage(I);subplot(122),subimage(BW); 2、区域操作(1) 区域运算可以利用mask函数,进行区域图像的叠加。【例】区域图像叠加I1=double(imread(rice.tif);I2=double(imread(tire.tif);I2=imresize(I2,size(I1),bicubic);BW=zeros(size(I);BW(100:200,50:200)=1;I3

12、=I1.*BW + I2.*(1-BW);subplot(221),imshow(I1,);subplot(222),imshow(I2,);subplot(223),imshow(BW,);subplot(224),imshow(I3,); (2) 区域滤波Matlab提供roifilt2函数实现对指定区域的滤波或处理。【格式】J=roifilt2(h,I,BW)【说明】h为滤波器,I输入图像,BW指定区域,J输出图像。【例】对指定区域进行锐化CLFI=imread(eight.tif);c=222 272 300 270 221 194;r=21 21 75 121 121 75;BW=r

13、oipoly(I,c,r);h=fspecial(unsharp); % 滤波函数J=roifilt2(h,I,BW);subplot(121),subimage(I);subplot(122),subimage(J); 【格式】J=roifilt2(I,BW,fun)【说明】用fun函数对指定区域进行运算【例】对指定区域进行运算CLFI=imread(eight.tif);c=222 272 300 270 221 194;r=21 21 75 121 121 75;BW=roipoly(I,c,r);f=inline(uint8(abs(double(x)-100);J=roifilt2(

14、I,BW,f);subplot(121),subimage(I);subplot(122),subimage(J); (3)区域填充Matlab用函数roifill函数实现对指定区域的填充,填充的值为多边形边界点的灰度平滑值。相当于擦除。【格式】J=roifill(I,c,r) J=roifill(I) J=roifill(I,BW)【例】CLFI=imread(eight.tif);c=222 272 300 270 221 194;r=21 21 75 121 121 75;J=roifill(I,c,r);subplot(121),subimage(I);subplot(122),sub

15、image(J); 三、图像统计1、象素选择【格式】pixval on 显示象素值 pixval off关闭象素值显示【说明】该函数用于在图像上交互显示象素值和两点间的距离【格式】P=IMPIXEL交互返回选择点的象素值 P=IMPIXEL(I,C,R) P=IMPIXEL(X,MAP,C,R) 返回指定点的象素值 P=IMPIXEL(RGB,C,R) C,R,P=IMPIXEL(.) 返回坐标和象素值【例】返回真彩图像上三个点的色度RGB = imread(flowers.tif);c = 12 146 410;r = 104 156 129;pixels = impixel(RGB,c,r

16、) pixels = 61 59 101 253 240 0 237 37 44 2、强度描述图【格式】improfile交互获取强度描述图 improfile(I,x,y)指定路径的强度描述图【例】灰度图的强度描述CLFI = imread(alumgrns.tif);x = 35 338 346 103;y = 253 250 17 148;improfile(I,x,y), grid on 【例】彩色图的强度描述CLFI = imread(flowers.tif);x = 35 338 346 103;y = 253 250 17 148;improfile(I,x,y), grid on 3、图像轮廓图【格式】imcontour(I,N)轮廓层数【例】I = imread(ic.tif);imcontour(I,3) 4、图像柱状图【格式】imhist(I,N)N指灰度级【例】I = imread(ic.tif);imhist(I,64) 15-15

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 其他相关文档

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报