工控编程吧

标题: halcon polar_trans_region函数介绍 [打印本页]

作者: qq263946146    时间: 2019-5-12 22:59
标题: halcon polar_trans_region函数介绍
polar_trans_region(Region : PolarTransRegion : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : )
用于将圆弧内的区域转换为极坐标下的区域,反向转换可用函数polar_trans_region_inv
polar_trans_region在尺寸为Width*Height的虚拟图像中,
将中心点( Row, Column)、半径RadiusStart,RadiusEnd
及角度AngleStart和AngleEnd指定的环形弧内的区域转换为对应极坐标下的区域。


极坐标变换是坐标系的变化。
每个点的位置不是行坐标和列坐标,
而是用半径r(即到中心点行、列的距离)和水平轴(通过中心点)与中心点到该点的直线之间的夹角表示。
注意,这个转换不是仿射。


输出区域中的坐标(0,0)总是对应于输入区域中RadiusStart和AngleStart指定的点。
类似地,坐标(Height-1,Width-1)对应于输入区域中由RadiusEnd和AngleEnd指定的点。
在正常模式下(AngleStart < AngleEnd和RadiusStart < RadiusEnd),
极坐标变换按数学上的正方向(逆时针方向)进行。
此外,半径较小的点位于输出区域的上部。
通过适当地交换这些参数的值(例如,AngleStart > AngleEnd或RadiusStart > RadiusEnd),
可以实现输出区域方向的改变。


角度可以为任意实数。
中心点和半径也可以是实数。
但是,如果它们都是整数,
且RadiusEnd和RadiusStart的差值等于Height-1,
则将通过优化的方式加速计算。


半径和角度都被包含引用,即虚目标图像的第一行包含半径为RadiusStart的圆,
最后一行包含半径为RadiusEnd的圆。
对于完整的圆,角度起始和角度结束的差值等于360度,
这也意味着目标图像的第一列将与最后一列相同。
可以使用角度360*(1-1/Width避免。


参数Interpolation 用于选择插值方法'bilinear'或'nearest_neighbor'。
将插值设置为“双线性”会使区域边界更平滑,特别是当区域被放大时。
然而,运行时间显著增加。


如果在区域Region 中传递多个区域,则分别计算它们的极坐标变换,并将其存储在PolarTransRegion.中的元组。
请注意,只有当系统变量'store_empty_regions'被设置为'true'时,
输入区域的索引及其转换才对应(参见set_system)。
否则将丢弃空的输出区域,并且输入元组区域的长度很可能不等于输出元组极移区域的长度。


例程:
read_image (Images, 'photometric_stereo/tire_0' + [1:4])
Tilts := [180,270,0,90]
Slants := [45,45,45,45]
photometric_stereo (Images, HeightField, Gradient, Albedo, Slants, Tilts, 'gradient', 'poisson', [], [])
derivate_vector_field (Gradient, Result, 3, 'mean_curvature')
threshold (Result, Region, -0.2, -0.01)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, BaseLine, ['width','row'], 'and', [600,280], [99999,350])
gen_contour_region_xld (BaseLine, Contours, 'center')
segment_contours_xld (Contours, ContoursSplit, 'lines_circles', 8, 14, 12)
select_contours_xld (ContoursSplit, SelectedContours, 'contour_length', 500, 1e10, -0.5, 0.5)
fit_circle_contour_xld (ContoursSplit, 'ahuber', -1, 0, 0, 3, 1, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
PolarTransWidth := 512
PolarTransHeight := 80
polar_trans_region (Region, RegionPolarTrans, Row[0], Column[0], StartPhi[0], EndPhi[0], Radius[0] + PolarTransHeight, Radius[0], PolarTransWidth, PolarTransHeight, 'nearest_neighbor')
polar_trans_region_inv (RegionPolarTrans, XYTransRegion, Row[0], Column[0], StartPhi[0], EndPhi[0], Radius[0] + PolarTransHeight, Radius[0], PolarTransWidth, PolarTransHeight, 512, 512, 'nearest_neighbor')


1.polar_trans_region_inv(PolarRegion : XYTransRegion : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, WidthIn, HeightIn, Width, Height, Interpolation : )
将极坐标中的区域转换回笛卡尔坐标。
polar_trans_region功能相反。
例程参考上边例程。


PolarRegion为输入要被转换的区域,
XYTransRegion为输出的结果区域。
Row,Column为圆弧的中心坐标。
AngleStart,将 PolarRegion的列坐标0映射到的射线的角度。
可理解为笛卡尔坐标下圆环的起始角度
AngleEnd 将PolarRegion行坐标WidthIn-1映射到的射线的角度。
可理解为笛卡尔坐标下圆环的终点角度
RadiusStart
将PolarRegion的行坐标0映射到圆的半径。
可理解为笛卡尔坐标下圆环的内半径
RadiusEnd
将PolarRegion的行坐标height -1映射到的圆的半径。
可理解为笛卡尔坐标下圆环的外半径
WidthIn,HeightIn输入虚拟图像的长宽。
Width,Height输出虚拟图像的长宽。
Interpolation转换的插补方法,有bilinear', 'nearest_neighbor'。



[halcon]1[/halcon]







欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4