32、Rake工具(拟合直线)

算子说明    1

1draw_rake( : Regions : WindowHandle, Elements, DetectHeight, DetectWidth : Row1, Column1, Row2, Column2)    1

2rake(Image : Regions : Elements, DetectHeight, DetectWidth, Sigma, Threshold, Transition, Select, Row1, Column1, Row2,    1

3pts_to_best_line( : Line : Rows, Cols, ActiveNum : Row1, Column1, Row2, Column2)    1

4、下面测试图像说明:    2

例子一:rake算子中的Transition = 'negative'    2

1    Transition = 'first'    2

2    Transition = 'last'    3

3    分析:    4

例子二:rake算子中的Transition = 'positive'    5

1Transition = 'first'    5

2Transition = 'last'    6

3、分析:    7

例子三:rake算子中的Transition = 'all'    7

1Transition = 'first'    7

2Transition = 'last'    8

3、分析:    9

总结    10

 

算子说明

1、draw_rake( : Regions : WindowHandle, Elements, DetectHeight, DetectWidth : Row1, Column1, Row2, Column2)

    功能:根据在指定窗口绘制一条直线,和输入卡尺参数,显示出卡尺的样子即检测ROI及检测方向(只是显示给

操作员看作用)。并输出绘制的直线坐标(线面拟合直线需要用到)。

    Regions:输出一个region

    WindowHandle:输入指定窗口句柄

    Elements:输入卡尺的个数

    DetectHeight:输入卡尺的高度

    DetectWidth:输入卡尺的宽度

    Row1, Column1, Row2, Column2:输出直线的起始坐标和终点坐标

2、rake(Image : Regions : Elements, DetectHeight, DetectWidth, Sigma, Threshold, Transition, Select, Row1, Column1, Row2,

    Column2 : ResultRow, ResultColumn)

    功能:根据输入一张图像和相应的对比度参数拟合一条直线点。

    Image:输入图像

    Regions:输出卡尺的样子即检测ROI及检测方向(只为显示用)

    DetectHeight:输入卡尺的高度

    DetectWidth:输入卡尺的宽度

    Sigma:输入平滑参数(滤波因子)

    Threshold:输入对比度阈值

    Transition:输入极性: positive表示由黑到白 negative表示由白到黑 all表示以上两种方向

    Select,:输入检测方向上的第几个符合对比度的点作为拟合点。first表示选择第一点 last表示选择最后一点 max

            表示选择边缘幅度最强点。

    Row1, Column1, Row2,     Column2:输入由1产生的直线坐标点。

    ResultRow, ResultColumn:输出用于拟合直线的点

3、pts_to_best_line( : Line : Rows, Cols, ActiveNum : Row1, Column1, Row2, Column2)

    功能:根据输入的拟合点输出拟合的直线。

    Line:输出一个reign_line

    Rows, Cols:输入由于拟合的点

    ActiveNum:最小有效点数

    Row1, Column1, Row2, Column2:输出拟合后的直线坐标

 

4、下面测试图像说明:

如下测试图像标注有3条直线,这三条直线的对比度都是10,它们的极性分别是

第一条直线极性:由黑道白('positive'

第二条直线是:由白到黑('negative'

第三条直线是: 由白到黑('negative'

例子一:rake算子中的Transition = 'negative'

  1. Transition = 'first'

read_image (Image77, '77.bmp')

draw_rake (Regions, 3600, 15, 50, 5, Row1, Column1, Row2, Column2)

rake (Image77, Regions1, 15, 50, 5, 1, 10, 'negative', 'first', Row1, Column1, Row2, Column2, ResultRow, ResultColumn)

pts_to_best_line (Line, ResultRow, ResultColumn, 2, Row11, Column11, Row21, Column21)

  1. Transition = 'last'

read_image (Image77, '77.bmp')

draw_rake (Regions, 3600, 15, 50, 5, Row1, Column1, Row2, Column2)

rake (Image77, Regions1, 15, 50, 5, 1, 10, 'negative', 'last', Row1, Column1, Row2, Column2, ResultRow, ResultColumn)

pts_to_best_line (Line, ResultRow, ResultColumn, 2, Row11, Column11, Row21, Column21)

  1. 分析:

    当极性为白到黑('negative')的直线有两条,分别是②, ③;在检测方向上(由左到右,看卡尺样式中的蓝色箭头)Transition = 'first'属于②直线,Transition = 'last'属于③直线。所以分别检测到②,

例子二:rake算子中的Transition = 'positive'

1、Transition = 'first'

read_image (Image77, '77.bmp')

draw_rake (Regions, 3600, 15, 50, 5, Row1, Column1, Row2, Column2)

rake (Image77, Regions1, 15, 50, 5, 1, 10, 'positive', 'first', Row1, Column1, Row2, Column2, ResultRow, ResultColumn)

pts_to_best_line (Line, ResultRow, ResultColumn, 2, Row11, Column11, Row21, Column21)

2Transition = 'last'

read_image (Image77, '77.bmp')

draw_rake (Regions, 3600, 15, 50, 5, Row1, Column1, Row2, Column2)

rake (Image77, Regions1, 15, 50, 5, 1, 10, 'positive', 'last', Row1, Column1, Row2, Column2, ResultRow, ResultColumn)

pts_to_best_line (Line, ResultRow, ResultColumn, 2, Row11, Column11, Row21, Column21)

3、分析:

当极性为黑到白('positive')的直线只有一条,就是①;在检测方向上(由左到右,看卡尺样式中的蓝色箭头)Transition = 'first'还是,Transition = 'last'检测到的直线都是①

 

例子三:rake算子中的Transition = 'all'

1、Transition = 'first'

read_image (Image77, '77.bmp')

draw_rake (Regions, 3600, 15, 50, 5, Row1, Column1, Row2, Column2)

rake (Image77, Regions1, 15, 50, 5, 1, 10, 'all', 'first', Row1, Column1, Row2, Column2, ResultRow, ResultColumn)

pts_to_best_line (Line, ResultRow, ResultColumn, 2, Row11, Column11, Row21, Column21)

2Transition = 'last'

read_image (Image77, '77.bmp')

draw_rake (Regions, 3600, 15, 50, 5, Row1, Column1, Row2, Column2)

rake (Image77, Regions1, 15, 50, 5, 1, 10, 'all', 'last', Row1, Column1, Row2, Column2, ResultRow, ResultColumn)

pts_to_best_line (Line, ResultRow, ResultColumn, 2, Row11, Column11, Row21, Column21)

3、分析:

当极性为白到黑('all')即由黑到白和有白到黑的直线有三条,分别是①,②, ③;在检测方向上(由左到右,看卡尺样式中的蓝色箭头)Transition = 'first'属于①直线,Transition = 'last'属于③直线,所以分别检测到①,

总结

draw_rake (Regions, 3600, 15, 50, 5, Row1, Column1, Row2, Column2)

算子只是为了绘制一条直线并输出直线的起始点、端点,和把卡尺工具显示出来提供用户参考,也可以直接用

draw_line( : : WindowHandle : Row1, Column1, Row2, Column2) 代替它。因为后者也是通过绘制直线和输出点,至于卡尺工具显示出来提供用户参考功能由rake算子实现。

posted @ 2022-05-31 23:39  ihh2021  阅读(1160)  评论(0)    收藏  举报