当前位置: 代码迷 >> 综合 >> halcon notes
  详细解决方案

halcon notes

热度:38   发布时间:2023-11-15 04:53:30.0

机器视觉七大应用
1.识别定位
2.缺陷
3.测量
4.符号识别(OCR光学字符,一维码,二维码)
5.手眼标定配合抓取
6.深度学习
7.三维视觉
采集->预处理->图像分割->特征识别以及计算(坐标,面积等)->显示或者通讯(控制运动板卡等)
Blob分析是对图像中相同像素的连通域进行分析,该连通域称为Blob。Blob分析可为机器视觉应用提供图像中的斑点的数量、位置、形状和方向,还可以提供相关斑点间的拓扑结构。
预处理:
机器视觉图像预处理技术包括图像的平滑、增强,边界检测和阈值分割。边界检测和阈值分割是图像预处理的关键。基于二阶导数过零点检测的边界提取方法具有较高的检测精度,但是,利用各种算子对图像求导,必然放大噪声,这就使边界提取受到很大的干扰,即使用上多种统计检验技术,也未能很好地克服这一弱点。先对图像进行平滑滤波,然后再对其求导,求取二阶导数过零点,可以较好地克服噪声的干扰,但是由于边界信息本身就是高额信息,经过低通滤波也会有所损失。

  1. 基于曲线拟合的边界检测方法
  2. 基于梯度强度均值的阈值分割
    1.对比度拉开 a.灰度值缩放 scale_image b.图像增强(灰度变化) emphasize c.灰度形态学 gray_ d.直方图均衡化 equ_histo_image 光照更均匀
    2.去噪 中值 均值 高斯
    图像分割:
  3. 手画 ROI
  4. Blob分析逼近 抠图,分割(三兄弟:二值化,形状选择,形态学,配合intersect,difference,shape_trans)

Halcon 光机电一体化 涉及:
图像基础理论知识
灰度变换
图像增强
图像几何变换
图像分割
图像频域
图像形态学
图像复原
运动图像
图像配准

硬件方案平台上
选光源,镜头,相机,搭建平台

HSV H灰度值大小定颜色,但不是绝对的,受光照和图片质量等因素影响,并非固定的
区域 开运算,腐蚀, 减少像素 闭运算 膨胀 增加像素
灰度图像开运算,腐蚀,暗的像素点增多;灰度图像闭运算,膨胀,亮的像素点增多

字符识别

  1. 读入图片
  2. 预处理(灰度转换,灰度直方图里缩放使能,调范围,
  3. 字符分割:(1)几何矫正 (2)分割,让每一个字体形成一个连通域
  4. 形成trf文件,字符图像与字符关联
  5. 创建神经网络分类器->训练分类器->写分类器(保存OMC文件,消除句柄)
  6. 识别文字

Halcon 分类器基本白底黑字,需invert_image(255-图片现在灰度值)

车牌识别
读入,车牌定位及矫正,字符分割,读取halcon自带分类器,识别,显示
Read_image,特征图选择,shape_trans(外接旋转矩形),识别偏转角度,area_center,vector_anger_to_转正,affine_作用区域和图片,sort_排序,read_ocr_mld(读取halcon自带分类器),do_ocr(执行分类器作用),dev_display(image),disp_message()(在当前显示图片上显示识别到的车牌号)
图像共生矩阵:
对图像上单个象素具有某个灰度进行统计的结果,而灰度共生矩阵是对图像上保持某距离的两象素分别具有某灰度的状况进行统计得到的。
取图像(N×N)中任意一点(x,y)及偏离它的另一点(x+a,y+b),设该点对的灰度值为(g1,g2)。令点(x,y)在整个画面上移动,则会得到各种(g1,g2)值。设灰度值的级数为L,则(g1,g2)的组合共有k(k=L*L)种。对于整个画面,统计出每一种(g1,g2)值出现的次数,然后排列成一个方阵,再用(g1,g2)出现的总次数将它们归一化为出现的概率P(g1,g2),这样的方阵称为灰度共生矩阵。距离差分值(a,b)取不同的数值组合,可以得到不同情况下的联合概率矩阵。(a,b) 取值要根据纹理周期分布的特性来选择,对于较细的纹理,选取(1,0)、(1,1)、(2,0)等小的差分值
纹理特征提取的一种有效方法是以灰度级的空间相关矩阵即共生矩阵为基础的,因为图像中相距(Δx,Δy)的两个灰度像素同时出现的联合频率分布可以用灰度共生矩阵来表示。若将图像的灰度级定为N级,那么共生矩阵为N×N矩阵,可表示为M(Δx,Δy)(h,k),其中位于(h,k)的元素mhk的值表示一个灰度为h而另一个灰度为k的两个相距为(Δx,Δy)的像素对出现的次数。
对粗纹理的区域,其灰度共生矩阵中的mhk值较集中于主对角线附近。因为对于粗纹理,像素对趋于具有相同的灰度。而对于细纹理的区域,其灰度共生矩阵中的mhk值则散布在各处。
在这里插入图片描述
缺陷检测
1.凸凹
2.污点,内部凸凹点,瑕疵,孔洞,破损
3.划痕 低角度环形光

打光
凹点 垂直打,凹点变暗,周围打亮
凸点 低角度打,凸点变亮,周围打暗
曲面 网状

处理
1.Blob分析+特征
饼干
在这里插入图片描述
binary_threshold
area_holes
Rectangularity

药片检测
在这里插入图片描述
access_channel 拆通道
threshold
shape_trans(region,Blister,’convex’)
orientation_region
area_center
vector_angle_to_rigid
affine_trans_image
gen_empty_obj(chambers)
for i := 0 to 4 by 1
Row := 88 + i70
for j := 0 to 2 by 1
column := 163+j
150
gen_rectangle2(rectangle,Row,Column,0,64,30)
concat_obj(chambers,rectangle,chambers)
endfor
endfor
affine_trans_region (Blister,Blister
difference(BLISTER,chambers,pattern)
union1(chambers,chamberUnion)
phiRef := phiRef + rad(180)
area_center(Blister,Area2,RowRef,ColumnRef)
以上定位(求标准位置,blob)
读图计算偏移角度

缺陷检查(在标准位置抠药片,然后和原来的区域相交来判断)
vector_angle_to_rigid(row,column,phi,RowRef,ColumnRef,phiRef ,HomMat2D)
affine_trans_image
reduce_domain(ImageAffinTrans,chamberUnion,imageReduced)
decompose3
var_threshold
connection
closing_rectangle1
fill_up
select_shape
opening_circle
connection
select_shape
shape_trans(selectRegions,pills,’convex’)

count_obj(chambers,Number)
gen_empty(wrongPill)
gen_empty(missingPill)
for i := 1 to Number by 1
select_obj(chambers,chamber,i)
intersection(chamber,pills,pill)
area_center
if(area>0)
min_max_gray9
If(area<3800 or min<60)
concat_obj(wrongPill,pill,wrongPill)
Endif
else
Concat_obj(missingPill,pill,missingPill)

测量类项目背光打光(远心或低畸变镜头+背光源,普通镜头由于中心与两端放大率不一样,会有畸变)
短波长光比长波长光衍射要弱一点,边缘不至于有那么多重影
在这里插入图片描述
gen_rectangle1
reduce_domain
create_shape_model
gen_measure_rectangle2
模板匹配定位 测量矩形

2.Blob分析+特征+差分
毛刺
在这里插入图片描述
read_image(Fins,’fin’+[1:3])
select_obj(Fins,fin,i)
binary_threshold
closing_circle
区域相减difference (求区域相同部分intersection)

局部亮局部暗
在这里插入图片描述 在这里插入图片描述
mean_image(image,imageMean, 49,49 )
dyn_threshold(image,imageMean,regin,5,’dark’)
connection
select_shape
count_obj 选择面积大的缺陷

pcb毛刺
在这里插入图片描述 在这里插入图片描述
背景干净,光照稳定
gray_opening_shape(image,imageOpening,7,7,’octagon’) 暗像素增多,缺陷连接起来

gray_closing_shape(image,imageClosing,7,7,’octagon’)亮像素增多,断的更干净
dyn_threshold(imageOpening,imgeClosing,region,75,’not_equal’)

3.频域+空间域
频域图,每点像素亮度对应相应频段的幅度值
方向,亮度,宽度
频率在哪个方向有剧烈变化,在频域就有亮带

fft_image
gen_rectangle1
gen_rectangle1
union2
paint_region
fft_image_inv
fft_generic
gen_highpass(gen_lowpass)
convol_fft
fft_grnrric

创建滤波器 gen_gauss_filter gen_gauss_filter sub_image
读取图像 灰度化 转频域 频域滤波处理 转空间域 blob分析处理

频域+差分+空间域处理
4.光度立体法
基恩士有LumiTrax算法,就是专门针对凹凸的检测物体,四面打光,合成图像,求取梯度图型,然后Halcon里的光度立体法也是这方面的应用,关键的算子就是photometric_stereo
inspect_blister?_photometric_stereo.hdev
5.特征训练
6.测量+拟合

回归这个词的意思是,我们在试着推测出这一系列连续值属性
支持向量机,里面有一个巧妙的数学技巧,能让计算机处理无限多个特征
监督学习的基本思想是,我们数据集中的每个样本都有相应的“正确答案”。再根据这些样本作出预测。回归问题,通过回归来推出一个连续的输出;
分类问题,其目标是推出一组离散的结果

  1. 无监督学习已知的数据不同于监督学习的数据,没有任何的标签或是有相同的标签或者就是没标签。针对数据集,无监督学习算法可能会把这些数据分成两个不同的簇,所以叫做聚类算法。聚类应用的一个例子就是在谷歌新闻中。聚类只是无监督学习中的一种。
    一堆数据,不知道数据里面有什么,谁是什么类型,甚至不知道有哪些不同的类型,这些类型又是什么。能否自动地找到数据中的结构,就是说要自动地聚类那些个体到各个类,我们没法提前知道哪些是哪些,因为我们没有给算法正确答案来回应数据集中的数据,所以这就是无监督学习。
    Octave

工具和图像对准的两种方式
助手——>matching->载入第一张图片作为定位测量标准——>基于形状匹配,抠选模板区域———>应用,导入所有图片——>检测,全部检测,看检测结果进行相应的优化——>生成校正代码
动态阈值(threshold不能适应亮度变换图片)
mean_image
dyn_threshold
affine_trans_image 1作用图像
affine_trans_region 2作用于工具
1.变换图像
2.变换工具(检测的这一部分,可能是一段代码)

  相关解决方案