首页 > 其他分享 >识别格子内是否存在芯片(转)

识别格子内是否存在芯片(转)

时间:2024-08-15 11:05:45浏览次数:10  
标签:格子 芯片 Image dev shape 区域 识别 select

来源:https://www.cnblogs.com/LearningC/p/15870948.html


 

代码流程

  • 使用edges_sub_pix (Image, Edges, 'canny', 10, 20, 40),获取黑白之间的边缘线条
  • 轮廓转区域
  • 根据边长和面积select_shape_xld (Edges, SelectedXLD, ['rect2_len1','area'], 'and', [70,18000], [100,33000]),筛选小方格
  • 再根据长宽做二次筛选,得到所有的方格
  • 动态二值化各个方格,
  • 图像取反,腐蚀细小的区域(存在不确定性)
  • 检查是否存在区域,有则表示存在芯片

 

dev_close_window ()
dev_open_window (0, 0, 1200, 850, 'black', WindowHandle) 
dev_clear_window() 
* read_image (Image, 'D:/temp/chips/20220110112001.jpg')  
* read_image (Image, 'D:/temp/chips/20220110112121.jpg')  
* read_image (Image, 'D:/temp/chips/20220110112137.jpg')
 read_image (Image, 'D:/temp/chips/Image_20211227154621354.bmp') 

*使用canny算子提取亚像素边界
edges_sub_pix (Image, Edges, 'canny', 10, 20, 40) 
*根据边长和面积提取xld
select_shape_xld (Edges, SelectedXLD, ['rect2_len1','area'], 'and', [70,18000], [100,33000]) 
*根据xld绘出区域
gen_region_contour_xld (SelectedXLD, Region, 'margin') 
*根据区域面积提取芯片盒子
select_shape (Region, ChipsImage, ['width','height'], \
'and', [155,155], [170,170]) 
*合并区域
union1 (ChipsImage, RegionUnion)
*填充区域
fill_up (RegionUnion, ROI_0)
*根据联合区域裁剪感兴趣区域
reduce_domain (Image, ROI_0, ImageReduced)
*联通分割区域
connection (ImageReduced, ConnectedRegions) 
*将每个芯片方格转换成标准矩形
shape_trans (ConnectedRegions, RegionTransRect, 'rectangle1')
*排序
sort_region (RegionTransRect, SortedRegions, 'character', 'true', 'row') 
*总孔位数量
count_obj (SortedRegions, Number) 
*结果数组,0 代表没有 1代表有芯片
result:= [] 
*空位的数量
EmptyCount :=0 
dev_display (Image) 
for Index := 1 to Number by 1 
  * 找到索引对应的区域
   select_obj (SortedRegions, ALL_ROI_OF_SINGLES, Index)
   *裁剪区域
   reduce_domain (Image, ALL_ROI_OF_SINGLES, ChipBoxRegion)   
   *动态阈值分割
   binary_threshold (ChipBoxRegion, ChipRegion, 'max_separability', 'dark', UsedThreshold)
   *反向选择
   difference (ChipBoxRegion, ChipRegion, ChipWithLine)  
   *联通区域
   connection (ChipWithLine, ConnectedRegions1) 
   *根据面积特征筛选区域
   select_shape (ConnectedRegions1, SelectedRegions, 'area', 'and', 1000.59, 3001.78)
   *腐蚀
   erosion_circle (SelectedRegions, ChipErosion, 2)    
   *再次通过面积筛选  
   select_shape (ChipErosion, ChipInside, 'area', 'and', 1000, 3000)
   *腐蚀
   erosion_circle (ChipInside, ChipErosion1, 2) 
   *计算赛选个数
   count_obj (ChipErosion1, chipExists) 
  
   if (chipExists == 0) 
       *判断不存在芯片的逻辑
        EmptyCount := EmptyCount +1
        *显示用
        dev_update_on()
        dev_set_color ('red')
        dev_set_draw ('fill')
        dev_display (ALL_ROI_OF_SINGLES)   
        dev_update_off()
   endif  
   if(chipExists == 1) 
       *判断有芯片的逻辑 
       
       *显示用
        dev_update_on()
        dev_set_color ('green')
        dev_set_draw ('fill') 
        shape_trans (ChipErosion1, RegionTrans, 'rectangle2')
        dev_display (RegionTrans)  
        dev_update_off()
   endif
   result[Index-1] := chipExists  
endfor  
disp_message (WindowHandle, ' Holes Number:'+Number + ' , Exists Count:' + (Number - EmptyCount) , 'window', 12, 12, 'black', 'true')  

 

需求

有如下图的一个摆盘,摆盘的方格中摆放芯片,一个格子中只放一个,我们需要知道每个方格中是否有芯片去指导我们将芯片放到空的方格中。

image

 

 

 

 

 

 

 

标签:格子,芯片,Image,dev,shape,区域,识别,select
From: https://www.cnblogs.com/ken0137/p/18360496

相关文章

  • 了解PD取电快充协议芯片
    快充协议芯片作为现代电子设备充电技术的关键部分,随着智能手机,平板电脑等携便电子的普及,人们对充电效率要求也越来越高,PD快充协议芯片就能实现人们对充电效率的要求。快充充电协议芯片不仅能达到快速充电,同时还能保护电池在充电的同时不被损坏。XSP04芯片它具有过压保护(OVP)......
  • 简化文本处理流程,通用文字识别助力提升信息采集效率
    随着信息技术的发展、移动设备使用的普及和全球化的商业需求,非结构化数据转换为结构化数据的需求日益增长,数字化成为信息存储和管理的主流趋势。在此背景下,OCR技术应运而生,该技术可以将图像中文本信息转化为计算机等设备可以使用的字符信息,成为现代信息处理的关键技术。OCR技术丰......
  • 多变的车灯,绕不开的LED驱动芯片
    近年来随着汽车的不断普及,车灯方面也在不断发展,由最开始的卤素灯发展为氙气大灯,再到现在的LED大灯和矩阵式LED大灯。在今年的北京车展中,其中不乏令人眼前一亮的方案。比如大众途观Lpro搭载MicroLED投影大灯,意味着该方案首次已经下沉至30万以内的市场价格区间。还有极氪MI......
  • CSC5113 三节锂电池保护芯片
    CSC5113是专用于3节锂电池保护芯片,通过对每节锂电池的充电电压、放电电压、充电电流和放电电流进行高进度检测,实现对电池的过充电、过放电、充电过电流和放电过电流以及短路电流的保护功能。CSC5113采用SOP8封装。1、CSC5113过充电保护当IC检测到任意一节电池电压超......
  • MT2513B 无外围5W电源芯片
    MT2513是一款高度集成自供电原边反馈最大6W电源芯片。MT2513B内置功率三极管,采用脉冲频率调制(PFM)建立非连续导电模式(DCM)的反激式电源,外围设计极简化。MT2513具有可变原边峰值电流,通过最大原边峰值电流和变压器原副边匝比来设置输出恒流点,通过外置FB电阻设置输出恒压点。MT25......
  • <数据集>街头摊贩识别数据集<目标检测>
     数据集格式:VOC+YOLO格式图片数量:966张标注数量(xml文件个数):966标注数量(txt文件个数):966标注类别数:1标注类别名称:['street-vendor']序号类别名称图片数框数1street-vendor9662016使用标注工具:labelImg标注规则:对类别进行画水平矩形框图片示例:标注示例:......
  • <数据集>红绿灯识别数据集<目标检测>
    数据集格式:VOC+YOLO格式图片数量:7884张标注数量(xml文件个数):7884标注数量(txt文件个数):7884标注类别数:3标注类别名称:['light_green','light_red','light_yellow']序号类别名称图片数框数1light_red4661105732light_green406181433light_yellow215457使用标注工具:labe......
  • 【WEB系列】快速识别目标站点:Windows Linux服务器探秘
    一、利用大小写敏感性差异二、分析HTTP响应头信息三、利用系统命令探测四、分析网页内容和脚本五、总结在网络安全工作中,快速判断目标站点的操作系统类型至关重要,这可以帮助安全人员制定针对性的攻击策略或防御措施。传统的方法依赖于端口扫描、指纹识别等工具,但这些方法......
  • 图像识别,训练数据集---GPU篇 3090免费使用
     大家一般都在window上训练yolo等一些深度学习模型,会发现很慢或者说GPU显存不够用而云GPU平台则解决了一系列该问题深度学习目标检测交流群1:985499650yolo2D3D目标检测行为识别交流群2:782537412接下来以该平台为例---有一些免费的3090,4090可以用(24G):https://cloud.lanyun.n......
  • 如何在i.MX8MP平台上为Qualcomm平台的Wi-Fi芯片开辟特定的CMA空间?
    1.为什么要开辟指定的空间为了防止Wi-Fi长时间运行,导致的内存碎片化,QualcommWi-Fi平台可以从内存空间中,划分出特定的CMA空间段,用以进行内存的申请和释放,下面我们重点介绍下,如何在i.MX8MPLinux5.15.x平台上为QCA206xWi-Fi6/6E预留特定CMA空间的操作步骤。2.Linux开辟特......