连接分量,连接集,孔洞,前景点,背景点。
1、提取区域以及边界的函数:
bwlabel函数可以找出一幅图像中所有的连接分量(区域)
[L,num]=bwlabel(f,conn)
f是输入图像,conn指定期望的连接性(4连接或8连接,后者是默认值)
num是所找到的连接分量数,L是标记矩阵,它给每个连接分量分配区间[1,num]内的一个唯一整数。
g=bwperim(f,conn)
该图像仅包含所有区域的边界像素。
函数bwboundaries提取二值图像f中所有区域的真实坐标。
B=bwboundaries(f,conn,options)
Options为‘holes’和‘noholes’使用第一个值的时候,提取区域和孔洞的边界,也可以提取包含嵌套区域(父区域和子区域)的区域边界。使用第二个值仅提取区域及其子区域的边界。(找到的边界是顺时针的,如果想让边界是逆时针的,b=flipud(b) )
输出B是一个P*1的单元数组,其中P是物体(或孔洞)。单元数组中的每个单元包含一个np*2矩阵,该矩阵的行是边界像素的行和列坐标,np是边界像素数目。
自定义函数bound2im()可以把边界b转换为二值图像
g=bound2im(b,M,N)
在b中坐标为1,在背景处为0。
b8=bound2eight(b) 从边界b中删除4连接的像素,保留8连接的像。要求b是闭合的、按照顺时针方向或者逆时针方向顺序排序的连接像素集合。
b4=bound2four(b) 在存在对角连接的位置,该函数都插入新边界像素,从而产生4连接像素的输出边界。
[s,su]=bsubsamp(b,gridsep)
在一个网格上对边界做子取样,网格的行由gridsep个像素隔开。
z=connectpoly(s(:,1),s(:,2)) 重新连接子取样的点。
gB=imfill(fB,locations,conn)
从locations指定的点开始,对输入二值图像fB的背景像素执行填充操作(即将背景像素的值设为)locations可以是一个nL*2的向量,每行包含一个起始位置的二维坐标。
gB=imfill(Fb,conn,‘holes’)
填充输入二值图像中的孔洞。
g=imfill(fI,conn)
填充输入灰度图像fI中的孔洞,孔洞是被较亮像素包围的暗像素区域。
自定义的一些M函数:
b是一个np*2的数组,每行表示一个点的坐标。
工具箱函数intline()计算连接两点的一条直线的整数坐标。
[x,y]=intline(x1,x2,y1,y2)
(x1,y1)和(x2,y2)分别是两个待连接点的整数坐标。输出x和y是列向量。包含连接两点的一条直线的x和y坐标。
2、表示:
链码通过一个指定长度与方向的直线段的连接序列来表示一个编号方案加以编码,如图
典型情况下,这一表示建立在线段的4连接或者8连接之上。每条线段的方向通过一个编号方案加以编码,基于这种方式的链码称为Freeman链码。一条边界的链码取决于起点。然而,代码可以通过将起点处理为方向数的循环序列和重新定义起点的方法进行归一化,因此,产生的数字序列形成一个最小幅值的整数。有一个函数fchcode,该函数计算一个保存在数组b中的np*2个已排序边界点集的Freeman链码。
c=fchcode(b,conn,dir)
c是包含一些字段的一个结构。Conn指定连接性。Dir指定输出链码的方向
‘same’代表与b中点的方向相同。’reverse’为相反,默认为’same’。
3、使用多边形近似图像边界:最小周长多边形。(MPP)
适用情形:近似边界
计算MPP的M函数:
由自定义函数im2minperpoly实现。
[X,Y,R]=im2minperpoly(f,cellsize)
f是一幅包含单一区域边界或边界的输入二值图像,cellsize指定细胞组合体用于包围边界的方形单元的大小。列向量X和Y包含MPP顶点的x和y坐标。输出R是一幅由细胞组合体包围的区域的二值图像。
4、标记:
标记是边界的以为表示,最简单的方法是作为角度的函数画出从一个内点(例如质心)到边界的距离,其基本概念是将边界简化为一个一维函数。
附录中的signature()函数可以用来寻找边界的标记。
[dist,angle]=signature(b,x0,y0)
b是一个np*2数组,它的行包含按顺时针或逆时针方向排列的边界点的x和y坐标。在输入中,(x0,y0)是一个点的坐标,测量该点到边界的距离。默认使用改变边界的质心坐标
signature中使用cart2pol()把笛卡尔坐标转换为极坐标。
[THETA,RHO]=cart2pol(X,Y)
Pol2cart将极坐标转换为笛卡尔坐标系。
[X,Y]=pol2cart(THETA,RHO)
5、边界线段
骨骼:
表示一个平面区域的结构形状的一种重要方法是把它简化为图形。这种简化可以通过一种细化(骨骼化)得到该区域的骨骼来实现。
工具箱中的bwmorph产生二值图像B中所有区域的骨骼,所用到的语法为:
s=bwmorph(B,’skel’,Inf) 该函数删除物体边界上的像素,但不允许物体断开。
s1=bwmorph(s,’spur’,n) 对骨骼化后的结果去除n次刺状突起。
6、边界描绘子
(1)边界的长度是最简单的描绘子之一
4连接边界的长度定义为边界上的像素数-1,8连接边界中将垂直和水平过度记为1,而将对角过渡记为根2.
函数bwperim可以用来提取包含在图像中的物体的边界。
G=bwperim(f,conn)
G为包含f中物体边界的二值图像,背景像素必须为0,边界像素不为0,且至少与另一个非零像素连接。
也可以使用直径等作为描绘子
自定义函数diameter()可以计算边界或者区域的直径、长轴、短轴和基本矩形。
S=diameter(L)
L是一个标记矩阵,S是一个结构。
计算形状数。
傅里叶描绘子:
对边界采样得到一系列坐标值
S(k)=[x(k),y(k)]
也可以
S(k)=x(k)+j*y(k)
s(k)的离散傅里叶变换(DFT)为a(u)
a(u)称为是边界的傅里叶描绘子,通过a(u)的傅里叶反变换可以重建s(k)。
自定义函数frdescp计算傅里叶描绘子,ifrelescp使用给定的一组傅里叶描绘子计算其反变换,得到一条封闭的空间曲线(边界)。
Z=fredescp(s)
S=ifrelescp(z,nd)
nd是使用的z中傅里叶描述子的数目。
适用情形:
重建边界
统计矩:
对于一条边界,先把线段的两个端点连接起来,形成一个长轴,然后使用x2majoraxis函数使得长轴与水平轴对齐。统计矩可以使用函数statmoments计算。
拐角:
拐角是在图像追踪和物体识别中使用广泛的边界描绘子。
Harris-Stephens拐角检测器和最小特征值检测器都在工具箱函数cornermetric来实现。
C=cornermetric(f,method,param1,val1,param2,val2)
F是输入图像
Method是‘Harris’或者‘MinimumEigenvalue’
Param1是’FilterCoefficients’
Val1是一个包含一维空间滤波器模板的系数的向量,该函数由此生成相应的二维平方滤波器w。默认使用fspecial(‘gaussian’,[1,5],1.5)生成一个默认的5*5像素的高斯滤波器。
Parameter2是‘SensitivityFactor’,适用于Harris检测器。
Val2是敏感因子的值,取值在0~0.25内,默认0.04。
输出的C是一个与输入图像大小相同的数组。需要处理输出(原始)数组C,以便根据指定的阈值来进一步确定哪些点是有效的拐角。
使用自定义函数cornerprocess
CP=cornerprocess(C,T,q)
T是一个指定的阈值,q是用来减小拐点数量的方形形态学结构元的大小。拐角点使用q*q的1值结构元来膨胀,以产生连接分量然后,连接分量被形态学收缩为一个点。拐角点的数量取决于q和点的接近程度。
7、区域描绘子
工具箱函数regionprops是用于计算区域描绘子的主要工具。语法为:
D=regionprops(L,properties)
L是一个标记矩阵,D是长度max(L(:))的一个结构
不同字对应了不同测度,如像素数、直径等等等等。
纹理:
描绘区域的一种重要方法是量化该区域的纹理内容。
自定义函数statxture()函数可以计算纹理测度。
T=statxture(f,scale)
f是输入图像,t是一个6元素的行向量,分别是区域的均值、标准差、平滑度、三阶矩、一致性和熵,scale默认为1。
O是定义两个像素彼此相对位置的一个算子,并考虑一幅具有L个可能灰度级的图像f。
Gij是灰度为zi和zj的像素对出现在由O所指定的位置的次数,G叫做共生矩阵。
工具箱中的graycomatrix()可以计算共生矩阵。
[GS,FS]=graycomatrix(f,’NumLevels’,n,‘Offset’,offsets)
使用共生矩阵来进行纹理描述:
Stats=graycoprops(GS,properties)
纹理的频谱度量:
附录中的specxture()函数可以用于计算纹理的频谱度量。
[srad,sang,S]=specxture(f)
用极坐标表示频谱可以得到函数S(r,θ)
Srad是S(r),sang是S(θ),S是频谱图像。
Phi=invmoments(f)用于计算不变矩。
1、使用主分量进行描述
主分量变换也叫做霍特林变换。
y=A(x-mx)
使用自定义函数将大小为M*N*n的图像堆叠数组转换为一个数组,该数组的行是n为向量。
[X,R]=imstack2vectors(S,MASK)
其中,S是堆叠的图像,X是从S中提取出来的向量数组。输入MASK是一个大小为M*N的逻辑或者数值数组,该数组中在用于形成X的S元素的位置处元素非0,在被忽略的位置处元素是0。最后,R是一个列向量,它包含从S中提取的响亮位置的线性索引。