论文名称:Defect detection in patterned wafers using anisotropic kernels

作者:Maria Zontak and Israel Cohen

期刊名称:Machine Vision and Applications

刊号页码:February 2010, Volume 21, Issue 2, pp 129-141


 阅读文章前,建议先至 Google 搜寻下载此论文。

 

这篇论文属于影像处理研究领域中的瑕疵侦测,

侦测的应用对象是半导体晶元(Wafer)

如果大家不懂什么是 Wafer 的话,可以点一下上面的超连结,

看看 Wafer 的照片。

不过,这篇论文研究的影像,来自于电子显微镜下的 Wafer,

所使用的电子显微镜有些特别,叫做扫描式电子显微镜,

英文是:Scanning Electron Microscope(SEM)。

SEM 拍出来的照片可以到 Wiki 看一下,挺特别的。

 

在晶元的制造过程中,有各种造成瑕疵的原因,

例如杂物掉落、印刷失误、蚀刻异常。

本论文想要使用影像处理的方式,自动检测出瑕疵。

作者采用的方法,是影像比对法。

简单说,就是拿一张没有瑕疵的晶元影像,

然后再拿一张待测的晶元影像,

两者互相比较,如果相似,表示待测影像内没有瑕疵,

如果有些位置不太相似,就表示待测影像内存在瑕疵。

 

在影像处理基本课程里,大家可能学过「影像相减」,

两张影像相减之后取绝对值,大的数值表示差异大。

用影像相减法来侦测瑕疵可行吗?这要看影像的性质。

以晶元的 SEM 影像来说,每次制造的晶元长得都不太一样,

可能在微米、奈米等级有些许差异。

对于半导体制造来说,这些许差异不影响晶元品质,

所以在晶元影像判读上都会表示正常。

然而对于「影像相减法」来说,

该方法会把所有差异都找出来,导致误报(False Alarm);

又假如瑕疵不甚明显时,则影像相减后的结果,

可能无法分辨是晶元的差异还是瑕疵的差异,

导致漏报(Miss)。

因此,本论文的重点价值就在于它的影像比对方法,

可以接受晶元本身有些许的差异,又可以找出瑕疵。

 

下面开始介绍论文所使用的瑕疵检测方法。

假设无瑕疵的影像,称为参考影像 g,

要检测的影像,称为待测影像 f。

怎么知道影像中某一个点 p 是否相似呢?

作者认为,不能只看 p 这个点,

而要看点 p 附近的整个区域 。

也就是说,如果 g(p) 附近和 f(p) 附近相似,

那么就判定两张影像在 p 点是相似的。

这个观念其实和平滑化(Smoothing)有些相同。

只是作者不采取平滑化后直接影像相减,

因为在电子显微镜底下,影像像素可能代表著微米,

以半导体制程来说,可能连一个像素的瑕疵都要抓出来。

如果对原始影像直接采用平滑化处理,

将把一个像素的瑕疵给消除掉了,结果瑕疵检测不出来。

因此,是否要做影像平滑化处理,还是需要看应用对象。

 

作者比较 g(p) 和 f(p) 是否相似的方法如下。

首先以 p 为中心,

在参考影像 g 上复制一个大小为 s 的区块。

因为待测影像与参考影像可能有些许误差,

所以要检查 p 附近的所有 r 个位置。

因此,以 p+r 为中心,(共有 r 个不同的中心点)

在待测影像 f 上复制出 r 个大小为 s 的区块。

 

我在这边解释一下作者可能的思路。

传统影像处理的影像相减法,只有比对点 p。

稍微进步一点,可能把 p 为中心的区块拿出来比。

作者的想法是,参考影像拿出以 p 为中心的区块,

待测影像拿出 p-2、p-1、p、p+1、p+2 ...为中心,

把 p 附近的区块都拿出来,共 r 个区块,

都拿来和参考影像的区块比较。

待测影像的 r 个区块,分别和参考影像的区块比较,

比较完之后会得到 r 个区块比较结果,

再把这 r 个比较结果加总起来。

这就是参考影样和待测影像在点 p 上的比较结果。

 

观念讲完,还没讲到的部分是「区块如何做比较」。

作者分成两个步骤,首先是把区块的差异当成向量,

计算向量的长度;然后把该长度丢入一个指数函数里。

下面就直接举例。假设区块的大小是 2×2,

参考影像的区块是:

1 2

3 4

待测影像的区块是:

9 8

7 6

我们先把它们两两相减,得到:

(9-1)  (8-2)

(7-3)  (6-4)

等于

8 6

4 2

然后,再把这差异值取平方,加总起来

8*8 + 6*6 + 4*4 + 2*2 = 120

再开根号,得到  a = sqrt( 120 ),

这个数值 a 就是向量的长度。

 

然后,把这个数值 a 丢到指数函数里,

计算出区块的比较值 c:

c = exp (- (a / e) )

上面公式里的 e 是控制参数,要由使用者去调整。

 

回忆一下前面,我们有 r 个区块,

所以要算出 r 个比较值。

把这些比较值加起来,

就是两张影像在位置 p 的相似度。

相似度低的点,就判定是待测影像的瑕疵。

 

讲到这里,已经把整篇论文的方法讲完了。

不过,如果大家手边正拿著这篇论文,

比照一下我所讲的话,可能会觉得有些疑问。

 

第一个疑问。

作者的方法,是把 r 个比较值正规化之后,

乘上 r 个点所对应的像素值 f(p+r),

加总得一个预估的待测像素值 f'(p),

如果 f'(p) 的数值接近 0,则 p 点判定为瑕疵。

为什么我省略了预估像素值的步骤,

只使用 r 个比较值呢?

 

原因很简单,因为不合理。

大家想像一下,如果待测影像整体的亮度偏暗,

那么无论区块比较值 c 的大小如何,

跟待测影像的像素值相乘的结果,依旧是小的。

然而,区块比较值 c 如果大,表示两区块相似。

因此,作者的演算法,画蛇添足了。

 

第二个问题。

作者的论文方法明明写了好几页,

为何我讲得很短又简单?

 

我必须说,这就是作者能投稿期刊论文的功力。

文章里有太多灌水,许多公式有推导与计算,

但是真正跟检测方法有关的部分却很少,

事实上,作者的方法就是这么简单。

但是作者能把方法讲得很难,论文写成你看不懂。

我用 Matlab 实做出作者的演算法,

用不到 30 行程式码,大家说简单不简单。

 

第三个问题。

论文上有一个很复杂的东西,叫做滤波器向量,

d-vector filters G = (g1, g2, ..., gd)

把影像中某个点,以 d 种滤波器做旋积计算。

怎么在我的介绍里面没讲到这个?

 

因为作者根本没有用到旋积啊!那是假象!

作者的滤波器向量,它真正有采取的动作,

其实就只是把区块内的像素一个一个取出来,

也就是把 2 维矩阵资料,排成一维向量资料。

例如:

1  2

3  4

变成

1  2  3  4

就是这么简单。

但是作者厉害的是,他可以写成向量滤波器,

然后还连续引用两篇参考文献 [16] 和 [30],

说他这组滤波器是采用别人的论文设计,

好像一副很了不起的样子。

其实说穿了,根本没什么。

 

最后一个问题。

论文的题目上有一个单字 Kernel,怎么我没提到?

 

喔~其实有的,Kernel 就是指数函数的那玩意。

按照 Kernel Function(核函数)的定义,

它就是一个二元的向量函数 H(v, v')。

只是,作者在此使用的 Kernel 很简单,

令 a = sqrt( vTv' ),则作者的 Kernel 为

H(v, v') = exp ( - (a / e) )

我不禁要赞叹,作者用艰涩名词介绍简单数学的实力。

 


 

论文的介绍到此结束。下面是个人的一些心得。

首先,本论文的方法虽然简单,

但是作者提供了一个很复杂的数学框架,

让后续研究者能容易抽换演算法的部分流程。

 

什么框架呢?第一是 Kernel Function,

虽然作者采用的公式很简单,

但是现有的核函数有几十种,

有线性的、有指数的、有复数的、有双曲线的

每一种效果都不一样。

对于后续研究者来说,可以尝试不同的核函数,

搞不好可以得到比作者的实验更好的成果。

 

第二个框架是向量滤波器。

虽然作者只是单纯地把每个点摆成一维资料,

没有做任何处理。

但我们不妨可以尝试修改一下滤波器内容,

如果每个点的旋积滤波器,是 Sobel 运算子,

那么经由计算后得到的一维资料,

就不是原本的影像资料,而是一堆边资讯。

对于后续研究者来说,可以尝试不同的滤波器。

 

从影像处理的演算法来说,作者的方法看似平凡,

但从数学的角度来看,作者提供一个很棒的框架。

我觉得这个框架是论文的精华。

 

我们国内关于影像处理的硕士论文很多,

每个硕士生都有很棒的构想与创意。

但多数是见招拆招,看一个问题就设计一个解法。

也许可以多多思考,如何设计一个框架,

让演算法的各个步骤可以容易替换。

 


 

李侑青,资讯工程博士

影像处理, Image Processing, 瑕疵检测, Defect Detection

相关文章