dilation1(Region, StructElement : RegionDilation : Iterations : )
expand 1使用结构化元素膨胀输入区域Region。
通过对一个区域进行dilation1,使其边界变得平滑。
在这个过程中,区域的面积被扩大了。
此外,可以合并断开连接的区域。
然而,这些区域在逻辑上仍然是不同的。
膨胀是一个集论区域运算。
它使用union操作。
设M (StructElement)和R (Region)为两个区域,
其中M为结构化元素,R为待处理区域。
此外,设m是m中的一个点
然后将位移矢量
定义为M的重心与矢量
的差值。
让我们用向量
表示区域R被
平移。然后
对于m中的每个点m,执行区域R的平移。所有这些转换的结合是用m对R膨胀的结果。
dilation1类似于minkowski_add1操作符,
不同之处在于,在dilation1中,结构元素在原点处镜像。
StructElement 的位置是没有意义的,因为位移矢量是根据M的重心确定的。
参数Iterations 决定了要用结构化元素执行的迭代的数量。
迭代n-1的结果作为迭代n的输入。
从上面的定义可以看出,当结构元素为空时,会生成一个空区域。
可以使用
gen_circle、
gen_rectangle1、
gen_rectangle2、
gen_ellipse、
draw_region、
gen_region_polygon、
gen_region_points等操作符生成结构化元素(StructElement)。
2.dilation2(Region, StructElement : RegionDilation : Row, Column, Iterations : )
dilation2使用具有参考点(Row, Column)的结构化元素(StructElement)膨胀输入区域。
膨胀dilation2与dilation1的作用相似,
不同之处在于可以任意选择结构元素的参考点。
参数Iterations 决定了要用结构化元素执行的迭代的数量。
迭代n-1的结果作为迭代n的输入。
如果结构元素为空,则生成一个空区域。
可以使用
gen_circle、
gen_rectangle1、
gen_rectangle2、
gen_ellipse、
draw_region、
gen_region_polygon、
gen_region_points等操作符生成结构化元素(StructElement)。
3dilation_circle(Region : RegionDilation : Radius : )
dilation_circle将带有圆形结构元素的Minkowski加法应用于输入区域Region 。
因为圆掩模是对称的,这就等同于膨胀。
结构元素圆的大小由Radius 决定。
该算子使区域变大,区域边界光滑,
区域内小于圆形掩模的孔闭合。
为了避免区域的平移,只选择半径的3.5、5.5等等类似值是有用的,
因为整数半径会导致圆的重心为非整数,该非整数的重心被四舍五入到下一个整数。
dilation_circle分别应用于每个输入区域。
如果要消除不同区域之间的差距,
必须首先调用union1或union2。
4.dilation_rectangle1(Region : RegionDilation : Width, Height : )
dilation_rectangle1将带有矩形结构元素的膨胀应用于输入区域Region 。
结构矩形的大小为Width* Height。
该算子使区域变大,使区域内小于矩形掩模的孔闭合。
dilation_rectangle1是一个非常快的操作,
因为矩形的高度只以对数形式进行代入计算,而宽度则完全没有代入。
即使在非常大的矩形(边缘长度为> 100)的情况下,这也会带来非常好的运行时效率。
函数每个输入区域分别应用dilation_rectangle1。
如果要消除不同区域之间的差距,必须首先调用union1或union2。
要在各个方向上把一个区域扩大相同的数量,宽度和高度必须是奇数。
如果情况不是这样,则该区域在右侧或底部分别比在左侧或顶部膨胀更大。
例程:
read_image (Image, 'printer_chip/printer_chip_01')
threshold (Image, Region, 128, 255)
connection (Region, ConnectedRegions)
gen_circle (Circle, 200, 200, 10)
dilation1 (ConnectedRegions, Circle, RegionDilation1, 1)
dilation2 (ConnectedRegions, Circle, RegionDilation, 0, 0, 1)
dilation_circle (RegionDilation, RegionDilation2, 3.5)
dilation_rectangle1 (RegionDilation2, RegionDilation3, 11, 11)
|