文档介绍:第十讲图像运算(二)
【目录】
一、领域操作 1
1、概述 1
2、滑动领域操作 1
3、分离领域操作 4
二、区域操作 7
1、区域选择 7
2、区域操作 9
三、图像统计 12
1、象素选择 12
2、强度描述图 12
3、图像轮廓图 14
4、图像柱状图 15
【正文】
一、领域操作
1、概述
邻域运算-输出G的像素值取决于输入F的像素值及其某个邻域内的像素值。
领域大小-邻域是一个远小于图像尺寸、形状规则的像素块,例2×2、3×3的正方形,或用来近似表示圆及椭圆等形状的多边形。一幅图像所定义的所有邻域应大小相同。
邻域类型-滑动邻域操作、分离邻域操作。
2、滑动领域操作
(1) 方式
该操作一次处理一个像素,输出图像的每一个像素都是通过对输入图像某邻域内的像素值采用某种代数运算得到的。右图说明了一个6×5矩阵中3个元素的2×3滑动邻域,每一个邻域的中心像素都用一个黑点标出。
(2) 中心像素
是输入图像真正要进行处理的像素。如果邻域含有奇数行和列,那么中心像素就是邻域的真实中心;如果行或列有一维为偶数,那么中心像素将位于中心偏左或偏上方。表示为:
floor(([m,n]+1)/2)
例如,在一个2×2的邻域中,中心像素就是左上方的像素,而右上图所示的2×3邻域的中心像素为(1,2),即位于邻域中第二列、第一行的像素。
(3) 实现步骤
* 选择原图一个像素
* 确定该像素的邻域
* 用一个函数对邻域内的像素求值并返回标量结果
* 在输出图像对应的位置填入计算值
* 重复计算,遍及所有象素
(4) nlfilter滑动领域操作函数
【格式】B=nlfilter(A,[m n],fun)
【说明】A为输入图像,B为输出图像,领域尺寸为m×n,fun为运算函数
【其它】mean -求向量的平均值, mean2-求矩阵的平均值
std -求向量的的标准差,std2 -求矩阵的标准差。
median-求向量的中值
max -求向量的最大值
min -求向量的最小值
var -求向量的方差
可以用inline自定义函数。
【例】用函数mean作滑动处理
CLF
I=imread('');
I2=nlfilter(I,[5 5],'mean2');
subplot(121),imshow(I,[]);
subplot(122),imshow(I2,[]);
【例】用自定义函数作滑动处理
CLF
I=imread('');
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',指定该函数作滑动领域操作。
这种操作称为列处理,加快操作速度。
【例】快速滑动领域操作
CLF
I=imread('');
I2=colfilt(I,[5 5],'sliding','mean');
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')-列重构图像
【例】用列操作函数实现滑动
CLF
I=imread('');
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,[]);
subplot(122),imshow(I2,[]);
3、分离领域操作
(1) 方式
分离邻域操作
也称图像的块操作。将矩阵划分为m×n后得到矩形。分离邻域从左上角开始覆盖整个矩阵,邻域之间没有重叠部分。如果分割的邻域不能很好地适应图像的大小,那么需要为图像进行零填充。
右图说明了一个被划分为9个4×8邻域的11×22矩阵,零填充过程将数值0添加到图像矩阵所需的底部和右边,此时图像矩阵大小变为12×24。
(2) blkproc图像块操作函数
【格式】B=bl