BGA封装检测

news2024/12/23 15:13:15

1.BGA封装检测

1.1 应用示例目的与思路

(1) 从输入图像中裁剪出包含BGA区域的图像;

(2) 对BGA区域进行特征筛选,筛选出尺寸和形状均不正常的球形焊点;

(3) 对尺寸和形状不正常的球形焊点分别用圆和交叉线标记出来。

1.2 应用示例相关算子介绍

(1) smallest_rectangle2(Regions : : : Row, Column, Phi, Length1, Length2)

功能:获取一个区域的最小外接矩形(方向任意)。

图形输入参数:Regions:输入区域;

控制输出参数1:(Row, Column):外接矩形的中心坐标;

控制输出参数2:Phi:外接矩形的方向;

控制输出参数3:(Length1, Length2):外接矩形的半径。

(2) crop_rectangle2(Image : ImagePart : Row, Column, Phi, Length1, Length2, AlignToAxis, Interpolation : )

功能:从输入图像中剪切出一个或多个矩形区域。

图形输入参数:Image:输入图像;

图形输出参数:ImagePart:输出图像;

控制输入参数1:(Row, Column):图像裁剪中心坐标;

控制输入参数2:Phi:图像裁剪矩形的方向;

控制输入参数3:(Length1, Length2):图像裁剪矩形的半径。

控制输入参数4:AlignToAxis:确定裁剪的图像部分是否与坐标轴对齐;

控制输入参数5:Interpolation:插值方法。

(3) area_center(Regions : : : Area, Row, Column)

功能:计算输入区域的面积和中心。

图形输入参数:Regions:输入区域;

控制输出参数1:Area:输入区域的面积;

控制输出参数2:(Row, Column):输入区域的中心坐标。

(4) select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : )

功能:根据形状特征筛选区域。

图形输入参数:Regions:输入区域;

图形输出参数:SelectedRegions:筛选的区域;

控制输出参数1:Features:筛选的特征;

控制输出参数2:Operation:特征之间的逻辑运算,每一个(Operation = 'and')或至少一个(Operation = 'or');

控制输出参数3:Min:筛选特征的下限值;

控制输出参数4:Max:筛选特征的上限值。

(5) gen_rectangle2_contour_xld( : Rectangle : Row, Column, Phi, Length1, Length2 : )

功能:创建具有任意方向的一个或多个矩形XLD轮廓。

图形输出参数:Rectangle:输出的矩形轮廓;

控制输入参数1:(Row, Column):矩形的中心坐标;

控制输入参数2:Phi:矩形的方向;

控制输入参数3:(Length1, Length2):矩形的半边长度。

(6) gen_circle_contour_xld( : ContCircle : Row, Column, Radius, StartPhi, EndPhi, PointOrder, Resolution : )

功能:创建一个或多个圆弧或闭合圆。。

图形输出参数:ContCircle:输出的圆弧或闭合圆;

控制输入参数1:(Row, Column):圆弧或闭合圆的中心坐标;

控制输入参数2:Radius:圆弧或闭合圆的半径;

控制输入参数3:(StartPhi, EndPhi):圆弧或闭合圆的起始角度和终止角度;

控制输入参数4:PointOrder:沿着圆或圆弧的点顺序;

控制输入参数5:Resolution:相邻轮廓点之间的距离。

(7) gen_cross_contour_xld( : Cross : Row, Col, Size, Angle : )

功能:为每个输入点(Row,Col)生成十字形状的xld轮廓。

图形输出参数:生成的十字形状的xld轮廓;

控制输入参数1:(Row, Col):输入点的坐标;

控制输入参数2:Size:十字交叉线的长度;

控制输入参数3:Angle:十字交叉线的角度。

1.3 应用示例示例代码

*读取图片
read_image (Image, './bga_14x14_defects.png')
*均值滤波
mean_image (Image, ImageMean, 51, 51)
*动态阈值分割
dyn_threshold (Image, ImageMean, RegionDynThresh, 15, 'dark')
*填充孔洞
fill_up (RegionDynThresh, RegionFillUp)
*获取区域的外接矩形
smallest_rectangle2 (RegionFillUp, Row1, Column1, Phi1, Length1, Length2)
*从输入图像中裁剪处矩形区域图像
crop_rectangle2 (Image, ImagePart1, Row1, Column1, Phi1-rad(0.1), Length1, Length2, 'true', 'constant')
*阈值分割
threshold (ImagePart1, Region, 80, 255)
*连通区域分析
connection (Region, ConnectedRegions)
*填充孔洞
fill_up (ConnectedRegions, RegionFillUp1)
*求区域的面积和中心
area_center (RegionFillUp1, Area2, Row2, Column2)
MinArea:=35
MaxArea:=50
*形状特征筛选(筛选尺寸正常的球形焊点)
select_shape (RegionFillUp1, Balls, ['area','circularity'], 'and', [0.8*MinArea,0.75], [1.2*MaxArea,1.0])
*形状特征筛选(筛选尺寸不正常的球形焊点)
select_shape (Balls, WrongAreaBalls, ['area','area'], 'or', [0,MaxArea], [MinArea,10000])
MaxAnisometry:=1.3
*形状特征筛选(筛选形状不正常的球形焊点)
select_shape (Balls, WrongAnisometryBalls, 'anisometry', 'and' ,MaxAnisometry , 100)
*锡球的布局
BgaLayout:=[0,0,1,1,1,1,1]
*相邻锡球的距离
BallDistRowRef:= 14.32
BallDistColRef:= 14.32
BallsPerRow:=2*|BgaLayout|
BallsPerCol:=2*|BgaLayout|
*BGA模型矩阵初始化为-1
BallMatrixRef:=gen_tuple_const(BallsPerCol*BallsPerCol,-1)
*BGA:x坐标
BallsRowsRef:=[]
*BGA:y坐标
BallsColsRef:=[]
CenterRow:=(BallsPerRow-1)*0.5
CenterCol:=(BallsPerCol-1)*0.5
I:=0
for R:=0 to BallsPerRow-1 by 1
    for C:=0 to BallsPerCol-1 by 1
        Dist:=max(int(fabs([R-CenterRow,C-CenterCol])))
        if(BgaLayout[Dist])     
           BallMatrixRef[R*BallsPerCol+C]:=I
           BallsRowsRef:=[BallsRowsRef,R*BallDistRowRef]
           BallsColsRef:=[BallsColsRef,C*BallDistColRef]
           I:=I+1
        endif
    endfor
endfor
*获取左上方第一个锡球的坐标
select_shape (Balls,Balls_Row , 'row', 'and',8,22 )
area_center (Balls_Row, Area3, Row3, Column3)
select_shape (Balls,Balls_Col , 'column', 'and',9,25 )
area_center (Balls_Col, Area4, Row4, Column4)
tuple_mean (Row3, Row3_Mean)
tuple_mean (Column4, Column4_Mean)
RectangleSize:=12
gen_rectangle2_contour_xld (Matrix,BallsRowsRef+Row3_Mean,BallsColsRef+Column4_Mean,gen_tuple_const(|BallsRowsRef|,0),gen_tuple_const(|BallsRowsRef|,RectangleSize/2.0),gen_tuple_const(|BallsRowsRef|,RectangleSize/2.0))
dev_display(Matrix)
concat_obj (Matrix, Region, ObjectsConcat)
*将尺寸不正常的球形焊点用圆圈标识出来
area_center (WrongAreaBalls, Area5, Row5, Column5)
gen_circle_contour_xld (ContCircle, Row5, Column5, gen_tuple_const(|Row5|,6), gen_tuple_const(|Row5|,0), gen_tuple_const(|Row5|,6.28), 'positive', 1)
concat_obj (ImagePart1, ContCircle, ObjectsConcat1)
*将形状形状不正常的球形焊点用叉叉标识出来
area_center (WrongAnisometryBalls, Area6, Row6, Column6)
gen_cross_contour_xld (Cross, Row6, Column6, 6, gen_tuple_const(|Row6|,0.785))
concat_obj (ImagePart1, Cross, ObjectsConcat2)
concat_obj (ObjectsConcat1, ObjectsConcat2, ObjectsConcat3)

结果展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1002512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法挨揍日记】day04——15. 三数之和、18. 四数之和

15. 三数之和 15. 三数之和https://leetcode.cn/problems/3sum/ 题目描述: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所…

零基础报考湖北省叉车N1特种设备作业Z难不难?

零基础报考湖北省叉车N1特种设备作业Z难不难? 零基础报考叉车指的是没有从事叉车行业,没有实际操作经验的这类人员报考湖北特种设备作业人员N1(叉车)难度。叙后尘告诉你其实蛮简单。跟你梳理一下报考相关事项。 湖北叉车报考-在哪里报名 正常来说自己报…

日常练习-4

目录 一、选择题 二、算法题 1、统计回文 2、连续最大和 一、选择题 1、 解析: p1是一个字符数组,存储了"abcd",p2是一个字符指针,指向了"ABCD",str是一个字符数组,存储了"xyz&…

手写一个摸鱼神器:使用python手写一个看小说的脚本,在ide中输出小说内容,同事直呼“还得是你”

文章目录 一、准备python环境二、分析小说网的章节目录三、分析小说网的章节内容四、编写python脚本五、验证一下吧 一、准备python环境 windows从0搭建python3开发环境与开发工具 Python爬虫基础(一):urllib库的使用详解 Python爬虫基础&a…

PyTorch深度学习实践1——线性回归和Logistic回归

PyTorch的风格 准备数据集使用类设计模型计算损失函数和优化器训练【前向、反向和更新】 线性回归 import torch# 准备数据集 # x,y是矩阵,3行1列 也就是说总共有3个数据,每个数据只有1个特征 x_data torch.tensor([[1.0], [2.0], [3.0]]) y_data to…

关于Java的类加载机制

1、概述 类会在运行期间第一次使用时,被类加载器动态加载至JVM。JVM不会一次性加载所有类。因为如果一次性加载,会占用很多的内存。 2、类的生命周期 类的生命周期包括以下 7 个阶段: 加载(Loading)验证(…

关于软件的功能复用

有一些人总在说软件要复用,开发一个项目时要想想怎么在另一个项目中能重用。你问他怎么做到复用,就会听到微服务、中台一些名词 复用的层次 说到复用,首先要想明白复用的是啥 级别越低,粒度越小,复用的范围越广&#…

实现div的height从0到auto的过渡效果

通过修改max-height打到高度自适应的过程。 展开状态 收起状态 一般场景描述需求(与项目业务无关): 需要完成一种过渡效果,即height是变化的,但不是数字到数字的变化,因为不知道展开之后的高度到底是多少?不确定!!!。…

Qt加载本地图片转为YUV420P格式数据

一、背景介绍 在流媒体应用中,视频编码是必不可少的一环。视频编码的作用是将高带宽、高码率的原始视频流压缩成低带宽、低码率的码流,以便于传输和存储。H264是一种高效的视频编码标准,具有良好的压缩性能和广泛的应用范围,在实…

《C++ primer》练习3.20:输出vector相邻元素的和输出vector头尾对象的和

最近看《C primer》,有这样一个题目 输出vector相邻元素的和 读入一组整数并把它们存入一个vector对象,将每对相邻整数的和输出出来。 这里要注意输入的奇数个和偶数个的数的区别。偶数个整数的话刚好数全部用完,奇数个整数最后一个数空出来…

淘宝平台开放接口API接口

淘宝平台开放接口API接口是指淘宝平台提供给第三方开发者的一组接口,用于实现与淘宝平台的数据交互和功能扩展。通过API接口,第三方开发者可以获取淘宝平台上的商品信息、订单信息、用户信息等数据,也可以实现商品的发布、订单的创建和支付等…

【图解RabbitMQ-7】图解RabbitMQ五种队列模型(简单模型、工作模型、发布订阅模型、路由模型、主题模型)及代码实现

🧑‍💻作者名称:DaenCode 🎤作者简介:CSDN实力新星,后端开发两年经验,曾担任甲方技术代表,业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…

2023年世界机器人大会回顾

1、前记: 本次记录是我自己去世界机器人博览会参观的一些感受,所有回顾为个人感兴趣部分的机器人产品分享。整个参观下来最大的感受就是科学技术、特别是机器人技术和人工智能毫无疑问地、广泛的应用在我们日常生活的方方面面,在安全巡检、特…

【洛谷算法题】P5704-字母转换【入门1顺序结构】

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5704-字母转换【入门1顺序结构】🌏题目描述🌏输入格式&a…

ClickHouse进阶(十三):Clickhouse数据字典-3-文件数据源及Mysql数据源

进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容! 🏡个人主页:含各种IT体系技术,IT贫道_大数据OLAP体系技术栈,Apache Doris,Kerberos安全认证-CSDN博客 📌订阅…

metinfo __ 6.0.0 __ file-read

metinfo __ 6.0.0 __ file-read 说明内容漏洞编号–漏洞名称MetInfo 6.0.0 任意文件读取漏洞漏洞评级高危影响范围6.0.0.0漏洞描述MetInfo 存在任意文件读取漏洞,攻击者利用该漏洞,在具有权限的情况下,可以读取网站任意文件,包括…

ASP.NET+sqlserver公司项目管理系统

一、源码描述 这是一款简洁十分美观的ASP.NETsqlserver源码,界面十分美观,功能也比较全面,比较适合 作为毕业设计、课程设计、使用,感兴趣的朋友可以下载看看哦 二、功能介绍 该源码功能十分的全面,具体介绍如下&…

centos定期清理磁盘

centos/linux定期清理磁盘 要定时清理空间,我们需要了解一个命令,find 命令,这个命令可以查询目录下特定文件名,生成日期的文件 小白教程,一看就会,一做就成。 1.查找需要删除的 find /data_back/zhhyba…

buuctf crypto 【Cipher】解题记录

1.打开题目就有密文 2.一点思路没有,看看大佬的wp(BUUCTF Cipher 1_cipher buuctf_玥轩_521的博客-CSDN博客),捏麻麻的原来玄机就在“公平的玩吧”这句话里,playfair也是一种加密方式,密钥猜测也是playfair…

SMB 协议详解之-NTLM身份认证

前面的文章说明了SMB协议交互的过程,在SMB交互的Session Setup Request/Response会对请求者的身份进行验证,这其中涉及到两个主要的协议NTLM以及Kerberos,本文将对NTLM协议进行详细的说明。 什么是NTLM NTLM是 NT LAN Manager (NTLM) Authentication Protocol 的缩写,主要…