split_contours_xld(Polygons : Contours : Mode, Weight, Smooth : )
split_contours_xld在突出点分割多边形Polygons ,结果保存于Contours 轮廓。
如果选择模式“polygon”,轮廓线将在多边形的控制点上分割。
在模式“dominant”中,它们在显性点被分割,
即,当计算出的方向变化大于(经验确定的)阈值
时,
在(经验确定的)点
邻域内,
方向没有发生较大的变化。
轮廓方向由回归线方向(即,最小二乘逼近线)通过等值线周围Smooth 点邻域内的所有点。
这样确定的方向是Smooth 的高斯宽度平滑。
权重Weight是衡量操作者灵敏度的一个权重因子。
选择的权重Weight越大,找到的优势点越少。
例程
pi := 3.1415926535897
Eps := pi / 4
read_image (Image, 'ed_g')
get_image_size (Image, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowID)
dev_set_draw ('margin')
dev_set_part (153, 165, 215, 231)
dev_display (Image)
gen_rectangle1 (Rectangle, 150, 170, 210, 200)
reduce_domain (Image, Rectangle, ImageReduced)
*提取图像XLD轮廓
edges_sub_pix (ImageReduced, Edges, 'sobel', 0.5, 40, 50)
*生成多边形轮廓
gen_polygons_xld (Edges, Polygons, 'ramer', 1)
*断开轮廓连接
split_contours_xld (Polygons, SplitContours, 'polygon', 1, 5)
*计算轮廓对应回归线轮廓
regress_contours_xld (SplitContours, RegressContours, 'drop', 1)
*根据角度选择近似垂直轮廓线
select_contours_xld (RegressContours, SelectedContours, 'direction', pi / 2 - Eps, pi / 2 + Eps, -0.5, 0.5)
*选择轮廓线长度在一定范围的轮廓线
select_contours_xld (SelectedContours, SelectedContoursFinal, 'length', 2, 200000, -0.5, 0.5)
*连接轮廓线
union_straight_contours_xld (SelectedContoursFinal, UnionContours, 6, 0.2, 100, 'noparallel', 'maximum')
*拟合轮廓线成直线,得到直线参数
fit_line_contour_xld (UnionContours, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)
dev_display (Image)
dev_set_color ('white')
if (|RowBegin| == 0)
disp_message (WindowID, 'No edges found', 'window', 12, 12, 'black', 'true')
else
disp_line (WindowID, RowBegin, ColBegin, RowEnd, ColEnd)
endif
|