到目前为止我还没有应用到凸壳,但是凸壳算法倒是接触过几个,这里简单写写形态学凸壳。
凸壳的公式如下:
Xki=(Xk−1⊗Bi)∪Ai=1,2,3,4k=1,2,3...X_k^i=(X_{k-1}\otimes B^i)\cup A \quad i=1,2,3,4 \quad k=1,2,3...Xki=(Xk−1⊗Bi)∪Ai=1,2,3,4k=1,2,3...
其中X0i=AX_0^i=AX0i=A。当该过程收敛时(即当Xki=Xk−1iX_k^i=X_{k-1}^iXki=Xk−1i时),我们另Di=XkiD^i=X_k^iDi=Xki,则A的凸壳为:
C(A)=∪i−14DiC(A)=\cup^4_{i-1}D^iC(A)=∪i−14Di
说实话,我刚看到这个公式的时候是懵逼的,但是结合下面的图就很简单理解了。
我们首先有四个不同的element BiB_iBi,我们首先用到第一个B1B_1B1对X01X_0^1X01(X01X_0^1X01等于A)做击中击不中变换,然后与A做并集,得到X11X_1^1X11然后迭代直到Xki=Xk−1iX_k^i=X_{k-1}^iXki=Xk−1i,我们停止迭代,计最终结果为D1D_1D1即上图的X41X_4^1X41,同理我们用其他的三个element BiB_iBi得到D2,D3,D4D_2,D_3,D_4D2,D3,D4,最后将这四个D求并集就得到了我们的凸包。
注:用BiB_iBi做击中击不中变换的结果是我们值得注意的,这四个结构元的远点均在其中心处,“×”项表示“不考虑”的条件,即当A中的一个33区域的中心为0时,而在阴影模板元素下的三个像素为1时,就出现了一个模板匹配。出现模板匹配时,这个33区域的0中心将会被选中,这样就填补了本来是0的孔洞区域,然后与A求并,就将A的范围变大了。当这四个模板不能够更新出新的像素时,那么凸包就形成了。
缺点:上述过程的一个明显缺点是凸壳可能超出确保凸性所需的最小尺寸。减少这种影响的一种简单方法是限制生长,以便凸壳不会超过初始点集在水平和垂直方向的尺寸。