halcon 中几种求直线倾斜角度的算子分析

halcon 中有很多算子可以求出直线的倾斜角度,如下:
smallest_rectangle2(Regions : : : Row, Column, Phi, Length1, Length2)

最小外接矩形的长轴与图像坐标系x轴的夹角(-pi/2 < Phi <= pi/2),
x轴起逆时针时角度为正,顺时针时角度为负。

orientation_region(Regions : : : Phi)
计算一个区域的方向。(- pi <= Phi < pi)

elliptic_axis(Regions : : : Ra, Rb, Phi) 的讲解参考:
计算等效椭圆的方向。(- pi / 2 < Phi <= pi / 2)
orientation_region的计算方法是基于elliptic_axis的。详细区别可以参考:

https://blog.csdn.net/qq_31112205/article/details/89313421

angle_lx( : : Row1, Column1, Row2, Column2 : Angle)
计算线与水平轴间的夹角
逆时针旋转向量到水平轴的角度即为结果值,该结果取决于两个点的顺序,用弧度表示,范围为- pi <= Phi < pi
在这里插入图片描述

图片源自 http://www.skcircle.com/?id=589

line_orientation( : : RowBegin, ColBegin, RowEnd, ColEnd : Phi)
计算线的角度(-pi/2 < Phi <= pi/2)

line_position( : : RowBegin, ColBegin, RowEnd, ColEnd : RowCenter, ColCenter, Length, Phi)
计算线的重心,长度,角度(-pi/2 < Phi <= pi/2)

测试程序如下:

gen_region_line (lineX, 20, 110,200, 110)
gen_region_line (lineY, 110, 50,110, 170)
gen_region_line (Rectangle, 50, 170,170, 50)
* gen_region_line (Rectangle, 42, 69, 178, 150)
smallest_rectangle2 (Rectangle, Row, Column, Phi1, Length1, Length2)
orientation_region (Rectangle, Phi2)
elliptic_axis (Rectangle, Ra, Rb, Phi3)
angle_lx (50, 170,170, 50, Phi4)
line_orientation (50, 170,170, 50, Phi5)
line_position (50, 170,170, 50, RowCenter, ColCenter, Length, Phi6)

hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_rotate (HomMat2DIdentity, Phi1, Row, Column, HomMat2DRotate)
affine_trans_region (Rectangle, RegionAffine1, HomMat2DRotate, 'nearest_neighbor')

hom_mat2d_rotate (HomMat2DIdentity, Phi2, Row, Column, HomMat2DRotate)
affine_trans_region (Rectangle, RegionAffine2, HomMat2DRotate, 'nearest_neighbor')

hom_mat2d_rotate (HomMat2DIdentity, Phi3, Row, Column, HomMat2DRotate)
affine_trans_region (Rectangle, RegionAffine3, HomMat2DRotate, 'nearest_neighbor')

hom_mat2d_rotate (HomMat2DIdentity, Phi4, Row, Column, HomMat2DRotate)
affine_trans_region (Rectangle, RegionAffine4, HomMat2DRotate, 'nearest_neighbor')

hom_mat2d_rotate (HomMat2DIdentity, Phi5, Row, Column, HomMat2DRotate)
affine_trans_region (Rectangle, RegionAffine5, HomMat2DRotate, 'nearest_neighbor')

hom_mat2d_rotate (HomMat2DIdentity, Phi6, Row, Column, HomMat2DRotate)
affine_trans_region (Rectangle, RegionAffine6, HomMat2DRotate, 'nearest_neighbor')

在这里插入图片描述

经过测试,如图中倾斜方式时,只有angle_lx方法得出角度值不一样,将参数中的起点坐标和终点坐标调换后,得出的角度值均一致,再次证明两点的顺序会影响角度值。
经仿射变换后,使用angle_lx得出的角度使直线向左偏移一个像素的位置。
图2

测试2:
在这里插入图片描述

从上图中发现,该倾斜角度直线,经过不同算子得出的角度值有些差异,但是为什么会有差异,也没搞明白。经过仿射变换后,无差别。

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值