例程功能
代码如下
dev_close_window ()
read_image (Angio, 'angio-part')
get_image_size (Angio, Width, Height)
dev_open_window (0, 0, 3 * Width / 2, 3 * Height / 2, 'black', WindowID)
dev_display (Angio)
dev_set_color ('blue')
MaxLineWidth := 8
Contrast := 12
calculate_lines_gauss_parameters (MaxLineWidth, [Contrast,0], Sigma, Low, High)
lines_gauss (Angio, Lines, Sigma, Low, High, 'dark', 'true', 'parabolic', 'true')
count_obj (Lines, Number)
dev_update_pc ('off')
dev_update_var ('off')
for I := 1 to Number by 1
select_obj (Lines, Line, I)
get_contour_xld (Line, Row, Col)
get_contour_attrib_xld (Line, 'angle', Angle)
get_contour_attrib_xld (Line, 'width_left', WidthL)
get_contour_attrib_xld (Line, 'width_right', WidthR)
* To display the lines, the point at which the gray value drops to
* 25% of the contrast between the line and the background will be
* displayed. This point is given by sqrt(3/4) for the parabolic
* line model.
RowR := Row + cos(Angle) * WidthR * sqrt(0.75)
ColR := Col + sin(Angle) * WidthR * sqrt(0.75)
RowL := Row - cos(Angle) * WidthL * sqrt(0.75)
ColL := Col - sin(Angle) * WidthL * sqrt(0.75)
dev_set_color ('red')
dev_display (Line)
dev_set_color ('green')
disp_polygon (WindowID, RowL, ColL)
disp_polygon (WindowID, RowR, ColR)
endfor
要求
calculate_lines_gauss_parameters
------ 计算lines_gauss
所需的参数Sigma
、Low
和High
;
MaxLineWidth
:入参,提取线的对比度。可传一个值,也可以用含两个值的数组作为参数传入,这样做第二个值决定了最小对比度,因此值必须比第一个值小;
Sigma
:出参,作为lines_gauss
算子的入参;
Low
:出参,作为lines_gauss
算子的入参;
High
:出参,作为lines_gauss
算子的入参;
lines_gauss
------ 检测线及其宽度;
Image
:入参,待检测图片;
Lines
:出参,作为lines_gauss
算子的入参;
Sigma
:入参,高斯平滑参数;
Low
:入参,滞后阈值操作的下阈值;
High
:入参,滞后阈值操作的上阈值;
LightDark
:入参,决定提取亮线还是暗线('light'/'dark');
ExtractWidth
:入参,决定线宽是否被提取('true'/'false');
LineModel
:入参,优化线位置和宽度的模型;
CompleteJunctions
:入参,决定连接处是否补齐(猜的);