简介
形态学运算是用集合来定义的。在图像处理(主要在二值图像上)中,我们使用两类像素集合的形态学:目标元素和结构元(SE)。通常,目标定义为前景像素集合。结构元可以按照前景像素和背景像素来规定的。
腐蚀
结构元B对前景像素A的腐蚀可定义为:结构元B包含于前景像素A(前景像素B只与结构元像素A重叠)。
腐蚀是一种收缩或细化运算。
获取结构元API:getStructuringElement(shape,ksize,anchor)
shape:结构元的形状。
MORPH_RECT(矩形结构元):由一组矩形像素组成,可以用来检测水平、垂直和斜向的边缘、线条和角点。
MORPH_CROSS (十字形结构元):由一组十字形的像素组成,可以用来检测水平、垂直和斜向的边缘和角点。
MORPH_ELLIPSE(椭圆形结构元):由一组椭圆形的像素组成,可以用来检测椭圆形区域内的特征。
补充:矩形结构元适用于处理具有明显边缘的图像,而圆形结构元适用于处理具有连续性的图像。十字形结构元适用于处理具有明显方向性的图像,椭圆形结构元则更加灵活,可适用于各种形状和尺寸的目标。
ksize:结构元的尺寸大小。
anchor:锚点,结构元基于该点在前景上滑动,默认Point(-1,-1)。
腐蚀API:erode(src,dst,kernel,anchor,iterations,borderType,borderValue)
src:输入的图像。
dst:输出的图像。
kernel:结构元,通过getStructuringElement获取。
anchor:锚点,默认Point(-1,-1)。
iterations:迭代次数,默认值为1。
borderType:边界类型,默认值为BORDER_CONSTANT。
borderValue:边界值,默认值为morphologyDefaultBorderValue()。
膨胀
结构元B对前景像素A的膨胀可定义为:前景像素A与结构元B至少一个元素重合。
膨胀会“增长”或“粗化”图像中的目标。
膨胀API:dilate(src,dst,kernel,anchor,iterations,borderType,borderValue)
src:输入的图像。
dst:输出的图像。
kernel:结构元,通过getStructuringElement获取。
anchor:锚点,默认Point(-1,-1)。
iterations:迭代次数,默认值为1。
borderType:边界类型,默认值为BORDER_CONSTANT。
borderValue:边界值,默认值为morphologyDefaultBorderValue()。
开运算
开运算是:首先结构元B对前景像素A的腐蚀,接着结构元B对腐蚀结构膨胀(结构元B对前景像素A的开运算是B的所有平移的并集,以便B完全拟合A)。
开运算通常平滑物体的轮廓、断开狭窄的狭颈、消除细长的突出物。
开运算API:morphologyEx(src,dst,op,kernel,anchor,iterations,borderType,borderValue)
src:输入的图像。
dst:输出的图像。
op:当为CV_MOP_OPEN为开运算。
kernel:结构元,通过getStructuringElement获取。
anchor:锚点,默认Point(-1,-1)。
iterations:迭代次数,默认值为1。
borderType:边界类型,默认值为BORDER_CONSTANT。
borderValue:边界值,默认值为morphologyDefaultBorderValue()。
闭运算
开运算是:首先结构元B对前景像素A的膨胀,接着结构元B对腐蚀结构腐蚀(结构元B的所有不与前景像素A重叠的并集的补集)。
闭运算同样平滑轮廓,但与开运算相反,它通常弥合狭窄的断裂和细长的沟壑,消除小孔,并填补轮廓中的缝隙。
闭运算API:morphologyEx(src,dst,op,kernel,anchor,iterations,borderType,borderValue)
src:输入的图像。
dst:输出的图像。
op:当为CV_MOP_CLOSE为闭运算。
kernel:结构元,通过getStructuringElement获取。
anchor:锚点,默认Point(-1,-1)。
iterations:迭代次数,默认值为1。
borderType:边界类型,默认值为BORDER_CONSTANT。
borderValue:边界值,默认值为morphologyDefaultBorderValue()。