何小風(fēng)
(武漢理工大學(xué) 物理科學(xué)與技術(shù)系,湖北 武漢 430000)
靜電場(chǎng)描繪實(shí)驗(yàn)對(duì)于學(xué)生具象化理解靜電場(chǎng)非常有幫助. 靜電場(chǎng)描繪的實(shí)驗(yàn)儀器采用在紙上扎孔的形式記錄相應(yīng)的電勢(shì)點(diǎn),再把電勢(shì)相同的點(diǎn)用光滑的曲線連起來(lái)構(gòu)成等勢(shì)線. 教師在對(duì)學(xué)生的操作評(píng)分時(shí),如果像學(xué)生一樣逐個(gè)測(cè)量等勢(shì)圓的半徑會(huì)非常浪費(fèi)時(shí)間. 目前的解決方法是讓學(xué)生在坐標(biāo)紙上打點(diǎn)[1]或者按照1∶1的比例將打點(diǎn)的紙掃描成圖,通過(guò)計(jì)算機(jī)去測(cè)量[2]:這樣很方便地得到所有點(diǎn)的坐標(biāo),然后再得出半徑. 這種方法雖然準(zhǔn)確,但是也很費(fèi)時(shí),因?yàn)橐坏┐螯c(diǎn)數(shù)目較多,工作量會(huì)很大. 基于這些問(wèn)題,本文引入了計(jì)算機(jī)圖像識(shí)別技術(shù)來(lái)處理打點(diǎn)的紙,從而快速、準(zhǔn)確地解決了這個(gè)問(wèn)題.
靜電場(chǎng)描繪實(shí)驗(yàn)儀器的主體部分如圖1所示. 圓心接正極,一般設(shè)置為10.00 V,圓環(huán)接負(fù)極,為0 V. 不同型號(hào)的儀器所用的導(dǎo)電層材料可能不同. 當(dāng)然還有其他結(jié)構(gòu)的靜電場(chǎng)描繪儀器,本文主要以圖1所示類型的靜電場(chǎng)來(lái)進(jìn)行程序的編寫.
圖1 靜電場(chǎng)描繪儀器核心部件原理圖
學(xué)生通過(guò)圖1的實(shí)驗(yàn)儀器得到的操作結(jié)果如圖2所示. 圖2最外圈的點(diǎn)是圖1中圓環(huán)的內(nèi)環(huán)也即0 V等勢(shì)線的點(diǎn),其余的4圈由外到內(nèi)依次是1.00 V,3.00 V,5.00 V,7.00 V等勢(shì)線的點(diǎn). 最外圈主要用于后續(xù)對(duì)實(shí)際半徑的計(jì)算,內(nèi)4圈才是真正作為對(duì)學(xué)生操作的考核標(biāo)準(zhǔn).
圖2 學(xué)生上課時(shí)完成的打點(diǎn)圖
OpenCV(Open source computer vision library)[3]是開源的用于計(jì)算機(jī)視覺(jué)的庫(kù). OpenCV有很多圖形處理函數(shù),可以很方便地達(dá)到預(yù)期的處理效果. 而且OpenCV是基于計(jì)算機(jī)底層函數(shù)編寫的,運(yùn)行速度快. 基于這些優(yōu)點(diǎn),本文主要采用OpenCV來(lái)進(jìn)行程序的編寫.
獲得圖2所示的圖片后,使用Canny算子[4]獲取有效區(qū)域,提取各有效區(qū)域的輪廓并得到其圓心坐標(biāo),以最外圈的半徑和圓心標(biāo)定所有點(diǎn)的實(shí)際坐標(biāo).
先利用OpenCV的cvtColor函數(shù)[5]將圖2轉(zhuǎn)換成灰度圖. 原圖是彩色圖,有RGB 3個(gè)通道,數(shù)據(jù)量較大,通過(guò)轉(zhuǎn)換成灰度圖后只有1個(gè)通道,減小了數(shù)據(jù)量,可以加快程序運(yùn)行速度. 然后用OpenCV的Canny函數(shù)[6]調(diào)用剛剛得到的灰度圖,可以得到二值圖(只有黑白2色),其中黑色為背景,白色為有效區(qū)域. 最后用閉運(yùn)算[4]彌合各區(qū)域的缺陷點(diǎn),使其成為完整的圓形,這步使用OpenCV的morphologyEx函數(shù)[7]實(shí)現(xiàn),將函數(shù)的第2個(gè)參量設(shè)置為cv2.MORPH_CLOSE.
將2.1最終得到的圖形作為參數(shù)賦給OpenCV的findContours函數(shù)[8],即可獲得圖形中所用不連通的區(qū)域的外輪廓,也即所需要的各點(diǎn)輪廓. 然后對(duì)各點(diǎn)區(qū)域計(jì)算其形心坐標(biāo),即為該點(diǎn)的坐標(biāo). 將得到的所有的點(diǎn)畫在圖上,以紅色點(diǎn)作為標(biāo)識(shí),如圖3所示.
圖3 程序識(shí)別出所有點(diǎn),以紅點(diǎn)作為標(biāo)識(shí)
2.2得到的各點(diǎn)坐標(biāo)并非實(shí)際坐標(biāo),而是圖形的像素坐標(biāo),需要將其轉(zhuǎn)換成實(shí)際坐標(biāo). 圖2中最外圈的點(diǎn)為實(shí)驗(yàn)儀器電源負(fù)極也即圓環(huán)形電極的內(nèi)圈,它的半徑是定值,可測(cè)量,以它作為標(biāo)準(zhǔn),本實(shí)驗(yàn)所用儀器[9]圓環(huán)電極的內(nèi)徑為R0=70.0 mm.
接下來(lái)選取圖2最外圈的點(diǎn)來(lái)擬合圓,得出圓的半徑和圓心. 選取最常用的“米”字型的8個(gè)點(diǎn)進(jìn)行圓擬合. 在所有坐標(biāo)點(diǎn)中找以下8個(gè)點(diǎn):x坐標(biāo)的最大值和最小值,y坐標(biāo)的最大值和最小值,x+y的最大值和最小值,x-y的最大值和最小值. 找到這8個(gè)點(diǎn)后將它們畫到圖形中以黑色點(diǎn)標(biāo)識(shí),如圖4所示.
圖4 程序識(shí)別出最外圈的8個(gè)特征點(diǎn),用于擬合圓心和最外圈半徑,以黑色點(diǎn)作為標(biāo)識(shí)
這8個(gè)點(diǎn)用最小二乘法擬合圓[10]. 擬合后的結(jié)果并不理想,可以看到圓向左偏,如圖5所示.
圖5 藍(lán)色線是以最外圈的8個(gè)點(diǎn)進(jìn)行最小二乘法擬合所得到的圓
再以這8個(gè)點(diǎn)的x和y坐標(biāo)的平均值作為圓心O,以8個(gè)點(diǎn)到圓心O的距離的平均值作為半徑,得到的圓如圖6所示.
圖6 藍(lán)色線是以最外圈的8個(gè)點(diǎn)求平均值所得到的圓
比較圖5和圖6可以看到,平均值法明顯要優(yōu)于最小二乘法擬合得到的結(jié)果,所以采用這種方法得到的圓心O的坐標(biāo)和最外圈像素半徑R. 最后,用每個(gè)點(diǎn)到圓心O的像素距離,乘以最外圈實(shí)際半徑R0=70.0 mm,再除以最外圈像素半徑R,即可得到每個(gè)點(diǎn)到圓心O的實(shí)際距離.
運(yùn)用教材上的理論公式[9]計(jì)算各等勢(shì)線的半徑理論值,以相鄰2條等勢(shì)線半徑理論值的平均值作為分界進(jìn)行歸類,計(jì)算每條等勢(shì)線上所有點(diǎn)到圓心O距離的平均值作為該等勢(shì)線半徑的測(cè)量值. 分別以各等勢(shì)線半徑的理論值和測(cè)量值為半徑在原圖中畫出等勢(shì)線,如圖7所示,紅色線是以測(cè)量值為半徑,藍(lán)色線是以理論值為半徑,最外圈的2條線由于誤差很小重合了. 計(jì)算半徑的理論值與測(cè)量值的相對(duì)偏差,結(jié)果如表1所示.
表1 各等勢(shì)線半徑測(cè)量值與理論值的比較
圖7 各等勢(shì)線擬合圖
通過(guò)圖7中各點(diǎn)和等勢(shì)線的分布情況以及表1中計(jì)算得到的各等勢(shì)線的半徑、點(diǎn)數(shù)、相對(duì)偏差等信息,可以看到圖像識(shí)別得到的結(jié)果準(zhǔn)確率比較高.
程序的代碼由于使用的是OpenCV的函數(shù),運(yùn)行速度很快,平均每張圖片評(píng)分所需時(shí)間在1 s左右. 本程序仍然存在不足之處. 首先是圖形目標(biāo)區(qū)域外噪聲點(diǎn)對(duì)結(jié)果的影響較大. 目標(biāo)區(qū)域外的噪聲點(diǎn)會(huì)導(dǎo)致最外圈擬合時(shí)與真實(shí)值的偏差很大,從而使得整個(gè)后續(xù)的計(jì)算都會(huì)偏離正確值. 對(duì)于這個(gè)問(wèn)題,目前的解決方法是讓學(xué)生在拍攝圖片時(shí)盡量不要帶噪點(diǎn). 在下一步的程序中,嘗試加入去噪聲的代碼進(jìn)行優(yōu)化. 其次是本程序目前僅適用同心圓形狀的靜電場(chǎng),對(duì)于其他類型的靜電場(chǎng)暫時(shí)無(wú)法正確計(jì)算. 在接下來(lái)的工作中,將逐步解決其他類型的靜電場(chǎng)的計(jì)算.