图3.10 未经腐蚀处理的二值图像
图3.11 经十字形模板腐蚀后的二值图像
4 污点和划痕的检测方法
图片中污点的数量较多,所以主要检测污点,划痕和污点的检测方法类似,只是在后期做出区别。
图4.1 经过二值化辅助处理后的带有污点的晶片
4.1 一种检测污点的递归算法
对上述晶片进行阈值分割,腐蚀边缘后得到的污点图如下:
图4.2 处理后的污点图
从上图可以看出,污点的黑斑是离散分布的,要统计污点的数量和每一个污点的面积大小需要设计一个算法来实现。描述如下[3]:
(1)分配一段和样本图片文件大小相同的内存,用来标记每个点是否检测过。初始化每个点灰度值为255,代表所有的点都没有被检测过。
(2)对于像素点f(row,column),判断row,column是否在晶片区域内,不在就返回,在区域内就继续检测是否为白点。
(3)是白点,转而检测此白点的8邻域是否还有白点,没有就返回,有白点时计数器就自增计数,并且以新的白点作为起点,递归调用本函数,函数每调用一次计数器就加一。
(4)整个函数返回之后,检查计数器的值,如果大于某一个阈值则判断该区域为污点,继续查找下一个点,否则不记录。
对于单个像素点的算法设计流程图如下:
图4.3 污点检测的算法流程
根据以上分析写出的代码见ImageProcessing.cpp文件中的Edge_Zoom_Out函数,迭代函数为Mark_Stain。此迭代函数运行速度快,且代码清晰简练。
4.2 污点和划痕的分类检测
图4.4 同时带有污点和划痕的晶片图像
因为污点基本呈圆形,而划痕是长条状的,因此在分辨污点和划痕时主要从形状入手。下面简单介绍两种判别方法。
4.2.1 圆度判别法
首先求出污点面积A,然后求污点周长L。定义以下圆度判据[3]:
之所以称之为圆度,是因为当区域是圆形时,C的值为l,否则C大于l,然后根据经验给C设定一个阈值TC,当C的值小于阈值TC时,就判为污点,否则可判为划痕。
污点面积的求法为:依次由下到上搜索晶片区域,注意不可越界,不可搜索到不属于晶片位置的黑色区域。一旦发现暗点,计数器就计数。整个图像搜索完毕,计数器中的数值就是整个图像的暗斑面积。计算公式为:
其中R为晶片区域。
4.2.2 长宽比判别法
在检测污点的同时可以记录下该污点区域的像素点上下和左右的最大差值,将较大的值作为长,另一值作为宽,通过计算长宽比来判断该区域是污点还是划痕。
该比值越接近1,则越接近圆形污点。当该比值大于某一特定阈值TC时,则可将该污点视作划痕。
这种方法简单且便于实现,在不要求形状判别的情况下和第一种判别方法基本没有差别,准确度很高。因此本课题中的划痕和污点判别只使用此种方法。
5 实验结果和分析
5.1 实验结果
由于检测出的晶片缺陷有一部分可能是极细小的灰尘或污点,数量很多不便于一一显示出来,而且对于晶片本身又无重大影响,因此实验设定一个临界值,将面积大于此临界值的污点的面积标示出来,并注明污点面积大小。本次实验共测试了26张晶片样本图片,以下每次测试给出五张图片为例。
5.1.1 临界值设定为50的测试结果 VC++晶片内部缺陷处理+文献综述(9):http://www.youerw.com/jisuanji/lunwen_3066.html