1.主要包括:
shape_trans:根据区域产生指定图形,包括由已知region产生外接圆、内接圆、椭圆,凸性:把凸起最高点连接(注意和膨胀的区别),将产生的凸性图像减去原图形可以得到凹下去的面积
skeleton:求区域骨架,是一个region,边界为一个像素宽
dilation_circle:膨胀,以边界为圆心画圆,圆的外部切线形成的路线,如下图
erosion_circle:收缩,同上
膨胀和收缩经常用于寻找边缘
closing_circle:先膨胀再收缩,可以去除内陷的空洞或中间的缺陷,另外有说法是用某直径的圆填充,不能完全容下圆的地方被补上
opening_circle:先收缩再膨胀,另外有说法是用某直径的圆填充,不能完全容下圆的地方被去除
2.对于单侧光线照射有阴影的区域分割,使用动态阈值
上图圆点中左边为黑色阴影,右边为白色,则使用mean加dyn_threshold+not_equal先分割,注意not_equal可用于一黑一白,而不是只有黑或者只有白
然后使用closing先膨胀再收缩,使中间缺的部分补上
然后使用opening去掉小尾巴
最终效果
然后再打散,求外接圆
*59为球的半径r*2+1,因为要右边黑色和左边白色分别区分,所以需求宽度为半径
mean_image(Image,ImageMean,59,59)
*注意not_equal可用于一黑一白,而不是只有黑或者只有白
dyn_threshold(Image,ImageMean,RegionDynThresh,15,'not_equal')
*8.5必须大于两个半球之前的宽度
closing_circle(RegionDynThresh,RegionClosing,8.5)
*Opening去掉小尾巴
opening_circle(RegionClosing,Regionopening)
connection(Regionopening,ConnectionRegions)
smallest_circle(ConnectedRegions,Row,Column,Radius)
*生成圆轮廓,为了显示而已
gen_circle_contour_xld(ConCircle,Row,Column,Radius,0,6.23,'posituve')