HALCON学习笔记
2019-2-2:
硬件选型--->镜头光源相机选型第一讲.avi:
高斯公式:1/u+1/v=1/f u:物距 v:像距 f:焦距
线放大倍率:像高/物高 或者 像距/物距
镜头需要掌握基本概念:焦距 光圈 光圈数(这个参数越大,分辨率越大) 景深 物体在清晰成像的移动范围(光圈越小 景深越大 ;焦距越小,景深越大;拍摄距离越大景深越大)
具体选型案例如下:
硬件选型--->超人视觉初级班镜头光源选型第二讲.avi
相机主要参数:曝光 分辨率 增益 帧率 尺寸 镜头接口 输出接口 白平衡
远心镜头分成3钟 物方远心 像方远心 双远心(类似于望远镜)
远心可以矫正畸变 一般用于测量
网口的相机速度会比USB2.0的快些
实际选型中还需要注意 镜头的分辨率一定大于相机分辨率 镜头的视野范围 必须大于CCD的视野范围 否则会出现黑边
硬件选型--->超人视觉初级班镜头相机光源选型第三讲.avi
光源 偏振片(让光先只存在一个方向的振动光线 主要用于防止反光) 滤光片 打光原则 图片均匀
光源分类:
检测类一般用远心镜头+背光源
条光 背光源 球面光源 点光源 同轴光源(被测物体反光均匀) 组合光源 环形光源
照射方式:同轴方式(被测物体反光均匀) 角度照射(在一定工作距离下 光束集中 均匀性好,照射面积较小 适合塑胶容器的检查)
圆顶光源:适合检测曲面的金属表面文字 例如手机壳上面
2019-3-4:
课堂启蒙班-->01.基础视频课讲解第一讲(ocr识别).mp4
在HDevelop中操作键盘CTRL+E可以打开例程
网上搜下lib和dll的区别 lib可以简单理解成2中 一种直接调用 还有一种指向DLL的信息
2019-3-8 :
第二课 BMP位图数据 主要包含: 文件头 文件信息 颜色表 位图数据
存储时候 按照4字节来存储 具体可查看代码
2019-3-10:
第三课 在"文件"中可以查看示例代码 ROI(region of interesting) 敏感区域
2019-7-20:
课堂启蒙班->04讲视频 (分成2小节)
1.基于相关性目标识别概述
匹配主要有三种 基于灰度 基于特征 基于变换域
这里讲述normalized cross correlation 方法 简称NCC
ROI区域可以通过视图左上角的工具按钮 重新绘制
2019-8-2:
网络启蒙班:
视频第一讲:讲述硬件连接
视频第二讲:基本操作
视频第四讲: halcon文件操作 halcon打开相机基本操作 halcon保存文件 讲解例程ball.hdev
视频第五讲:实战采集瓶盖 主要分为二值化 同时connection函数分割(可以fill填充) 然后根据面积或者外形 找到需要的图形最后标出来进行识别
视频第六讲:形态学 二值化里面的处理 灰度处理则不一样 讲解了膨胀 腐蚀 开运算 闭运算 开运算为先腐蚀后膨胀(开预算会断开形态,但幅度不如腐蚀) 闭预算先膨胀后腐蚀(闭运算会闭合形态 ,但幅度不如膨胀) 对灰度图像处理 则是改变灰度的深浅 膨胀和闭运算为变深 腐蚀和开运算为变浅
图像处理流程: 采集图像 -->预处理(中值滤波,均值滤波 高斯滤波 高通滤波 低通滤波这些都属于预处理范围) -->特征处理(如有必要还需要训练学习)-->UI显示
halcon主要函数:threshold二值化 fill_up_shape填充图形 opening_circle以圆形作为开运算 connection图形分割 select_shape用于图形选择
辅助函数:count_obj统计当前对象数
第八讲 实战blob分析 在二值化之前可以进行一些预处理 方法见上图像处理流程里面有
课程中使用到的算子:
read_image
list_files 列举文件
tuple_regexp_select 列举文件后 在根据扩展名获取需要的文件
list_image_files 列举指定目录中的所有图片
write_image 可以保存原始图片 (使用右击保存会丢失像素)
dump_window_image 截图窗口到图像变量
dump_window 截图当前窗口大小来保存 如果框视野大则保存像素多
dev_get_window 获得窗口句柄
query_font 获得窗口中的字体
set_font 设置字体的大小宽度
reduce_domain 缩小图像的定义域 由此引出ROI区域 (region of interest)
注意:创建ROI区域 圆 直线 齐轴矩形 仿射矩形(可旋转矩形)
绘制ROI: draw_xxx ; draw_xxx_mod ; draw_region等算子
生产ROI:gen_xxx ; gen_empty_obj
显示ROI:disp_obj ; disp_xxx ;dev_display
threshold 根据输入的灰度值 输出到指定图形上
connection将之前相近图形连在一起
select_shape 根据像素大小选择指定的区域 回形针例子有明显展现
union1 把图形数组所有区域合并成一个 把所有图形中的区域合并成一个
select_obj 获取图形数组中的某个个例
union2 联合select_obj选出的两个图形个例 合并两个区域为一个
difference 可以使用两个图片的差集
intersection 可以求得两图的交集
complement 补集 除自身以外的 全部选中
区域和轮廓相互转换:
gen_contour_region_xld 生产contour(轮廓) 从 region(区域) 以XLD方式gen_region_contour_xld 生成区域get_region_pionts 获取区域所有的点组
gen _cross_contour_xld 在物体上方式十字叉
area_center 获取面积的中心点
shape_trans 外切成某个图形
smallest_rectangle1 获取外接特征点 左上角坐标和右下角坐标
sort_region 根据搜索到的符合物料进行排序
弧度转角度
Rad:=rad(45)
Angle:=deg(Rad)
Angle:=deg(45)
仿射变换 类似跟随作用
vector_angle_to_rigid 带角度的刚性匹配 至少一个特征点+一个角度 做仿射变换的算子
vector_to_rigid 不带角度刚性匹配
vector_to_similarity 柔性匹配 (支持缩放,刚性则不支持缩放) 两个特征点做仿射变换
vectoro_to_hom_mat2d 一般适用于手眼标定 三个特征点以上做仿射变化使用这个算子 多相机可标定在一坐标系里
hom_mat2d_to_affine_par 计算仿射变换的参数 这个算子中的参数phi指角度 Theta指斜切角度
常用的仿射变换:
affine_trans_contour_xld
affine_trans_image 对图像进行仿射变换
affine_trans_point_2d
affine_trans_pixel
affine_trans_region 对区域进行仿射变换
实际应用中 贴合机找到底座的位置 然后可以根据之前设定的位置进行仿射变换 再次进行方向识别
实际应用中如果出现搜素模板闪烁则可以使用下面算子组合使用:
set_window_param(句柄,'flush','false')
dev_dispaly(等等)
set_window_param(句柄,'flush','true')
通过上面三个算子操作可以避免闪烁
制作模板之后 可以保存起来
write_shape_model保存模板 read_shape_model读取模板 然后下次就不用在另外做模板了
贴合机中识别中心使用类似draw_spoke 或者spoke功能 draw_rake和rake 二维测量 在视频<halcon网络课7:测量>1:15中有提到类似贴合机的拟合中心点功能
sub_image 只能大图减小图
abs_diff_image 两幅图比较
difference区域背景 大图减小图
symm_difference 区域两图比较