halcon的​angle_ll算子和angle_lx算子如何表示角度的


先来段代码。

    angle_ll (Row1, Column1, Row, Column,Row1, Column1,  Row5-RT_Y, Column5+RT_X,  Angle1)
    disp_line(200000, Row1, Column1, Row, Column)
    disp_line(200000, Row1, Column1,  Row5-RT_Y, Column5+RT_X)
    tuple_deg(Angle1, Deg1)
    
    angle_ll (Row1, Column1, Row, Column,Row1, Column1,  Row5-RB_Y, Column5+RB_X,  Angle2)
    disp_line(200000, Row1, Column1, Row, Column)
    disp_line(200000, Row1, Column1,  Row5-RB_Y, Column5+RB_X)
    tuple_deg(Angle2, Deg2)
    
    angle_ll (Row1, Column1, Row, Column,Row1, Column1,   Row5-LB_Y, Column5+LB_X,  Angle3)
    disp_line(200000, Row1, Column1, Row, Column)
    disp_line(200000,Row1, Column1,   Row5-LB_Y, Column5+LB_X)
    tuple_deg(Angle3, Deg3)
    
    angle_ll (Row1, Column1, Row, Column,Row1, Column1, Row5-LT_Y, Column5+LT_X,  Angle4)
    disp_line(200000, Row1, Column1, Row, Column)
    disp_line(200000,Row1, Column1, Row5-LT_Y, Column5+LT_X)
    tuple_deg(Angle4, Deg4)

image.png

                                    (图1)


angle_ll算子计算两条边的夹角。

上面代码中disp_line(200000, Row1, Column1, Row, Column) 这条边是电池两极耳中间那根绿线。

这条边顺时针与边1,2,3,4构成的4个角,其角度值如下:

Deg1=-50.298
Deg2=-154.89
Deg3=155.3
Deg4=50.3169

现在的问题是,angle_ll算子的角度是如何表示的?如何区分正负?



为了搞清楚这个问题,我们先来看看算子angle_lx是怎么样表示角度的。

之前勇哥写了一篇angle_lx算子的角度表示的问题,请参见下面的贴子:

halcon算子angle_lx 表示角度的图文教程  


这里为了方便查看,勇哥把贴子的内容再改编引用一下。

先上一段代码:

dev_close_window()
*******************************************************************  範例 
*第一向限
gen_image_const(Image, 'byte', 1024, 1024) 
dev_open_window(0, 0, 1024, 1024, 'black', WindowHandle)

Row_1 := 500 
Col_1 := 400 

Row_2 := 200 
Col_2 := 500 

angle_lx(Row_1, Col_1, Row_2, Col_2, Angle1) 

dev_set_color('green') 
dev_set_draw('fill') 
disp_line(WindowHandle, Row_1, Col_1, Row_2, Col_2) 

dev_set_color('red') 
dev_set_draw('fill') 
disp_circle(WindowHandle, Row_1, Col_1, 5) 
disp_message(WindowHandle, '第一點 (Row_1 : ' + Row_1 + ', Col_1 : ' + Col_1 + ')', 'image', Row_1 + 10, Col_1 + 10, 'black', 'true') 

dev_set_color('blue') 
dev_set_draw('fill') 
disp_circle(WindowHandle, Row_2, Col_2, 5) 
disp_message(WindowHandle, '第二點 (Row_2 : ' + Row_2 + ', Col_2 : ' + Col_2 + ')', 'image', Row_2 + 10, Col_2 + 10, 'black', 'true') 

**********************
*第二向限
Row_2 := 199 
Col_2 := 158

angle_lx(Row_1, Col_1, Row_2, Col_2, Angle2) 

dev_set_color('green') 
dev_set_draw('fill') 
disp_line(WindowHandle, Row_1, Col_1, Row_2, Col_2) 

dev_set_color('blue') 
dev_set_draw('fill') 
disp_circle(WindowHandle, Row_2, Col_2, 5) 
disp_message(WindowHandle, '第二點 (Row_2 : ' + Row_2 + ', Col_2 : ' + Col_2 + ')', 'image', Row_2 + 10, Col_2 + 10, 'black', 'true') 


**********************
*第三向限
Row_2 := 707 
Col_2 := 155

angle_lx(Row_1, Col_1, Row_2, Col_2, Angle3) 

dev_set_color('green') 
dev_set_draw('fill') 
disp_line(WindowHandle, Row_1, Col_1, Row_2, Col_2) 

dev_set_color('blue') 
dev_set_draw('fill') 
disp_circle(WindowHandle, Row_2, Col_2, 5) 
disp_message(WindowHandle, '第二點 (Row_2 : ' + Row_2 + ', Col_2 : ' + Col_2 + ')', 'image', Row_2 + 10, Col_2 + 10, 'black', 'true') 

**********************
*第四向限
Row_2 := 623 
Col_2 := 752

angle_lx(Row_1, Col_1, Row_2, Col_2, Angle4) 

dev_set_color('green') 
dev_set_draw('fill') 
disp_line(WindowHandle, Row_1, Col_1, Row_2, Col_2) 

dev_set_color('blue') 
dev_set_draw('fill') 
disp_circle(WindowHandle, Row_2, Col_2, 5) 
disp_message(WindowHandle, '第二點 (Row_2 : ' + Row_2 + ', Col_2 : ' + Col_2 + ')', 'image', Row_2 + 10, Col_2 + 10, 'black', 'true') 

**********************
*把第一根线的第一点与第二点换个位置试试
Row_1 := 450 
Col_1 := 400+100 
Row_2 := 180 
Col_2 := 500+100  

angle_lx(Row_2, Col_2,Row_1, Col_1, Angle5) 
dev_set_color('green') 
dev_set_draw('fill') 
disp_line(WindowHandle, Row_2, Col_2, Row_1, Col_1) 

dev_set_color('red') 
dev_set_draw('fill') 
disp_circle(WindowHandle, Row_2, Col_2, 5) 
disp_message(WindowHandle, '第一點 R(ow_1 : ' + Row_2 + ', Col_1 : ' + Col_2 + ')', 'image', Row_2 + 10, Col_2 + 10, 'black', 'true') 

dev_set_color('blue') 
dev_set_draw('fill') 
disp_circle(WindowHandle, Row_1, Col_1, 5) 
disp_message(WindowHandle, '第二點 (Row_2 : ' + Row_2 + ', Col_1 : ' + Col_2 + ')', 'image', Row_1, Col_1 + 10, 'black', 'true') 



degree1 := deg(Angle1) 
degree2 := deg(Angle2) 
degree3 := deg(Angle3) 
degree4 := deg(Angle4) 
degree5 := deg(Angle5) 
disp_message(WindowHandle, '角度 = ' + degree1+','+degree2 +','+degree3+','+degree4+ ','+degree5+' 度', 'window', 20, 20, 'black', 'true')


结果如下图。

其中线1,2,3,4的起点都是中间那个红点, 线5是勇哥故意让起点反过来,以观察角度的变化。

图片左上角显示的是线1,2,3,4,5的角度。


image.png

                                                                                                                    (图2)


angle_lx算子表示角度的规律如下图所示。

第一象限:x1<x2, y1>y2

第二象限:x1>x2,y1>y2

第三象限:x1>x2,y1<y2

第四象限:x1<x2,y1<y2


还有不位于任何象限的四组角度:

0度: x1<x2,y1=y2

90度:  x1=x2,y1>y2

-180(或180度) :  x1>x2,y1=y2

-90度:x1=x2,y1<y2


你可以按照(图2)的结果代入上面的关系式中验证。

当你看(图3)的时候,注意不要按数学上的坐标系来想象,现在的坐标系原点在左上角,向下是row增大,向右是col增大。

如果你按数学上的坐标系来解释,则下面的关系是不成立的。

第一象限:x1<x2, y1>y2


image.png

                                                                                                        (图3)


我们在回过头看angle_ll算子。

angle_ll算子

计算两条直线之间的角度。作为输入,第一行(RowA1,ColumnA1,RowA2,ColumnA2)和第二行(RowB1,ColumnB1,RowB2,ColumnB2)。

计算过程如下:我们将直线解释为向量,起点分别为RowA1、ColumnA1和RowB1、ColumnB1和终点分别为RowA2、ColumnA2和RowB2、ColumnB2。将向量A逆时针旋转到向量B上(旋转的中心是两条直线的交点)产生角度。结果取决于点的顺序和线的顺序。参数Angle返回以弧度为单位的角度,范围为-pi<=Angle<=pi。

再次引用一下(图1)和结果如下:

image.png

Deg1=-50.298
Deg2=-154.89
Deg3=155.3
Deg4=50.3169

因为:

  • 两线夹角取值范围范围为-pi<=Angle<=pi, 即在+-180之间

  • 逆时针为正,顺时针为负


所以:

5线到1线的夹角为顺时针计算,负

5线到2线的夹角为顺针针计算,负

5线到3线的夹角为逆时针计算,正

5线到4线的夹角为逆时针计算,正



因此算子angle_lx,和angle_ll 算子的角度判定方式是不一样的。


--------------------- 

作者:hackpig
来源:
www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864