角度计算算子简介

1、计算直线与水平轴之间的夹角
angle_lx( : : Row1, Column1, Row2, Column2 : Angle)

角度计算方式:将直线看作向量(有方向性),以直线与水平轴的交点为起点(旋转中心)。如果终点在水平轴上方,则夹角为逆时针旋转水平轴到向量的角度(带正号)。如果终点在水平轴下方,则夹角为顺时针旋转水平轴到向量的角度(带负号)。结果取决于定义线条的两点的顺序。

角度表示方式:弧度,-π<=Angle<π

2、计算两条直线之间的夹角
angle_ll( : : RowA1, ColumnA1, RowA2, ColumnA2, RowB1, ColumnB1, RowB2, ColumnB2 : Angle)

角度计算方式:该算子计算原理与angle_lx类似,只不过把水平轴替换为任意直线B

角度表示方式:弧度,-π<=Angle<=π

3、计算一条直线的方向
line_orientation( : : RowBegin, ColBegin, RowEnd, ColEnd : Phi)

角度计算方式:当直线(无方向性)大致位于1、3象限的方向,角度为正。当直线大致位于2、4象限的方向,角度为负。

角度表示方式:弧度,-π/2<Phi<=π/2

4、计算一条直线的参数
line_position( : : RowBegin, ColBegin, RowEnd, ColEnd : RowCenter, ColCenter, Length, Phi)

角度计算方式:同算子 line_orientation。

角度表示方式:弧度,-π/2<Phi<=π/2

5、计算区域等效椭圆的参数
elliptic_axis(Regions : : : Ra, Rb, Phi)

角度计算方式:该区域等效椭圆的主轴(无方向性)相对于水平轴(有方向性)的角度。

角度表示方式:弧度,-π/2<Phi<=π/2

6、计算区域的最小仿射外接矩形的参数
smallest_rectangle2(Regions : : : Row, Column, Phi, Length1, Length2)

角度计算方式:同算子elliptic_axis

角度表示方式:弧度,-π/2<Phi<=π/2

7、计算区域的方向
orientation_region(Regions : : : Phi)

角度计算方式:计算原理基于算子elliptic_axis。此外,还计算了轮廓上离重心最大距离的点。如果此点的列坐标小于重心的列坐标,则elliptic_axis计算得到的角度值需要加上π。

角度表示方式:弧度,-π<=Phi<π

8、计算contours 或 polygons的等效椭圆的参数
elliptic_axis_xld(XLD : : : Ra, Rb, Phi)

角度计算方式:计算原理同算子elliptic_axis。需要注意的是输入的contours 或 polygons不能自相交,如果他们不是闭合轮廓,那么在计算过程中会自动闭合,由此可能会产生自相交,从而导致最终的计算结果不准确。如果输入的轮廓存在自相交,可用elliptic_axis_points_xld算子代替。

角度表示方式:弧度,-π/2<Phi<=π/2

9、计算contours 或 polygons的方向
orientation_xld(XLD : : : Phi)

角度计算方式:计算原理同算子orientation_region。需要注意的是输入的contours 或 polygons不能自相交,如果他们不是闭合轮廓,那么在计算过程中会自动闭合,由此可能会产生自相交,从而导致最终的计算结果不准确。如果输入的轮廓存在自相交,可用orientation_points_xld算子代替。

角度表示方式:弧度,-π<Phi<=π

总结
计算角度时,如果有方向性,角度范围一般是(-π,π)。如果没有方向性,角度范围一般是(-π/2,π/2)

拟合/测量

*************************测量算子*******************************

*画仿射矩形

draw_rectangle2 (3600, Row5, Column4, Phi1, Length1, Length2)

gen_rectangle2 (Rectangle1, Row5, Column4, Phi1, Length1, Length2)

*获取测量句柄

gen_measure_rectangle2 (Row5, Column4, Phi1, Length1, Length2, 512, 512, 'nearest_neighbor', MeasureHandle)

*句柄,平滑参数,灰度差,极性,选择边缘点,边缘中心y,x坐标,幅度,距离

measure_pos (Image, MeasureHandle, 6.1, 65, 'all', 'all', RowEdge, ColumnEdge, Amplitude, Distance)

gen_cross_contour_xld (Cross, RowEdge, ColumnEdge, 6, Phi1)

close_measure (MeasureHandle)

*************************图像--区域--轮廓************************

*区域转轮廓

gen_contour_region_xld (SelectedRegions, Contours, 'border')

*轮廓点坐标

get_contour_xld (Contours, Row, Col)

gen_cross_contour_xld (Cross1, Row, Col, 6, Phi1)

*轮廓拟合圆

fit_circle_contour_xld (Contours, 'algebraic', -1, 0, 0, 3, 2, Row3, Column, Radius, StartPhi, EndPhi, PointOrder)

gen_circle_contour_xld (ContCircle, Row3, Column, Radius, 0, 6.28318, 'positive', 1)

*轮廓拟合椭圆或椭圆弧

fit_ellipse_contour_xld (Contours, 'fitzgibbon', -1, 0, 0, 200, 3, 2, Row4, Column3, Phi, Radius1, Radius2, StartPhi1, EndPhi1, PointOrder1)

gen_ellipse_contour_xld (ContEllipse, Row4, Column3, Phi, Radius1, Radius2, 0, 6.28318, 'positive', 1.5)

**************************图像--轮廓**************************

*提取亚像素精度边缘轮廓

edges_sub_pix (ImageReduced, Edges, 'canny', 1, 20, 40)

*筛选出指定轮廓

select_contours_xld (Edges, SelectedContours, 'contour_length', 0, 50, -0.5, 0.5)

dev_set_color ('green')

*拟合直线

fit_line_contour_xld (SelectedContours, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)

disp_line (3600, RowBegin, ColBegin, RowEnd, ColEnd)

****************************拟合矩形****************************

*生成感兴趣的区域

read_image (Image, 'fabrik')

draw_rectangle1 (3600, Row11, Column11, Row2, Column2)

gen_rectangle1 (Rectangle, Row11, Column11, Row2, Column2)

reduce_domain (Image, Rectangle, ImageReduced)

*提取轮廓,拟合矩形

edges_sub_pix (ImageReduced, Edges, 'canny', 1, 20, 40)

select_contours_xld (Edges, SelectedContours, 'contour_length', 80, 800, -0.5, 0.5)

fit_rectangle2_contour_xld (SelectedContours, 'regression', -1, 0, 0, 3, 2, Row1, Column1, Phi1, Length11, Length21, PointOrder)

gen_rectangle2 (Rectangle1, Row1, Column1, Phi1, Length11, Length21)

***********************************计算垂足、夹角***************************************

read_image (Image, 'fabrik')

draw_rectangle1 (3600, Row1, Column1, Row2, Column2)

gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)

reduce_domain (Image, Rectangle, ImageReduced)

edges_sub_pix (ImageReduced, Edges, 'canny', 1, 20, 40)

sort_contours_xld (Edges, SortedContours, 'upper_left', 'true', 'row')

*取轮廓上的点

select_obj (SortedContours, ObjectSelected, 2)

get_contour_xld (ObjectSelected, Row, Col)

*取轮廓上的线

select_obj (SortedContours, ObjectSelected1, 10)

fit_line_contour_xld (ObjectSelected1, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)

*计算点到线的垂足

projection_pl (Row[0],Col[0],RowBegin, ColBegin, RowEnd, ColEnd ,RowProj, ColProj)

*显示点、直线、垂足、垂线

gen_cross_contour_xld (Cross,Row[0],Col[0], 6, 0.785398)

disp_line (3600, RowBegin, ColBegin, RowEnd, ColEnd)

gen_cross_contour_xld (Cross1,RowProj, ColProj, 6, 0.785398)

disp_line (3600, Row[0],Col[0],RowProj, ColProj)

*计算两条直线的夹角

angle_ll ( RowBegin, ColBegin, RowEnd, ColEnd, Row[0],Col[0],RowProj, ColProj, Angle)

*弧度转角度deg,角度转弧度rad

Ang:=deg(Angle)

*计算直线和水平轴x的夹角

angle_lx (RowBegin, ColBegin, RowEnd, ColEnd, Angle1)

Ang1:=deg(Angle1)

angle_lx (Row[0],Col[0],RowProj, ColProj, Angle2)

Ang2:=deg(Angle2)

项目案例

https://www.cnblogs.com/hanzhaoxin/archive/2013/02/12/2910338.html

halcon学习笔记——实例篇(2)长度和角度测量

Halcon中关于角度计算和测量拟合的算子详解相关推荐

  1. halcon中如何生成椭圆_Halcon中关于角度计算和测量拟合的算子详解

    角度计算算子简介 1.计算直线与水平轴之间的夹角 angle_lx( : : Row1, Column1, Row2, Column2 : Angle) 角度计算方式:将直线看作向量(有方向性),以直 ...

  2. html圆形圆心坐标,halcon找圆心坐标(拟合圆算子详解)

    Contours(in):输入轮廓 Algorithm(in):拟合圆的算法 MaxNumPoints(in):用于计算的最大轮廓点个数 MaxClosureDist(in):一个轮廓的末尾点最大间距 ...

  3. Halcon中关于角度计算的算子详解

    1.计算直线与水平轴之间的夹角 angle_lx( : : Row1, Column1, Row2, Column2 : Angle) 角度计算方式:将直线看作向量(有方向性),以直线与水平轴的交点为 ...

  4. 电容的q值计算公式_在设计电路中电容容量大小、耐压等级选取详解 (转)

    原文链接:在设计电路中电容容量大小.耐压等级选取详解 作者:张飞 电容的计算 我们对电容的计算,目的是要知道,我们在电路中需要一个多大的电容.为什么要需要 这么个电容?它的电压要多高?它的容量要多大? ...

  5. Halcon矩阵(Matrix)算子详解

    Halcon矩阵(Matrix)算子详解 创建(Creation) create_matrix copy_matrix repeat_matrix clear_matrix 访问(Access) ge ...

  6. python2.7除法_对python中的float除法和整除法的实例详解

    从python2.2开始,便有两种除法运算符:"/"."//".两者最大区别在: python2.2前的版本和python2.2以后3.0以前的版本的默认情况下 ...

  7. oracle8i substr,Oracle中的INSTR,NVL和SUBSTR函数的用法详解

    Oracle中INSTR的用法: INSTR方法的格式为 INSTR(源字符串, 要查找的字符串, 从第几个字符开始, 要找到第几个匹配的序号) 返回找到的位置,如果找不到则返回0. 例如:INSTR ...

  8. python 读取图片转换为一维向量_对Python中一维向量和一维向量转置相乘的方法详解...

    对Python中一维向量和一维向量转置相乘的方法详解 在Python中有时会碰到需要一个一维列向量(n*1)与另一个一维列向量(n*1)的转置(1*n)相乘,得到一个n*n的矩阵的情况.但是在pyth ...

  9. python二元多次函数拟合_对python实现二维函数高次拟合的示例详解

    在参加"数据挖掘"比赛中遇到了关于函数高次拟合的问题,然后就整理了一下源码,以便后期的学习与改进. 在本次"数据挖掘"比赛中感觉收获最大的还是对于神经网络的认识 ...

  10. python什么意思k_对python中的*args与**kwgs的含义与作用详解

    对python中的*args与**kwgs的含义与作用详解 在定义函数的时候参数通常会使用 *args与**kwgs,形参与实参的区别不再赘述,我们来解释一下这两个的作用. *args是非关键字参数, ...

最新文章

  1. labview虚拟心电监测系统_机器视觉系统单相机模型
  2. np.asarray和np.array、np.nanmean和np.mean、np.diff、
  3. 压力管道流量计算公式_给水管管径及流量计算方法
  4. 深入理解MyBatis的原理(四):映射器的用法
  5. 【pyqt5】配置Qt Designer之【designer.exe的保存位置及ui文件转py文件及no Qt platform plugin could be initialized 问题解决】
  6. setjump和longjump
  7. 最小路径问题_BFS
  8. 泡着枸杞写bug的三流程序员凭什么逆袭到一线大厂?你不服不行!
  9. 基于Matlab----RSSI指纹定位技术性能仿真
  10. Ubuntu下配置D-Link路由器进行联网
  11. origin游戏下载一直显示准备中的解决方法
  12. 如何从Java官网下载 Java API 文档
  13. 集成海康威视Sadp SDK实现重置密码
  14. 经济型EtherCAT运动控制器(四):ModbusRTU或ModbusTcp与触摸屏通讯
  15. JMP软件在质量管理中的应用简述
  16. 如何查看端口是否开启
  17. 【GNN】首篇NLP领域图神经网络综述:127页,从图构建到实际应用面面观
  18. 杭电oj 2081 手机短号(C++)
  19. 移动互联网精彩语录:悟透一句话,改变你一生!
  20. CodeVIO:基于可学习优化密集深度的视觉惯性里程计(ICRA2021)

热门文章

  1. 基于雷电模拟器利用python制作手游脚本 (神都夜行录,古剑奇谭木语人) (一)
  2. Java 学生管理系统--------13
  3. 概率分布 ---- 泊松分布
  4. BT 运行及内网穿透原理
  5. python爬不同图片分别保存在不同文件夹中的实现
  6. 微博授权登录demo php,php实现新浪微博授权登录
  7. HDU 5296 Annoying problem LCA+树状数组
  8. 科研过程中Linux相关问题
  9. MDK5.30下载来了,含镜像下载地址,ARM同时带来Cortex-M55调试展示(2020-05-05)
  10. 夜天之书 #19 The ZeroMQ Community