AOI算法

AOI(自动光学检测)检测算法

AOI检测芯片外观缺陷的工作逻辑大致可分为以下四个步骤:

首先,利用CMOS或CCD图像传感器结合多角度光源和镜头,对芯片表面进行细致扫描,获取高分辨率且高对比度的图像;

接着,通过GPU或FPGA处理器对图像进行去噪、校正、分割和增强等算法处理,以提升图像质量;

然后,运用传统图像处理算法和机器学习算法提取边缘、角点、区域等视觉特征,并与正常模板进行比对,以判断是否存在外观缺陷;

最后,生成详细的缺陷分布报告,统计各类缺陷的数量,并分析检测结果和缺陷相关信息。

主要包括以下几种‌:

  1. 设计规则检测(DRC)‌:这是一种基于规则的检测方法,通过预设的规则来检测图形是否符合设计要求。例如,检测PCB电路时,会检查所有连线是否以焊点为端点,所有引线宽度和间隔是否符合规定值等‌12。

  2. 图形识别检验‌:这种方法将AOI系统中存储的数字化图形与实际检测图像进行比较,通过比较模板待检图像中的链接性特征来识别缺陷。如检测PCB电路时,首先按照一块完好的PCB或根据计算机辅助设计模型建立起检测文件(标准数字化图像)与检测文件(实际数字化图像)进行比较。

  3. 统计建模图像对比‌:这种方法通过学习一系列OK图像的样本,提取各种图像的变化特征,生成一个综合标准图像及参数标准图像。这种方法能够更准确地识别缺陷,适用于复杂的SMT装配工艺‌3。

  4. 粗检测缺陷‌:通过将模板图像和待检图像进行异或运算,检测出大缺陷(如丢失或多余的大焊盘)‌2。

图像识别


图像分析技术,随着计算机的快速发展,目前有许多成熟的图像分析技术,包括模板匹配法(或自动对比)、边缘检测法、特征提取法(二值图)、灰度直方图法、博里叶分析法、光学特征识别法等,每个技术都有优势和局限。
检测算法包括图像统计原理、灰阶处理算法和图包色彩分析技术。

算法统计原理:


常用的一种有效的检测算法,几乎所有的检测都可用到该算法,该算法就是利用OK样本的累计学习和色彩对比来进行检测和判断。

灰阶处理算法:


是指亮度缝隙和拥挤算法,该算法包括最大值算法、最小值算法、亮度跨度算法、均值算法和亮度抽取算法。

图像色彩分析技术:


就是指分析和处理图像的颜色,主要是通关图像的色彩分布和色彩特征来进行检测和判断,主要包括色彩抽取算法,波峰焊产检算法、红胶分析算法、孔洞缝隙算法等。

检测算法

检测算法有 TOC、 Match、 OCV、 OCR、 Length、 Histogarm 等检测算法

TOC 

检测焊点是否具备爬锡现象

爬锡区域的色彩特征为亮度低、色度偏蓝。对于少锡的检测采用的算法为“TOC 算法”

焊现象的色彩特征为亮度亮、色度偏红。对于空焊焊的检测采用的算法为“TOC 算法”

OCV

一种基于图像轮廓分析的算法,它比较待测图像的轮廓线与标准样本的轮廓线以判断它们的相似度。这种算法非常适用于检测错误组件或缺失组件等缺陷,并且它的主要作用是分析和拟合轮廓以判定测量点。

Match

专注于分析待测图像中ROI(感兴趣区域)的图像点与标准样本中对应图像点的相似度。该算法广泛用于定位、错件和缺件检测等领域。

Length

一种测量算法,专门用于计算亮度区域之间的距离。根据测量方式的不同,它进一步分为内距法和外距法。通过对ROI区域进行亮度投影,并统计投影直方图中亮度区域间的距离,我们可以得出精确测量结果。

AOI检测设备算法系列之OCV、Match、Length算法-有驾

在上述图像中,①代表了外距法,测量两个亮度区域外边界之间的间距;②代表了内距法,关注两个亮度区域内边界之间的距离。Length算法特别适用于检测如电容元件等的缺陷。

评价指标

AOI检出率=1-(漏检器件数/总缺陷器件数)X100%

定位算法

https://zhuanlan.zhihu.com/p/698627354

定位,波峰焊中的插件变化大,常规的定位方式不适合插件的定位,所以CREST的定位算法,为特色的定位的方式。该定位方式分为2步,其一是创建定位模板,该定位模板一般为椭圆形;其二是提取焊锡,将焊锡之外的色彩设置为背景。利用在提取焊锡的搜索图中查找与模板拟合最好的区域。

3D AOI

2D AOI主要依赖面阵或线阵相机从单一角度捕捉芯片的2D图像;

而3D AOI则通过多视角或结构光技术获取芯片的3D立体图像。

由于3D AOI能够捕获更丰富的三维信息,因此在缺陷检测方面展现出更高的准确性和全面性。具体优势包括:(1)检测范围更广,3D AOI能从多个角度扫描芯片,覆盖所有三维空间,有效避免2D AOI可能存在的“死角”;(2)检测精度更高,基于三维图像的3D AOI比对检测更为精确;(3)能检测出更多类型的缺陷,如错位、形变、翘起等三维形状方面的缺陷,这些缺陷在2D AOI中可能难以察觉;((4)图像效果更佳,3D AOI生成的三维视图更直观,有助于快速定位和识别缺陷。

### AOI算法在SLG游戏中的实现 #### 定义与作用 AOI(Area Of Interest),即感兴趣的区域,在策略游戏中用于限定玩家仅接收其周围一定范围内发生的事件和状态更新。这种方式能够显著降低网络带宽消耗和服务端处理压力,同时改善用户体验。 对于SLG这类强调宏观布局与微观操作并重的游戏类型来说,合理运用AOI机制尤为重要。通过设定合理的兴趣区域大小以及高效的邻居查找方式,可以在不影响核心玩法的前提下有效提升性能表现[^1]。 #### 实现方案概述 一种常见的做法是在服务端维护一张二维数组形式的地图格子表,其中每个元素代表一个小方块内的实体列表;每当有新的单位进入某个特定的小方块时,则将其加入对应的列表之中。当检测到某位玩家移动位置后,便依据新坐标重新计算其所处的兴趣区间,并向该区域内所有成员发送最新的变动通知。 为了进一步优化查询速度,还可以引入空间索引结构如四叉树或KD-Tree等辅助工具来进行快速定位。不过需要注意的是,这些高级数据结构往往伴随着更高的构建成本及内存占用率,因此具体选用哪种还需视项目规模和技术栈特点而定[^2]。 ```cpp // C++伪代码展示如何利用简单的栅格化方法来追踪玩家附近的动态情况 class GridBasedAOISystem { public: void AddEntity(Entity* entity); void RemoveEntity(Entity* entity); std::vector<Entity*> GetNearbyEntities(const Position& pos); private: int gridSize; // 单元格尺寸参数 std::unordered_map<int, std::list<Entity*>> gridMap; }; void GridBasedAOISystem::AddEntity(Entity* entity){ auto key = CalculateGridKey(entity->GetPosition()); if(gridMap.find(key)==gridMap.end()){ gridMap[key]=std::list<Entity*>(); } gridMap[key].push_back(entity); } std::vector<Entity*> GridBasedAOISystem::GetNearbyEntities(const Position& pos){ std::vector<Entity*> result; for(auto offset : nearbyOffsets){ // 预先定义好的相邻单元偏移量集合 auto targetPos=pos+offset; auto key=CalculateGridKey(targetPos); if(gridMap.find(key)!=gridMap.end()) result.insert(result.end(),gridMap[key].begin(),gridMap[key].end()); } return result; } ``` 此段代码展示了基于固定大小网格划分的方法,它简单易懂且易于扩展支持更多功能特性,非常适合初学者学习理解AOI概念及其工作流程[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值