【个人记录用】
介绍
marching square 是一个十分简单但精妙的计算image轮廓(contour)的算法,用于2D图形的计算。【3D图形使用的是marching cube】
算法思路
- 将图像划分成若干单元格
- 将单元格的四个角进行赋值
赋值规则: 如果此顶角在contour的边界或处于其中,则被赋值为1 ,其余顶角皆赋值为0。 - 使用填充规则填充每个单元格
填充规则:
【注释】图像从左下角开始,以二进制的方式表示了16种赋值模版。不难看出,标值为1的角被填充为黑色(正方形1、2、4、8,对应二进制中的2的次数),蓝色圈中。不同黑色顶角之间又依据黑色顶角数量进行了对应的构造。如图6,右边的两个角都被标记,所以黑色部分直接占了整个正方形的一般。又如图7,只有左上角的角未被标记,所以直接去用了图8的反图来表示其余三个角都被标记这种情况。 - 最后得到类似这样的图形
Additional
相关的finding—contour的代码详见这里
https://scikit-image.org/docs/dev/api/skimage.measure.html#skimage.measure.find_contours
Reference
C. Maple, “Geometric design and space planning using the marching squares and marching cube algorithms,” 2003 International Conference on Geometric Modeling and Graphics, 2003. Proceedings, 2003, pp. 90-95, doi: 10.1109/GMAG.2003.1219671.