Abstract: 数字图像处理:第11天
Keywords: 形态学,开操作,闭操作,二值图像
本文最初发表于csdn,于2018年2月17日迁移至此
开篇废话
简单来说所谓开操作和闭操作就是把腐蚀和膨胀结合起来,先腐蚀后膨胀就是开,膨胀后腐蚀就是关,至于为什么是开为什么是关,我一开始也记不住,记得老师好像也没告诉我为啥叫开,为啥叫闭,不过在下面的介绍中,会给出叫开和关的原因。
数学原理
额,公式还没准备好。。。
性质
开操作,一般会平滑物体轮廓,断开较窄的狭颈(细长的白色线条),所以叫开,并消除细小的突出物。
闭操作,一般也会平滑物体轮廓,但与开操作相反,弥合较窄的间断和细长的沟壑,所以叫闭,消除小的空洞,填补轮廓线的中的断裂。
上述中所有所谓的细,窄都是与结构元SE相比的,所以,关键还是SE。
幂等性(idempotent):就是当对同一SE对图像做开(闭)操作,做一次和做多次,结果是一样的。
代码
代码,完全是基于腐蚀和膨胀的操作,其中腐蚀和膨胀的具体实现,见上一节:1
2
3
4
5
6
7
8
9
10
11//开操作
void Open(IplImage *src,IplImage *dst,IplImage *se,Position *center){
Erode(src, dst, se, center);
Dilate(dst, dst, se, center);
}
//关操作
void Close(IplImage *src,IplImage *dst,IplImage *se,Position *center){
Dilate(src, dst, se, center);
Erode(dst, dst, se, center);
}
结果
以下所有结果的SE均为3x3的全为1,中心为中间元素,即SE为各向同性的。
开操作:左上为原图,左下为开操作结果,右上是开操作结果与原图的差,可以看出,细小的白色突起,细长的线条被处理掉了,而狭长的黑色沟壑被保留:
闭操作:左上为原图,左下为闭操作结果,右上为原图与闭操作结果的差。可以看出,原图中的黑色细条(即黑色沟壑)被填充,但白色突起点被保留。
下面对以100为阈值处理的lenna图进行操作:
lena的open结果:
lena的close结果