halcon学习拓展系列—统一矩形描述unified_rectangle2_description

本文介绍了Halcon中用于处理带角度矩形的unified_rectangle2_description算子,以及如何通过该算子优化矩形中分线的计算。文章提供测试代码和总结,鼓励读者实践和改进。

《halcon学习拓展系列—以Phi方向作为轴线,求rectangle2的四个角点算子find_rectangle2_points_base_phi》提到了如何改变规定角度的矩形描述,实现该功能可以针对rectangle2做出四种描述,实际应用中可以根据情况选取其中的一种描述

实现该功能后就可以直接获取rectangle2带角度的中分线,即《halcon学习拓展系列—计算Phi方向的矩形中分线算子get_rectangle_median_line_base_phi》中的get_rectangle_median_line_base_phi算子,最后面我们会优化该算子,原来几十行的代码,现在只需要几行

 

一、算子说明

unified_rectangle2_description( : : PhiTargetRowArbColumnArbPhiArbL

<think>我们被要求详细解释Halcon中的gen_rectangle2算子。根据引用[4]和引用[5],我们了解到: - gen_rectangle2用于生成一个任意方向的矩形(即矩形可以不与坐标轴平行)。 - 与gen_rectangle1(生成平行于坐标轴的矩形)不同,gen_rectangle2可以指定矩形的中心、方向角度以及半边长(长和宽的一半)。 功能概述: gen_rectangle2用于生成一个任意方向的矩形区域。该矩形由中心坐标(Row, Column)、方向角度(Phi)以及两个半边长(Length1, Length2)定义。 参数说明: - Row: 矩形的中心行坐标(y坐标) - Column: 矩形的中心列坐标(x坐标) - Phi: 矩形长边(Length1对应的边)相对于水平轴(列轴)的夹角(弧度制),逆时针方向为正。注意:在Halcon中,图像坐标系的左上角为原点,行向下为正,列向右为正。 - Length1: 矩形长边长度的一半(半长轴) - Length2: 矩形短边长度的一半(半短轴) - 输出:生成的矩形区域(Region) 注意:Phi的范围通常是$[-\frac{\pi}{2}, \frac{\pi}{2}]$,因为矩形是中心对称的,旋转180度后是一样的。 使用示例(参考引用[5]): 通常,我们可以先通过其他算子(如smallest_rectangle2)获取一个区域的最小外接矩形(带方向的矩形)参数,然后使用gen_rectangle2重新生成这个矩形区域。 示例代码: ```halcon * 读取图像 read_image(Image, 'printer_chip/printer_chip_01') * 阈值分割 threshold (Image, Regions, 0, 100) * 连通域分割 connection(Regions, ConnectedRegions) * 获取连通域数量 count_obj(ConnectedRegions, Number) * 遍历每个连通域 for i := 1 to Number by 1 select_obj(ConnectedRegions, SingleRegion, i) * 计算最小外接矩形(带方向) smallest_rectangle2(SingleRegion, Row, Column, Phi, Length1, Length2) * 生成这个矩形区域 gen_rectangle2(Rectangle, Row, Column, Phi, Length1, Length2) * 显示 dev_display(Rectangle) endfor ``` 应用场景: - 目标定位:在机器视觉中,我们经常需要定位目标并获取其位置和方向,最小外接矩形(由smallest_rectangle2计算)可以表示目标的方向和大小,然后通过gen_rectangle2生成该矩形用于可视化或后续处理。 - 创建测量区域:在测量任务中,我们可以使用gen_rectangle2生成一个与目标方向一致的矩形区域,然后将其作为测量矩形(例如,结合gen_measure_rectangle2算子生成测量句柄)[^2][^3]。 - 创建ROI(感兴趣区域):根据目标的方向和大小,动态生成矩形ROI。 注意事项: - 角度单位:Phi使用的是弧度,不是角度。如果习惯使用角度,需要转换(弧度=角度*$\pi/180$)。 - 半边长:Length1和Length2是矩形边长的一半,因此整个矩形的长是2*Length1,宽是2*Length2。通常,Length1是长边对应的半长,Length2是短边对应的半宽,但这不是强制的,也可以Length1<Length2,此时矩形是“躺着”的。 - 方向:Phi表示的是矩形长边(Length1对应的边)与水平轴的夹角。当Phi=0时,矩形水平放置(长边水平);当Phi=π/2时,矩形垂直放置(长边垂直)。 与gen_rectangle1的区别(参考引用[4]): - gen_rectangle1:生成平行于坐标轴的矩形,参数为左上角点(Row1, Column1)和右下角点(Row2, Column2)。 - gen_rectangle2:生成任意方向的矩形,参数为中心点(Row, Column)、角度Phi以及两个半边长。 相关算子: - smallest_rectangle1:计算平行于坐标轴的最小外接矩形(无方向),返回左上角和右下角坐标。 - smallest_rectangle2:计算任意方向的最小外接矩形,返回中心点、角度和两个半边长。 - gen_measure_rectangle2:基于gen_rectangle2生成的矩形区域创建测量句柄,用于亚像素边缘检测等。 引用说明: 根据用户提供的引用,我们在回答中引用了[4](解释rectangle1和rectangle2的区别)和[5](提供了gen_rectangle2的使用示例)以及[2][3](提到gen_rectangle2在测量中的应用)。 最后,按照要求生成相关问题。 </think>### Halcon `gen_rectangle2` 算子详解 #### 1. **功能与用途** `gen_rectangle2` 是 Halcon 中用于**生成带方向的矩形区域**的核心算子,主要特性: - 创建任意角度的矩形区域(不限于坐标轴平行) - 通过中心点坐标、旋转角度和半边长精确控制矩形 - 适用于: - 创建测量 ROI(感兴趣区域),配合 `gen_measure_rectangle2` 实现亚像素级测量[^2][^3] - 目标定位(如半导体引线键合的金线尺寸检测)[^3] - 机器视觉中的模板匹配和对象描述 #### 2. **参数说明** ```halcon gen_rectangle2( : Rectangle : Row, Column, Phi, Length1, Length2 : ) ``` - **输入参数**: - `Row, Column`:矩形中心点坐标(行/列) - `Phi`:旋转角度(弧度),逆时针方向为正 - 水平方向为基准 ($\Phi=0$) - 范围:$[-\frac{\pi}{2}, \frac{\pi}{2}]$ - `Length1`:长边长度的一半 - `Length2`:短边长度的一半 - **输出参数**: - `Rectangle`:生成的矩形区域 #### 3. **与矩形相关算子的区别** | 算子 | 方向 | 参数定义 | 典型应用 | |------|------|----------|----------| | **gen_rectangle1** | 平行坐标轴 | 左上角/右下角坐标 | 简单区域分割[^4] | | **gen_rectangle2** | 任意角度 | 中心点+角度+半边长 | 精确测量、旋转目标定位[^3][^5] | | **smallest_rectangle2** | 自动计算方向 | 输入区域 → 输出最小外接矩形参数 | 目标方向分析[^5] | #### 4. **使用示例** ```halcon * 生成矩形:中心(300,400),旋转30°,半长轴50,半短轴20 gen_rectangle2(Rect, 300, 400, rad(30), 50, 20) * 应用于测量(半导体金线检测) gen_measure_rectangle2(300, 400, rad(30), 50, 20, 640, 480, 'bilinear', MeasureHandle) measure_pairs(Image, MeasureHandle, 1, 10, 'all', RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, ... ``` **参数解析**: - `rad(30)`:将角度转弧度 ($30^\circ = \pi/6$) - 实际矩形尺寸:长边 $2 \times 50=100$ 像素,短边 $2 \times 20=40$ 像素 #### 5. **应用场景** 1. **半导体引线键合检测** 通过旋转矩形精准覆盖金线,实现非接触式测量: ```halcon smallest_rectangle2(WireRegion, Row, Col, Phi, L1, L2) * 获取金线方向 gen_rectangle2(MeasureROI, Row, Col, Phi, L1+5, L2+2) * 扩展ROI gen_measure_rectangle2(..., MeasureROI, ..., MeasureHandle) ``` 金线宽度检测精度达亚像素级[^3] 2. **旋转目标定位** 配合最小外接矩形计算目标朝向: ```halcon connection(Regions, ConnectedRegions) smallest_rectangle2(ConnectedRegions, Row, Col, Phi, L1, L2) * 获取方向 gen_rectangle2(OrientedRect, Row, Col, Phi, L1, L2) * 重建区域 ``` 3. **动态ROI生成** 根据目标位置实时调整检测区域: ```halcon find_shape_model(Image, ModelID, ..., Row, Col, Angle, Score) gen_rectangle2(DynamicROI, Row, Col, Angle, 100, 50) ``` #### 6. **注意事项** 1. **角度单位**: Halcon 使用弧度制,角度转弧度公式: $$\Phi_{\text{rad}} = \Phi_{\text{deg}} \times \frac{\pi}{180}$$ 使用 `rad()` 函数转换:`Phi := rad(30)` 2. **边长定义**: - $Length1$ 始终对应 $\Phi$ 方向的主轴(旋转基准轴) - 边长关系:$Length1 \geq Length2$(非强制但建议) 3. **坐标系统**: Halcon 图像坐标系: - 原点 $(0,0)$ 在**左上角** - 行坐标(Row)向下递增 - 列坐标(Column)向右递增 4. **性能优化**: 避免循环内重复生成矩形,优先预计算参数: ```halcon * 错误方式(低效) for i := 1 to N by 1 gen_rectangle2(Rect, Row_i, Col_i, Phi_i, L1, L2) endfor * 正确方式(高效) gen_rectangle2(RectTemplate, 0, 0, 0, L1, L2) * 模板 hom_mat2d_identity(HomMat2D) for i := 1 to N by 1 hom_mat2d_rotate(HomMat2D, Phi_i, Row_i, Col_i, HomMatRot) affine_trans_region(RectTemplate, RectTrans, HomMatRot, 'nearest_neighbor') endfor ``` --- ### 相关问题 1. 如何将 `gen_rectangle2` 与 `gen_measure_rectangle2` 结合实现亚像素测量? 2. `smallest_rectangle2` 和 `gen_rectangle2` 有哪些协同使用场景? 3. 如何处理 `gen_rectangle2` 生成的旋转矩形区域中的图像畸变? 4. 在3D视觉中如何扩展 `gen_rectangle2` 的功能? [^1]: Halcon中inner_rectangle1算子原理及应用 [^2]: gen_measure_rectangle2算子参数说明 [^3]: HALCON在半导体引线键合检测的应用 [^4]: Halcon中rectangle1和rectangle2区别 [^5]: smallest_rectangle2与gen_rectangle2配合示例
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷棵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值