基于MATLAB的胶囊缺陷检测
目录
源码下载
1. Introduction
2 Proposed approach
2.1 胶囊板位置获取
2.2 去雾算法增强对比度
2.3 胶囊位置获取
2.4 胶囊位置校正
2.5 基于二值图像面积占比的胶囊缺陷检测
2.6 基于RGB直方图相似性的胶囊缺陷检测
3 Experimental results and analysis
3.2 去雾算法增强对比度
3.4 胶囊位置校正
3.5 基于二值图像面积占比的胶囊缺陷检测
3.6 基于RGB直方图相似性的胶囊缺陷检测
4 Conclusion
References
源码下载
基于MATLAB的胶囊缺陷检测.rar-图像处理文档类资源-CSDN下载基于MATLAB的胶囊缺陷检测更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/qq_42816065/75304192
GitHub - PoistRXE/Caspsule_Defect_dectection: 基于MATLAB的胶囊缺陷检测https://github.com/PoistRXE/Caspsule_Defect_dectection
1. Introduction
任务说明:找到所有胶囊的位置,正确的胶囊标绿色的方框,错误的胶囊标红色,错误的胶囊存在如下缺陷:漏装胶囊、胶囊放置在错误的位置、胶囊泄漏内部药粉、胶囊被挤压变形等。如图1所示分别为漏装胶囊、胶囊放置在错误的位置、胶囊泄漏内部药粉、胶囊被挤压变形对应的实物图。
Fig.1 漏装胶囊、胶囊放置在错误得位置、胶囊泄漏内部药粉、胶囊被挤压变形(从左至右)
To solve the problem:
1.找到胶囊板的位置,将其进行定位并从背景中提取出来。
2.找到每一个胶囊的位置,对其进行定位并从胶囊板背景中的提取出来。
3.对胶囊进行缺陷检测,将正确的胶囊标绿色方框,错误的胶囊标红色方框。
2 Proposed approach
The proposed approach includes:
利用常规的开闭运算和连通域识别来获取胶囊板的位置;利用去雾算法增强胶囊与胶囊板背景之间的对比度,在HSV空间提取出胶囊的信息;利用开闭运算、图像重建、连通域识别获取胶囊的位置及其外接矩形的大小;对胶囊位置进行矩阵式重排列,并利用template中的位置信息作为模板对待检测的胶囊位置进行位置校正、对胶囊的外接矩形大小进行校正;利用校正后的胶囊位置和外接矩形将每一个胶囊从原始图像和中间二值图像中截取出来原始胶囊图集ISRC和二值胶囊图集IBW;对二值胶囊图集IBW中的每一个胶囊进行面积检测,通过判断面积占比来检测漏装胶囊、胶囊泄漏内部药粉、胶囊被挤压变形这三种缺陷;对原始胶囊图集ISRC中的每一个胶囊进行RGB检测,通过计算RGB三个通道的直方图相似性获取每一张图片相互比对后的相似性系数矩阵,分析矩阵来检测胶囊放置在错误的位置这种缺陷;最后将正确的胶囊标绿色方框,错误的胶囊标红色方框。
2.1 胶囊板位置获取
观察图像,发现药板和黑色背景对比度较强,可以用简单的开闭运算和连通域识别来获取胶囊板的位置。
2.2 去雾算法增强对比度
观察图像,发现两种胶囊板的背景略有区别:蓝白色胶囊的背景更为复杂,同时有彩色的反光,导致无法利用RGB阈值将胶囊从背景中提取出来。同时观察发现胶囊板透明的塑料类似于雾,所以采用去雾算法来提高胶囊与背景之间的对比度。再利用HSV阈值来提取胶囊成分,并对胶囊成分进行滤波、图像重建、二值化处理得到待定位的胶囊图片。
2.3 胶囊位置获取
观察图像,发现胶囊二值化后的图像上存在很多离散的点,为了获得一个个邻域连通的胶囊,这样才能使用连通域识别函数对每一个胶囊进行定位。所以利用开闭运算、图像重建、连通域识别获取胶囊的位置及其外接矩形的大小。
2.4 胶囊位置校正
观察图像,发现标记出来的胶囊位置错误,为了解决这个问题,使用相同程序通过对template图像标记获取每个胶囊的位置及其外接矩形的大小,并将这两个数据作为模板来校正待检测胶囊的位置及其外接矩形的大小。
为了使模板匹配能够和待检测胶囊位置匹配,需要对胶囊位置进行矩阵式重排列:先找出所有胶囊的中心点坐标行坐标最小的值centriod_min,再以[centriod_min-15, centriod_min+55]为阈值来找出同一行的其他胶囊,并将这组胶囊中心坐标另存为一组按照列坐标由大到小排列的数据表,然后将这组胶囊的原始行列坐标置为[1000,1000]。其余行胶囊的重排列与第一行的方法一样,这样就可以得到矩阵式重排列后的胶囊位置。
然后使用模板的位置信息中行坐标为参考值template,再以[template-40, template+30] 为阈值来判断程序标记出来的待检测胶囊的位置是否在中心位置,不在此区间的胶囊中心坐标替换为模板中对应的中心坐标,同时不在此区间的胶囊外接矩形数据也替换为模板中对应的外接矩形数据。
最后,还有可能出现中心位置符合要求,但是外接矩形大小相差很大的情况,此时使用模板中的外接矩形长宽与待检测胶囊的外接矩形长宽进行对比,同样也需要设置阈值区间来判断待检测胶囊的外接矩形长宽是否符合正常,具体步骤与位置信息比对流程类似,这里不做累述。通过上述步骤就可以将胶囊的位置进行校正。
2.5 基于二值图像面积占比的胶囊缺陷检测
首先获取每个胶囊的字图片,利用校正后的胶囊位置和外接矩形将每一个胶囊从2.3节中的二值图像I_UnW_Gray_Re中截取出来二值胶囊图集IBW,同时将每个焦囊从原始图片中截取出来得到原始胶囊图集ISRC。一开始希望直接通过对二值图像集中每张图片统计白色点数Nw占整张图片像素点NA的比例来判断胶囊是否完整,但是在图像运算的过程中会出现胶囊信息的丢失,如图6所示。这时会导致白色点数占比达不到阈值,会判定为缺陷。这里引入基于灰度强度差权重来分离背景,由此可以得到背景点数NB,再利用公式Nw/(NA-NB)计算面积占比。当每一个胶囊的面积占比低于0.45时,判定为缺陷胶囊。
Fig.6 胶囊信息丢失
2.6 基于RGB直方图相似性的胶囊缺陷检测
对2.4节得到的原始胶囊图集ISRC进行RGB直方图相似性判断:该相似性比对仅在每一行胶囊之间进行,每一个胶囊与同行其他胶囊进行RGB直方图相似性计算,这样就可以获得一个相似性矩阵,如表1所示。
Table 1 相似性矩阵
0 |
0.7556 |
0.8006 |
0.7625 |
0.7653 |
0.7556 |
0 |
0.7861 |
0.7276 |
0.7420 |
0.8006 |
0.7861 |
0 |
0.8874 |
0.7932 |
0.7625 |
0.7276 |
0.8874 |
0 |
0.7645 |
0.7653 |
0.7420 |
0.7932 |
0.7645 |
0 |
选取该表中相似性系数最大的值为参考值max,以(max-0.2,0]Ս(0.4,0]为阈值区间判断相似性是否过低,可以得到相似性过低标志矩阵,如表2所示。
Table 2 标志矩阵
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
当某一列1的个数达到行数-1时,判断该列对应的胶囊为缺陷胶囊。最后将面积缺陷检测和RGB直方图缺陷检测的结果进行或运算得到最终的缺陷检测结果,将判定的结果在原始图片中标记出来,绿色框表示正常胶囊,红色框表示缺陷胶囊。
3 Experimental results and analysis
3.1 胶囊板位置获取
读入原始图像—>转变为灰度图片—>利用80*80的模板进行闭开运算去除黑色背景中可能存在的干扰—>二值化—>连通域识别获取胶囊板的中心位置和外接矩形的大小。
效果展示:
Fig.2 胶囊板定位结果
3.2 去雾算法增强对比度
利用2.1中获取得到的胶囊板的中心位置和外接矩形截取胶囊板的局部图像—>去雾处理—>转换到HSV空间—>设置HSV阈值提取胶囊成分—>变回RGB空间、灰度化—>中值滤波得到I_UnW_Gray—>开运算分离残余的背景和胶囊得到I_UnW_Gray_Open—>以I_UnW_Gray_Open为MAKER,I_UnW_Gray为MASK重构图像—>二值化
效果展示:
Fig.3 胶囊颗粒与背景分离结果
3.3 胶囊位置获取
开运算,分离粘连的胶囊—>闭运算填补胶囊的孔洞得到图像I_UnW_Gray_Close—>腐蚀得到图像I_UnW_Gray_Erode—>以I_UnW_Gray_Erode为MAKER,I_UnW_Gray_Close为MASK重构图像I_UnW_Gray_Re—>连通域识别获取每个胶囊的中心位置和外接矩形的大小
效果展示:
Fig.4 胶囊颗粒定位结果
3.4 胶囊位置校正
胶囊位置矩阵式重排列—>胶囊中心坐标校正—>胶囊的外接矩形长宽校正—>在原始图片中标记出每个胶囊的位置,绿色框为直接通过连通域识别出来的位置,蓝色框为通过中心位置校正后重新标记出的位置,红色框为通过外接矩形长宽校正后重新标记出来的位置
效果展示:
Fig.5 胶囊颗粒定位校正结果
3.5 基于二值图像面积占比的胶囊缺陷检测
利用校正后的胶囊位置和外接矩形从2.3节中的二值图像I_UnW_Gray_Re中截取出来二值胶囊图集IBW,同时将每个焦囊从原始图片中截取出来得到原始胶囊图集ISRC—>统计IBW中每张子图片中白色点数Nw—>计算ISRC中每张图片的灰度强度差权重来分离背景—>统计每张子图片中背景点数NB—>利用公式Nw/(NA-NB)计算面积占比—>如果胶囊的面积占比低于0.45时,判定为缺陷胶囊
效果展示:
Fig.7 胶囊与背景点数统计
3.6 基于RGB直方图相似性的胶囊缺陷检测
原始胶囊图集ISRC进行RGB直方图相似性判断—>获得相似性矩阵—>选取该表中相似性系数最大的值为参考值max,以(max-0.2,0]Ս(0.4,0]为阈值区间判断相似性是否过低,可以得到相似性过低标志矩阵—>当某一列1的个数达到行数-1时,判断该列对应的胶囊为缺陷胶囊—>将面积缺陷检测和RGB直方图缺陷检测的结果进行或运算得到最终的缺陷检测结果—>将判定的结果在原始图片中标记出来,绿色框表示正常胶囊,红色框表示缺陷胶囊
效果展示:
Fig.7 最终定位结果
过检:
Fig.7 过检图片
原因分析:第一排的三张图片因为曝光不均匀,导致在胶囊信息提取的过程中丢失了信息,导致在面积检测时胶囊占比太小,被过检为缺陷胶囊。第二排的图片在RGB直方图缺陷检测中过检也是因为这个原因,导致相同胶囊的RGB直方图相差很大,或者导致一些胶囊的RGB。
漏检:
Fig.8 漏检图片
原因分析:第一张的图片在RGB直方图缺陷检测中过检是因为曝光不均匀,导致相同胶囊的RGB直方图相差很大,或者导致一些胶囊的RGB。第二张图片也是因为曝光不均匀,导致背景中的阴影也识别为胶囊的轮廓,导致在面积检测时胶囊占比过大,被漏检为正常胶囊。
4 Conclusion
该方案能准确对胶囊定位,但是对于胶囊的缺陷检测方面还有较大的提升空间,需要加入其他的算法来降低过检和漏检。
References
[1]张明英. 图像特征相似性度量方法研究及应用[D].电子科技大学,2019.
基于MATLAB的胶囊缺陷检测相关推荐
- 基于MATLAB的道路缺陷自动识别
基于MATLAB的道路缺陷自动识别 1 背景 道路缺陷的类别包括路面结构性破损和功能性破损,而路面结构性破损是最常见的, 可以细分为龟裂.块裂.网裂.纵裂和横裂.研究和设计一套道路缺陷检测技术,开发高 ...
- HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测
HALCON示例程序check_blister_mixed.hedv药品胶囊缺陷检测 示例程序源码(加注释) 读入图片与显示相关设置 dev_close_window () read_image (I ...
- matlab对摄像头实时运动目标检测,基于Matlab实时运动目标跟踪检测系统
2012.03 COMPUTER SECURITY 17 学术.技术 基于 Matlab 实时运动目标跟踪检测系统 汪惠兰,林航飞,李赔龙 (同济大学 交通运输与工程学院,上海 201804) 摘 要 ...
- 基于matlab测量物体直径,基于MATLAB的零件尺寸检测误差分析的软件设计
ISSN1672-4305 CN12-1352/N 实 验 室 科 学 LABORATORY SCIENCE 第 14 卷 第 4 期 2011 年 8 月 Vol. 14 No. 4 Aug. 20 ...
- 论文研究 | 基于机器视觉的 PCB 缺陷检测算法研究现状及展望
前面分享了机器视觉在汽车行业与交通行业的应用,其实机器视觉在工业上的应用是最广泛也是最具挑战性的,其中PCB板缺陷检测一直是机器视觉待攻克的难题.印刷电路板(PCB)是电子零件的基板,需求量极大,承载 ...
- 基于MATLAB的疲劳驾驶检测系统
基于MATLAB的疲劳驾驶检测系统 设计内容(论文阐述的问题)疲劳驾驶检测系统以对驾驶员面部图像进行分析的方式来获取其疲劳信息,是一种智能检测系统.通过在车内安装固定摄像头实时采集驾驶员信息,将驾驶员 ...
- 基于Matlab的单基地雷达模拟检测和跟踪仿真(附源码)
目录 一.介绍 1.1 统计雷达模型 1.2 场景管理 1.3 扫描控制 二.场景-空中监视 2.1 雷达系统 2.2 参考目标和雷达环路增益 2.3 构建雷达 2.4 方案和目标 2.5 可检测性 ...
- 基于Halcon学习的缺陷检测【四】光伏电池片的指纹以及划痕检测【第一种方法】
此例子主要是为了把光伏电池片的指纹以及划痕标注出来. 总代码: *读取图片 read_image (Image, 'E:/研究生学习/电池片练习/手指印/截图.png') *清除窗口 dev_cle ...
- 基于Halcon学习的缺陷检测【五】光伏电池片的指纹以及划痕检测【第二种方法】
此例子主要是为了把光伏电池片的指纹以及划痕标注出来. 总代码: *读取图片 read_image (Image, 'E:/研究生学习/电池片练习/手指印/截图.png')*清除窗口 dev_cle ...
最新文章
- 人工智能基准(Benchmarking)再思考
- 从BERT、XLNet到MPNet,细看NLP预训练模型发展变迁史
- AFNetworking 3.0 源码解读(一)之 AFNetworkReachabilityManager
- event loop那些事儿
- android 视图覆盖,如何在Android中添加覆盖视图超过其他视图?
- (转)使用异步Python 3.6和Redis编写快速应用程序
- Spring Boot 2.3.3 正式发布!2.4.0 正式版即将发布!
- 方舟生存进化掉落物代码
- 电脑版美食大战老鼠放置html,美食大战老鼠2
- Profinet 协议
- opencv将透明PNG图片填充为白色背景
- [docker]dockerfile简介与应用
- 小学教育专业语文方向毕业论文怎么选题?
- Python画图实战之画沪深300的收益率
- 学完计算机专业英语感受,计算机专业英语感想
- 机器学习----矩估计方法
- 32位w7怎么升64位|w7系统32位升级64位教程
- Tmux 快捷键 速查表 简明教程
- 在线查看相机快门次数
- android控制板
热门文章
- 十年了,Hadoop的前世今生
- FL Studio中关于音符编辑的使用
- php transfer-encoding: chunked,【原创】关于HTTP协议的分块传输技术:Transfer-Encoding: chunked...
- python flask + js ajax + echarts 53万条招聘信息可视化系统的渣实现
- echarts地图文字重叠解决方案_echarts map 阴影(重叠)
- 决策易线上营销CRM,微信粉丝运营重要利器!
- 盘点模块化机房建设与传统建设的区别
- Onboarding
- 谷歌的android官方刷机,谷歌 Android 7.0 ROM刷机包 for Nexus 6P 官方固件最新版
- Linux 系统时间与网络时间不一致 时间同步