0
点赞
收藏
分享

微信扫一扫

基于QT+Halcon实现线序识别

看山远兮 2022-04-13 阅读 68
算法

一、线序识别算法步骤。

1.按照检测区域m_pItem1的外接矩形(rtBount)的大小, 截取感兴趣区域图像hRoi。
2.把截取出来的感兴趣区域图像hRoi, 分离出R、G、B三个通道hRed、hGreen、hBlue。
3.把hRed、hGreen、hBlue三个通道转换成cielab颜色空间, 得到hChannelL、hChannelA、hChannelB三个颜色图。
4.设m_pItem1的宽为iItemW, 高为iItemH. 分别申请大小为iItemW的pSumL、pSumA、pSumB内存空间. 在0 - iItemH行内,
每次分别取两行hChannelL、hChannelA、hChannelB, 然后分别相加这两行图像对应像素的L、A、B像素值, 分别保存到pSumL、pSumA、pSumB数组。
5.申请大小为iItemW的pWaveForm内存空间, 用pSumL、pSumA、pSumB三个数组的值, 利用梯度法, 即后一个像素减前一个像素, 分别得到差值detaL、
detaA、detaB, 然后求detaL、detaA、detaB的平方根和, 保存到pWaveForm数组, 即得到当前行的边缘波形图。
6.使用均值滤波法平滑pWaveForm数组内的波形图, 平滑窗口为(5x1). 此步骤主要是平滑波形图, 为下一步骤寻找边缘点做算法准备。
7.利用回撤法, 从pWaveForm数组的边缘波形图中, 找到所有波峰, 即为粗略的排线边缘点. 保存到容器vPeak。
8.设线的宽度为iLineW, 根据线的宽度iLineW, 过滤掉不符合线宽度的排线边缘点. 具体过滤算法步骤如下:
8.1、从vPeak容器中取出8个点, p1、p2、p3、p4、p5、p6、p7、p8。
8.2、分别求p1p2的距离L1、p1p3的距离L2、p1p4的距离L3、p1p5的距离L4、p1p6的距离L5、p1p7的距离L6、p1p8的距离L7。
8.3、分别计算L1/iLineW、L2/iLineW、L3/iLineW、L4/iLineW、L5/iLineW、L6/iLineW、L7/

举报

相关推荐

0 条评论