【Halcon】halcon中的常用算子的中文
·
一、算子分类与核心解析
1. 图像基础运算算子
这类算子主要用于图像像素级的加减乘除、格式转换、裁剪等基础操作。
表格
| 算子 | 核心功能 | 关键参数说明 | 典型使用场景 |
|---|---|---|---|
sub_image |
图像灰度相减 (Img1 - Img2) | Mult=1, Add=0 表示直接相减(无缩放 / 偏移) |
背景差分、缺陷检测(减去基准图找差异) |
mult_image |
图像灰度相乘(你备注的 “相加” 是笔误) | Mult=0.015, Add=0 表示 Img1×Img2×0.015 |
图像增强、掩膜加权运算 |
convert_image_type |
转换图像数据类型 | 'int2' 表示 16 位有符号整型 |
避免运算溢出(如相减可能出现负数) |
crop_part |
裁剪图像区域 | Row=0, Column=0, Width, Height |
提取感兴趣区域 (ROI) |
scale_image_max |
图像对比度最大化 | - | 增强图像视觉辨识度 |
rotate_image |
图像旋转 | Angle=90, 'constant' 表示旋转后填充常数 |
校正倾斜图像(如文字、条码) |
tile_images |
拼接多幅图像 | 2, 'horizontal' 表示 2 幅水平拼接 |
可视化多步处理结果 |
compose3/decompose3 |
RGB 图像合成 / 拆分 | - | 彩色图像通道处理 |
invert_image |
图像反相(255 - 灰度值) | - | 暗背景转亮背景,突出目标 |
fill_interlace |
修复隔行扫描图像 | 'odd' 修复奇数行 |
解决工业相机采集的图像拼接问题 |
polar_trans_image |
笛卡尔坐标↔极坐标转换 | 圆心 (Row,Column)、半径范围 | 处理环形 / 圆形区域(如表盘、瓶盖) |
2. 图像滤波与增强算子
这类算子用于降噪、平滑、边缘增强等预处理。
表格
| 算子 | 核心功能 | 关键参数 | 场景 |
|---|---|---|---|
median_rect |
矩形中值滤波 | 41,41 滤波核大小 |
去除椒盐噪声(如工业图像中的斑点) |
smooth_image |
图像平滑 | 'deriche2', 0.2 平滑算法 / 系数 |
降噪,保留边缘 |
gray_erosion_rect |
灰度腐蚀 | 矩形核大小 | 弱化亮区域,突出暗细节 |
gray_closing/gray_opening |
灰度闭 / 开运算 | 结构元素 | 填充小暗孔 / 去除小亮噪点 |
hysteresis_threshold |
滞后阈值分割 | 10,20 高低阈值 |
边缘检测(如 Canny 算法的阈值环节) |
3. 区域分割与提取算子
这类算子是视觉处理的核心,用于从图像中分割出目标区域。
表格
| 算子 | 核心功能 | 关键参数 | 场景 |
|---|---|---|---|
auto_threshold |
自动多阈值分割 | 10 直方图波谷最小距离 |
多灰度目标分割(如多色零件) |
bin_threshold |
单阈值分割 | - | 简单黑白图像分割 |
char_threshold |
字符专用阈值分割 | 6,95 直方图波峰参数 |
字符识别 (OCR) 的阈值提取 |
dyn_threshold |
动态阈值分割 | 3, 'light' 偏差 / 亮目标 |
不均匀光照下的分割(如曲面物体) |
regiongrowing |
区域生长 | 邻域大小、灰度差、最小面积 | 相似灰度区域合并(如纹理分割) |
fast_threshold |
快速阈值分割 | 灰度范围 + 最小面积 | 实时性要求高的场景 |
check_difference |
图像差异分割 | 'diff_outside', -255,15 |
缺陷检测(对比基准图找差异) |
select_shape_std |
选指定特征区域 | 'max_area',70 选最大面积 |
提取主要目标(如最大的零件) |
4. 区域形态学与操作算子
对分割后的区域进行形态学处理、合并、筛选等。
表格
| 算子 | 核心功能 | 关键参数 | 场景 |
|---|---|---|---|
closing/fill_up_shape |
区域闭运算 / 填充 | 'area',1,40 填充小面积孔洞 |
修复区域孔洞(如字符断笔) |
intersection/difference |
区域交 / 差运算 | - | 提取重叠 / 非重叠区域 |
complement |
区域补集 | - | 提取背景区域 |
union2/concat_obj |
区域合并 | - | 合并分散的目标区域 |
select_region_point |
选择包含指定点的区域 | 点坐标 (Row,Column) | 定位点击位置的目标 |
partition_dynamic |
区域动态分割 | 特征阈值 | 按区域特征(如灰度)拆分 |
5. 轮廓 (XLD) 处理算子
Halcon 中最核心的轮廓操作,用于提取、筛选、拟合、变换轮廓。
表格
| 算子 | 核心功能 | 关键参数 | 场景 |
|---|---|---|---|
lines_gauss/lines_color |
提取灰度 / 彩色线条 | 高斯核、宽度阈值 | 提取边缘、标线、轮廓 |
select_contours_xld |
筛选轮廓 | 'closed'/'curvature' |
选封闭轮廓 / 曲率符合要求的轮廓 |
select_shape_xld |
按形态筛选轮廓 | 'contlength',15,500 长度范围 |
过滤过短 / 过长的轮廓 |
fit_circle_contour_xld |
轮廓拟合成圆 | 拟合算法、精度 | 检测圆形目标(如焊点、圆孔) |
gen_contour_region_xld |
从区域生成轮廓 | 'border_holes' 包含孔洞边界 |
提取区域的边缘轮廓 |
union_collinear_contours_xld |
连接共线轮廓 | 最大间距、角度差 | 修复断裂的直线(如道路标线) |
gen_parallels_xld |
生成平行轮廓 | 距离、角度 | 提取平行线(如轨道、边框) |
test_xld_point |
测试点是否在轮廓内 | 点坐标 | 判断目标是否在指定区域内 |
split_contours_xld |
拆分轮廓 | 'polygon',1,5 |
把复杂轮廓拆分成简单段 |
6. 矩阵与坐标变换算子
用于 2D/3D 坐标转换、位姿计算,是视觉引导、机械手定位的核心。
表格
| 算子 | 核心功能 | 关键参数 | 场景 |
|---|---|---|---|
hom_mat2d_identity/hom_mat3d_identity |
生成单位矩阵 | - | 变换的初始矩阵 |
hom_mat2d_translate/scale/rotate |
2D 平移 / 缩放 / 旋转 | 平移量、缩放因子、角度 | 2D 图像配准、校正 |
hom_mat3d_rotate/translate/compose |
3D 旋转 / 平移 / 矩阵相乘 | 旋转轴、角度、平移量 | 3D 位姿计算(机械手抓取) |
pose_to_hom_mat3d/hom_mat3d_to_pose |
位姿↔矩阵转换 | - | 视觉与机器人坐标系转换 |
vector_to_proj_hom_mat2d |
透视变换矩阵计算 | 4 对对应点坐标 | 图像矫正(如透视畸变校正) |
affine_trans_contour_xld |
轮廓仿射变换 | 变换矩阵 | 轮廓的平移 / 旋转 / 缩放 |
7. 特征提取算子
提取图像 / 区域 / 轮廓的关键特征(坐标、角度、灰度等)。
表格
| 算子 | 核心功能 | 关键参数 | 场景 |
|---|---|---|---|
local_max/local_min |
提取灰度极值点 | - | 检测亮点 / 暗点(如焊点、缺陷) |
critical_points_sub_pix |
亚像素级关键点提取 | 'facet' 提取算法 |
高精度特征点定位 |
orientation_region/orientation_points_xld |
提取区域 / 轮廓方向 | - | 目标角度校正(如文字倾斜) |
min_max_gray |
提取区域灰度极值 | - | 目标灰度特征分析 |
area_center_xld |
计算轮廓中心坐标 | - | 目标定位(如零件中心) |
gray_histo |
计算灰度直方图 | - | 阈值选择的依据 |
8. 可视化与交互算子
用于图像显示、交互操作(如鼠标取点)。
表格
| 算子 | 核心功能 | 关键参数 | 场景 |
|---|---|---|---|
dev_set_color/dev_set_draw/dev_set_shape |
设置显示颜色 / 填充方式 / 形状 | 'cyan'/'margin'/'ellipse' |
可视化区分不同目标 |
dev_set_part |
设置显示区域 | 行 / 列范围 | 聚焦显示感兴趣区域 |
get_mposition |
获取鼠标坐标 | 窗口句柄 | 交互选择 ROI |
paint_xld/paint_gray |
绘制轮廓 / 灰度图像 | 颜色 / 灰度值 | 可视化处理结果 |
二、关键使用示例
示例 1:图像相减找差异(缺陷检测)
hdevelop
* 读取基准图和检测图
read_image(Image1, 'reference.png')
read_image(Image2, 'test.png')
* 转换为整型(避免相减溢出)
convert_image_type(Image1, ImageConverted1, 'int2')
convert_image_type(Image2, ImageConverted2, 'int2')
* 图像相减(Image1 - Image2)
sub_image(ImageConverted1, ImageConverted2, ImageSub, 1, 0)
* 转换回8位灰度图,便于后续处理
convert_image_type(ImageSub, ImageSub8, 'byte')
* 阈值分割提取差异区域
bin_threshold(ImageSub8, Regions)
* 筛选有效缺陷区域(面积过滤)
select_shape_std(Regions, DefectRegions, 'max_area', 70)
示例 2:提取圆形轮廓并拟合
hdevelop
* 读取图像并预处理
read_image(Image, 'circle.png')
median_rect(Image, ImageMedian, 5, 5) * 降噪
* 提取边缘
lines_gauss(ImageMedian, Lines, 1.5, 1, 8, 'light', 'true', 'true', 'true')
* 筛选圆形相关轮廓
select_contours_xld(Lines, SelectedContours, 'closed', 0, 20, 0, 0)
* 拟合成圆,获取圆心和半径
fit_circle_contour_xld(SelectedContours, 'ahuber', -1, 2, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
* 可视化结果
dev_set_color('red')
gen_circle_contour_xld(ContCircle, Row, Column, Radius, 0, rad(360), 'positive', 1.0)
dev_display(ContCircle)
示例 3:3D 位姿转换(机械手抓取)
hdevelop
* 生成3D单位矩阵
hom_mat3d_identity(HomMat3DIdentity)
* 绕Z轴旋转(抓取角度)
hom_mat3d_rotate(HomMat3DIdentity, rad(90), 'z', 0, 0, 0, HomMat3D_RZ)
* 平移到目标位置
hom_mat3d_translate(HomMat3D_RZ, 100, 200, 50, HomMat3D_Trans)
* 转换为机器人位姿
hom_mat3d_to_pose(HomMat3D_Trans, PoseGrasp)
总结
- 核心分类:这些算子可分为图像运算、滤波增强、区域分割、轮廓处理、矩阵变换、特征提取、可视化 7 大类,覆盖视觉处理全流程;
- 关键技巧:
- 图像运算前需用
convert_image_type转换数据类型,避免溢出; - 分割前优先滤波降噪(如
median_rect),提升分割准确性; - 轮廓处理后需筛选(
select_contours_xld),过滤无效轮廓;
- 图像运算前需用
- 典型场景:图像相减用于缺陷检测、轮廓拟合用于尺寸测量、矩阵变换用于视觉引导,是工业视觉最常用的三类场景。
更多推荐
所有评论(0)