资源描述:
《第10讲 图像运算(二)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、第十讲图像运算(二)目录§10.1、领域操作21、概述22、滑动领域操作23、分离领域操作5§10.2、区域操作81、区域选择82、区域操作10§10.3、图像统计131、象素选择132、强度描述图133、图像轮廓图154、图像柱状图16图像运算(二)-16-§10.1、领域操作1、概述邻域运算-输出G的像素值取决于输入F的像素值及其某个邻域内的像素值。领域大小-邻域是一个远小于图像尺寸、形状规则的像素块,例2×2、3×3的正方形,或用来近似表示圆及椭圆等形状的多边形。一幅图像所定义的所有邻域应
2、大小相同。邻域类型-滑动邻域操作、分离邻域操作。2、滑动领域操作(1)方式该操作一次处理一个像素,输出图像的每一个像素都是通过对输入图像某邻域内的像素值采用某种代数运算得到的。右图说明了一个6×5矩阵中3个元素的2×3滑动邻域,每一个邻域的中心像素都用一个黑点标出。(2)中心像素图像运算(二)-16-是输入图像真正要进行处理的像素。如果邻域含有奇数行和列,那么中心像素就是邻域的真实中心;如果行或列有一维为偶数,那么中心像素将位于中心偏左或偏上方。表示为:floor(([m,n]+1)/2)例如,
3、在一个2×2的邻域中,中心像素就是左上方的像素,而右上图所示的2×3邻域的中心像素为(1,2),即位于邻域中第二列、第一行的像素。(3)实现步骤选择原图一个像素确定该像素的邻域用一个函数对邻域内的像素求值并返回标量结果在输出图像对应的位置填入计算值重复计算,遍及所有象素(4)nlfilter滑动领域操作函数【格式】B=nlfilter(A,[mn],fun)【说明】A为输入图像,B为输出图像,领域尺寸为m×n,fun为运算函数【其它】mean-求向量的平均值,mean2-求矩阵的平均值std-求
4、向量的的标准差,std2-求矩阵的标准差。median-求向量的中值max-求向量的最大值min-求向量的最小值var-求向量的方差可以用inline自定义函数。【例】用函数mean作滑动处理CLFI=imread('tire.tif');I2=nlfilter(I,[55],'mean2');subplot(121),imshow(I,[]);subplot(122),imshow(I2,[]);图像运算(二)-16-【例】用自定义函数作滑动处理CLFI=imread('tire.tif');
5、f=inline('max(x(:))');I2=nlfilter(I,[33],f);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(I2);(5)colfilt快速领域操作函数【格式】B=colfilt(A,[mn],'sliding',fun)【说明】多一个参数'sliding',指定该函数作滑动领域操作。这种操作称为列处理,加快操作速度。【例】快速滑动领域操作CLFI=imread('tire.tif');I2=colfilt(I,[55],
6、'sliding','mean');subplot(121),imshow(I,[]);subplot(122),imshow(I2,[]);图像运算(二)-16-(6)im2col、col2im列操作函数【格式】B=im2col(A,[mn],'sliding')-图像排成列B=col2im(A,[mn],[mm,nn],'sliding')-列重构图像【例】用列操作函数实现滑动CLFI=imread('ic.tif');I1=im2col(I,[33],'sliding');I1=uint8
7、([0-10-14-10-10]double(I1));I2=col2im(I1,[3,3],size(I),'sliding');subplot(121),imshow(I,[]);subplot(122),imshow(I2,[]);3、分离领域操作(1)方式分离邻域操作也称图像的块操作。将矩阵划分为m×n后得到矩形。分离邻域从左上角开始覆盖整个矩阵,邻域之间没有重叠部分。如果分割的邻域不能很好地适应图像的大小,那么需要为图像进行零填充。图像运算(二)-16-右图说明了一个被划分为9个4×8
8、邻域的11×22矩阵,零填充过程将数值0添加到图像矩阵所需的底部和右边,此时图像矩阵大小变为12×24。(2)blkproc图像块操作函数【格式】B=blkproc(A,[mn],fun)【说明】与滑动操作不同的是整块操作。【例】图像块操作CLFI=imread('tire.tif');f=inline('mean2(x)ones(size(x))');I2=blkproc(I,[88],f);subplot(1,2,1),imshow(I,[])subplot(1,2,2),imshow(I2