本發(fā)明涉及光學(xué)顯微鏡領(lǐng)域,主要涉及一種圖像三維拼接方法,特別涉及通過預(yù)測(cè)樣品高度減少拼接幀數(shù)的方法。適用于顯微拍攝整體平整但存在平緩高度差的大面積樣品,如圖案晶圓、鑲埋金相樣塊、鑲埋顯微切片等。
背景技術(shù):
1、光學(xué)顯微鏡相對(duì)于其他光學(xué)拍照設(shè)備的特點(diǎn)是視野小、焦深小。數(shù)碼顯微鏡為了解決這兩個(gè)問題,分別采用平面拼接的方式拼接多視野獲得高清的大視野圖,通過景深疊加在不同景深下取圖使樣品各個(gè)高度都在最佳焦深附近。
2、物鏡與樣品表面的距離必須等于物鏡景深才能清晰成像。光學(xué)顯微鏡倍率越高、分辨率越高、物鏡數(shù)值孔徑必然越大,則焦深必然更小。當(dāng)樣品存在高度差時(shí),離焦產(chǎn)生的圖像模糊就更嚴(yán)重。所以目前數(shù)碼顯微鏡通常采用景深疊加的方式,在不同高度下進(jìn)行拍照,對(duì)視野內(nèi)不同區(qū)域選取清晰度最高的圖片,合成一張完整的清晰視野。
3、目前,光學(xué)顯微鏡圖像拼接方法有三種:直接二維拼接、輔助對(duì)焦二維拼接和全景深三維拼接。直接二維對(duì)有高度差的樣品存在離焦模糊問題。輔助對(duì)焦二維拼接需要增加輔助對(duì)焦模塊或激光對(duì)焦模塊,且同樣不適用高度差較大的樣品。全景深三維對(duì)每個(gè)視野遍歷所有景深高度,可以解決樣品高度差問題,但是測(cè)量幀數(shù)多、耗時(shí)長(zhǎng)、效率低。
4、本發(fā)明的顯微鏡快速三維拼接方法,不需要額外增加輔助對(duì)焦模塊或激光對(duì)焦模塊,而可以實(shí)現(xiàn)和全景深三維拼接一樣的清晰度,且具有比傳統(tǒng)全景深三維拼接更高的拼接速度。特別適用于對(duì)金相切片、晶圓等整體平整但存在輕微高度差的平面進(jìn)行大范圍顯微拍照。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明旨在設(shè)計(jì)一種,快速采集三維顯微拼接的方法。在三維顯微拼圖過程中,每個(gè)視野采集盡可能少的幀數(shù)。
2、測(cè)量前,先根據(jù)所選取的物鏡進(jìn)行計(jì)算最小z軸步距。顯微鏡物鏡最基本的參數(shù)是數(shù)值孔徑na,而使用cmos做圖像采集的數(shù)碼顯微鏡還有一個(gè)參數(shù)是標(biāo)定像素尺寸p,即該倍率下cmos像素間距對(duì)應(yīng)的實(shí)物距離。p=芯片像素間距/光學(xué)倍率。根據(jù)數(shù)值孔徑可以計(jì)算出半孔徑角θ。兩者的關(guān)系為:na=sin(θ),既θ=arcsin(na),通常z軸最小步距:h=(0.5·λ/na+p)/tan(θ),其中λ為光的波長(zhǎng)。對(duì)應(yīng)的彌散光斑半徑為r=0.5·λ/na+p,理論彌散光斑半徑像素?cái)?shù)為r?=?0.5·λ/na/p+1,此處的彌散光斑半徑是衍射光斑半徑基礎(chǔ)上增加的光斑半徑。
3、快速采集三維顯微拼接的方法適用的樣品分兩大類,從第二個(gè)視野開始分兩種種不同的視野選取和高度擬合方案。第一類是以圖案晶圓為代表大面積整體憑證的樣品,第二類是單個(gè)金相或切片樣塊為代表的小面積不完全平整樣品。
4、對(duì)于第一類樣品,分三個(gè)采集流程:首視野采集、離散視野預(yù)采集、連續(xù)視野采集。對(duì)于第二類樣品,采集分兩個(gè)流程:首視野采集、連續(xù)視野采集。
5、每個(gè)視野采集時(shí),先根據(jù)擬合數(shù)據(jù)預(yù)估其可能高度范圍,如果預(yù)估的可能高度范圍較大,超過6個(gè)最小步距,則對(duì)z軸采用雙極步距的方式,先以大步距從z預(yù)期高度從最高點(diǎn)向最低點(diǎn)移動(dòng),當(dāng)躍過清晰面后,再進(jìn)行z軸折返,以小步距從下往上采集。
6、首視野采集時(shí),為了保護(hù)物鏡防止撞擊,采用物鏡先抬起后下降的方式。在起始處拍照后,物鏡抬起并不斷拍照,此時(shí)每幀高度差取3~5個(gè)最小步距,計(jì)算每張圖片的清晰圖。如果第二幀的清晰度低于第一幀,物鏡折返變?yōu)橄陆?。無論物鏡上升還是下降,當(dāng)清晰度開始下降時(shí),清晰度最高和次高的兩個(gè)z高度即為樣品高度加最佳景深所在范圍。確定高度范圍后,物鏡再次折返,以小步距拍照。
7、離散視野預(yù)采集,先對(duì)少數(shù)離散的視野進(jìn)行預(yù)先采樣進(jìn)行初次擬合。比如對(duì)于10×10個(gè)視野的樣品,第1-4個(gè)視野取總拍照范圍的四個(gè)角。對(duì)于600×400個(gè)視野的樣品,可以以100個(gè)視野距離間距去(6+1)×(4+1)=35個(gè)不連續(xù)視野。每個(gè)視野采集時(shí),以首視野高度為起始,采用和首視野一樣的采集方式。
8、連續(xù)視野采集,根據(jù)已采集的視野內(nèi)所有點(diǎn)的高度,用最小二乘法進(jìn)行擬合,預(yù)估出該視野可能的高度范圍。如果高度范圍超過6個(gè)最小步距,則對(duì)z軸采用雙極步距的方式,先以大步距從z預(yù)期高度從最高點(diǎn)向最低點(diǎn)移動(dòng),當(dāng)躍過清晰面后,再進(jìn)行z軸折返,以小步距從下往上采集。
9、為了評(píng)價(jià)每幀采樣的清晰度,采用laplacian算符計(jì)算圖像的梯度。示例代碼為:
10、img?=?img.astype(np.float32)
11、dimg?=?cv2.laplacian(img,?-1,ksize?=?5)?#laplacian算符
12、dimg?=?dimg?*dimg?#對(duì)laplacian結(jié)果,逐個(gè)點(diǎn)取平方
13、dimg?=?cv2.gaussianblur(img,(k,?k),?0)?#高斯模糊
14、limg?=?dimg?[:,:,0]+dimg?[:,:,1]+dimg?[:,:,2]?#紅綠藍(lán)三個(gè)圖層梯度求和
15、simg?=?np.sum(limg?)
16、其中k為高斯模糊的高斯核的大小,k通常根據(jù)理論彌散光斑半徑像素?cái)?shù)為r?=0.5·λ/na/p+1計(jì)算,取r的整數(shù)部分乘二倍加一。
17、k=int(r*2)+1
18、當(dāng)物鏡沿z周移動(dòng)時(shí),simg?的變化反應(yīng)了離焦的程度。simg?增加說明在靠近最佳高度,當(dāng)simg?開始減少,則說明物鏡正在遠(yuǎn)離最佳高度。如果此時(shí)的布局大于最小步距,需要折返并以最小步距采集。如果已經(jīng)是最小步距,說明該視野采集結(jié)束。
19、每個(gè)視野采集完成后,需要生成該視野的3d數(shù)據(jù),用于擬合整體高度,預(yù)測(cè)其他視野的高度。對(duì)該視野的每幀計(jì)算limg?后,每個(gè)像素獲得一個(gè)離散的高度梯度函數(shù),實(shí)際樣品高度是梯度最大值,由于拍照時(shí)z軸步距取的離散值,所以該像素的實(shí)際高度介于最高梯度的高度和次高梯度的高度之間。設(shè)最高梯度和高度是l0/z0,最高梯度和高度上一幀梯度和高度是l1/z1,最高梯度和高度下一幀梯度和高度是l2/z2。由于z周取等距。計(jì)算得到該點(diǎn)的高度:
20、z=((l0-l1)*(z1^2-z2^2)+(l2-l1)*(z0^2-z1^2))/(2*((l0-l1)*(z1-z2)+(l2-l1)*(z0-z1)))每幀獲得一個(gè)對(duì)應(yīng)的梯度圖。每個(gè)同一xy坐標(biāo),在各幀中取該像素limg最大的一幀的高度為該像素的高度。
21、連續(xù)視野采集時(shí),為了盡可能的減少采集幀數(shù),需要在每個(gè)視野采集前對(duì)視野高度進(jìn)行預(yù)測(cè)。樣品的高度曲面可以視為一個(gè)二元函數(shù)z=h(x,y),已測(cè)視野每個(gè)點(diǎn)的高度都是已知的,即該曲面附近的點(diǎn):z1≈h(x1,y1),z1≈h(x1,y1),……zn≈h(xn,yn)。根據(jù)這些點(diǎn)擬合出z=h(x,y)。在擬合曲面基礎(chǔ)上,計(jì)算已測(cè)視野各點(diǎn)高度相對(duì)于擬合面的高度差,取高度差的方差作為高度偏差。把新視野范圍內(nèi)各點(diǎn)xy坐標(biāo)帶入擬合曲面,獲得新視野擬合高度圖。在擬合高度圖最高點(diǎn)基礎(chǔ)上加高度差獲得最高點(diǎn)值,在擬合高度圖最低點(diǎn)基礎(chǔ)上減高度差獲得最低點(diǎn)值。然后就可以對(duì)新視野進(jìn)行景深疊加采集了。
22、高度曲面函數(shù)的選擇。進(jìn)行函數(shù)擬合時(shí),需要先給出二元函數(shù)z=h(x,y)的形式,一般來說二次冪律函數(shù)即可滿足需求,即:h(x,y)=ax^2+by^2+cxy+dx+ey+f?。
23、為了增加擬合速度,對(duì)所有視野的高度圖進(jìn)行壓縮,推薦采用cv2.inter_area壓縮算法,將相鄰的2*2個(gè)像素或4*4個(gè)像素取平均值。對(duì)于底層算法編程,可以進(jìn)一步由取平均值簡(jiǎn)化為取和。每個(gè)視野測(cè)完后,只對(duì)該視野內(nèi)的點(diǎn)加入擬合數(shù)據(jù),無需重新擬合。
24、擬合計(jì)算h(x,y)的示例python代碼如下:
25、for?……:?#每個(gè)視野拍攝結(jié)束后循環(huán)一次
26、????#?imgz為壓縮后的高度圖,是一個(gè)width*height的矩陣
27、????#?width?height?為該視野的寬高像素?cái)?shù),?x0,y0為該視野在整個(gè)拍攝區(qū)域內(nèi)的坐標(biāo)
28、????#?生成每個(gè)像素點(diǎn)的x和y坐標(biāo)
29、????x,?y?=?np.meshgrid(np.arange(width),?np.arange(height))
30、????#?將x,?y,?z展平
31、????x?=?x.ravel()+x0
32、????y?=?y.ravel()+y0
33、????z?=?z.ravel()
34、????#?構(gòu)建設(shè)計(jì)矩陣?x
35、????x?=?np.column_stack((x?**?2,?y?**?2,?x?*?y,?x,?y,?np.ones_like(x)))
36、????#?逐步更新設(shè)計(jì)矩陣和目標(biāo)向量
37、????if?x_total?is?none?and?z_total?is?none:
38、????????x_total?=?x
39、????????z_total?=?z
40、????else:
41、????????x_total?=?np.vstack((x_total,?x))
42、????????z_total?=?np.hstack((z_total,?z))
43、????#?擬合并更新系數(shù)
44、????coeffs?=?fit_and_update(x_total,?z_total,?coeffs?if?idx>0?elsenone)
45、????#?提取最終系數(shù)
46、????a,?b,?c,?d,?e,?f?=?coeffs
47、????print(f"h(x,?y)?=?{a}x^2?+?y^2?+?{c}xy?+?xv3r9jzsqgx?+?{e}y?+?{f}")
48、經(jīng)過測(cè)試,得到h(x,y)的形式后,計(jì)算所有已測(cè)點(diǎn)z值相對(duì)于h(x,y)的偏差的標(biāo)準(zhǔn)差s,并把待測(cè)區(qū)域各點(diǎn)坐標(biāo)逐個(gè)帶入h(x,y)得到待測(cè)區(qū)域高度預(yù)測(cè)圖,高度預(yù)測(cè)圖的最高點(diǎn)加s即為預(yù)期高度范圍最高值,高度預(yù)測(cè)圖的最低點(diǎn)-s即為期高度范圍最低值。
49、由于計(jì)算h(x,y)采用的是壓縮的xyz數(shù)據(jù),計(jì)算標(biāo)準(zhǔn)差和新區(qū)域各點(diǎn)高度計(jì)算也采用壓縮后的xy坐標(biāo)。經(jīng)過測(cè)試,500萬像素的相機(jī)經(jīng)過2*2壓縮后采用以上算法,占用單個(gè)cpu核心,每個(gè)新視野耗時(shí)在0.05秒以內(nèi)。該耗時(shí)為每個(gè)視野結(jié)束后的預(yù)測(cè)耗時(shí),考慮到顯微鏡xy移動(dòng)需要時(shí)間,不會(huì)因?yàn)橛?jì)算產(chǎn)生額外的時(shí)間消耗。
50、說明書附圖:
51、圖1:半孔徑角θ與物理孔徑、工作經(jīng)歷的關(guān)系。
52、圖2:彌散光斑半徑r極限值與離焦距離h的關(guān)系。
53、圖3:z軸折返的示意圖。