Matlab中的bwmorph函数解释
bwmorph:对二值图像的形态学操作。
BW2 = bwmorph(BW,operation)
BW2 =bwmorph(BW,operation,n)
BW2 = bwmorph(BW,operation)对二值图像应用形态学操作。
BW2 = bwmorph(BW,operation,n)应用形态学操作n次,n可以是Inf,这种情况下该操作被重复执行直到图像不再发生变化为止。
Operation是以下的字符串:
Operation | Description |
'bothat' | 是形态学上的“底帽”变换操作,返回的图像是原图减去形态学闭操作处理后的图像(闭操作:先膨胀再腐蚀) |
'bridge' | 连接断开的像素。也就是将0值像素置1如果他有两个非零的不相连(8邻域)的像素,比如: 1 0 0 1 1 0 1 0 1 经过bridge连接后变为 1 1 1 0 0 1 0 1 1 |
'clean' | 移除孤立的像素(被0包围的1)。比如下面这个模型的中心像素: 0 0 0 0 1 0 0 0 0 |
'close' | 执行形态学闭操作(先膨胀后腐蚀) |
'diag' | 利用对角线填充来消除背景中的8连通区域。比如: 0 1 0 1 1 0 1 0 0 经过diag变成 1 1 0 0 0 0 0 0 0 |
'dilate' | 利用结构ones(3)执行膨胀操作。 |
'erode' | 利用结构ones(3)执行腐蚀操作。 |
'fill' | 填充孤立的内部像素(被1包围的0),比如下面模型的中心像素: 1 1 1 1 0 1 1 1 1 |
'hbreak' | 移除H连通的像素,例如: 1 1 1 1 1 1 0 1 0 变成 0 0 0 1 1 1 1 1 1 |
'majority' | 将某一像素置1如果该像素的3×3邻域中至少有5个像素为1;否则将该像素置0 |
'open' | 执行形态学开操作(先腐蚀后膨胀) |
'remove' | 移除内部像素。该选项将一像素置0如果该像素的4连通邻域都为1,仅留下边缘像素。 |
'shrink' | n = Inf时,将目标缩成一个点。没有孔洞的目标缩成一个点,有孔洞的目标缩成一个连通环。 |
'skel' | n = Inf时,移除目标边界像素,但是不允许目标分隔开,保留下来的像素组合成图像的骨架。 |
'spur' | 移除刺激(孤立)像素。比如: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 变成 0 0 0 0 0 1 0 0 0 1 0 0 1 1 0 0 1 1 0 0 |
'thicken' | n = Inf时,通过在目标外部增加像素加厚目标直到这样做最终使先前未连接目标成为8连通域。 |
'thin' | n = Inf时,减薄目标成线。没有孔洞的目标缩成最低限度的连通边;有孔洞的目标缩成连通环。 |
'tophat' | 执行形态学“顶帽”变换操作,返回的图像是原图减去形态学开操作处理之后的图像(开操作:先腐蚀再膨胀)。 |
功能: 提取二进制图像的轮廓.
语法: BW2 = bwmorph(BW1,operation) ;
BW2 = bwmorph(BW1,operation,n) ; n为次数;
Operation的参数可以有多种选择,现归纳如下:
‘bothat’:闭包运算,即先腐蚀,在膨胀,然后减去原图像;
‘bridge’:做连接运算;
‘clean’:去除孤立的亮点;
‘close’:进行二值闭运算;
‘diag’:采用对角线填充来去除8邻域的背景;
‘dilate’:采用结构元素ones(3)做膨胀运算;
‘erode’:采用结构元素ones(3)作腐蚀运算;
‘fill’:填充孤立的黑点;
‘Majority’:若像素的8邻域中有大于或等于5的元素为1,则像素为1,否则为0;
‘open’:执行二值开运算;
‘remove’:去掉内点,即若像素的4邻域都为1,则像素为0;
‘shrink’n=inf:做收缩运算,这样没有孔的物体收缩为一个点,而含孔的物体收缩为一个相连的环,环的位置在孔和物体外边缘的中间,收缩运算保持欧拉数不变,
‘skel’n=inf: 提取物体的骨架,即去除物体外边缘的点,但是保持物体不发生断裂,它也保持欧拉数不变。 ‘spur’:去除物体小的分支;
‘thicken’n=inf;对物体进行粗化,即对物体的外边缘增加像素,知道原来为连接的物体按照8邻域被连接起来。粗化保持欧拉数不变。
‘thin’n=inf:对物体进行细化,使得没有孔的物体收缩为最小连接棒,而含有孔的物体收缩为一个连接的环,同样细化保持欧拉数不变。
‘tophat’:用原图减去开运算后的图像;
例子: