孫麗君 曾祥潘 吳俊杰
摘要:本實(shí)驗(yàn)利用計(jì)算機(jī)圖形學(xué)開展科學(xué)實(shí)驗(yàn),抽取兩組樣本,獲取數(shù)據(jù)進(jìn)行分析,對植物果實(shí)輪廓特征進(jìn)行差異性檢驗(yàn),以驗(yàn)證對樣本數(shù)據(jù)存在差異的假設(shè)。讓學(xué)生體驗(yàn)如何利用計(jì)算機(jī)解決這一類生活中的實(shí)際問題。
關(guān)鍵詞:差異性檢驗(yàn);科學(xué)實(shí)驗(yàn);輪廓特征;數(shù)據(jù)分析
中圖分類號:G434 ?文獻(xiàn)標(biāo)識碼:A ?論文編號:1674-2117(2022)13-0073-03
“橘生淮南則為橘,生于淮北則為枳,葉徒相似,其實(shí)味不同。”這句話出自《晏子使楚》。那么,橘與枳的外表輪廓是否也存在顯著的差異性呢?這就需要進(jìn)行差異性檢測,可以利用計(jì)算機(jī)圖形學(xué)開展科學(xué)實(shí)驗(yàn),獲取數(shù)據(jù)進(jìn)行分析,以檢測事物的差異性。差異性檢驗(yàn)可以用于檢測兩組小樣本數(shù)據(jù)之間是否存在顯著差異,如檢測南方人和北方人身高是否存在差異性、檢測兩所學(xué)校中學(xué)生成績是否存在差異性等。
本實(shí)驗(yàn)研究在已經(jīng)檢驗(yàn)了植物果實(shí)投影面積正態(tài)分布的基礎(chǔ)上,進(jìn)一步抽取兩組小樣本,進(jìn)行輪廓特征的差異性檢驗(yàn)。首先將OpenCV使用在Python中,進(jìn)行植物果實(shí)圖像處理,完成輪廓特征數(shù)據(jù)的采集,然后利用R語言進(jìn)行兩組植物果實(shí)輪廓特征數(shù)據(jù)的差異性檢驗(yàn),讓學(xué)生體驗(yàn)如何利用計(jì)算機(jī)解決生活中的這一類實(shí)際問題。
● 設(shè)計(jì)思路
本實(shí)驗(yàn)以櫻桃不同的種類為研究樣本,把它們分為兩組進(jìn)行差異對比,這兩組分別是:大紅櫻桃和大黃櫻桃之間、小櫻桃中隨機(jī)抽取的兩組樣本之間。通過日常對櫻桃的了解,可以假設(shè)大紅櫻桃和大黃櫻桃存在一定的差異,而小櫻桃間假設(shè)沒有明顯差異。下面,通過實(shí)驗(yàn)來驗(yàn)證前面的假設(shè)。
首先,利用OpenCV獲取不同種類的櫻桃的輪廓特征、投影面積和寬高比;其次,利用R語言對兩組樣本進(jìn)行數(shù)據(jù)分析,并繪制統(tǒng)計(jì)圖,檢驗(yàn)樣本間的差異性,驗(yàn)證假設(shè)。
● 實(shí)驗(yàn)準(zhǔn)備
不同種類的櫻桃小樣本(小樣本數(shù)量一般以30為界,不超過30的為小樣本,本實(shí)驗(yàn)準(zhǔn)備的是大紅櫻桃、大黃櫻桃各30枚,小櫻桃60枚),裝有Python、R語言的計(jì)算機(jī),源代碼等文件。
● 實(shí)驗(yàn)過程
1.采集樣本
當(dāng)下正值櫻桃上市的季節(jié),而且櫻桃品種多樣,因此其成為首選樣本。要將不同種類的櫻桃利用計(jì)算機(jī)進(jìn)行差異性檢驗(yàn),就要將樣本數(shù)字化。這里像本欄目上期文章中做正態(tài)分布檢驗(yàn)一樣,首先要對樣本進(jìn)行拍照,這是一個(gè)比較耗費(fèi)時(shí)間和體力的工作,但樣本的位置、擺放角度還有拍攝環(huán)境等都是需要注意的細(xì)節(jié),這樣才能獲取真正有價(jià)值的數(shù)據(jù)。
先將圖片導(dǎo)入到計(jì)算機(jī),再利用圖像處理軟件進(jìn)行批量操作,如裁切、調(diào)整大小等,最后按照不同分類統(tǒng)一重命名,以備使用。
2.提取特征
使用OpenCV可以查找圖像輪廓的不同特征,如面積、周長、寬高比等。通過繪制圖像輪廓,提取圖像特征,計(jì)算各類櫻桃的投影面積和寬高比。
(1)計(jì)算投影面積
計(jì)算櫻桃的投影面積,相當(dāng)于識別它的“大小”,計(jì)算方法大體與本欄目上期文章中計(jì)算小番茄面積方法一致,需要先將圖片進(jìn)行灰度化和二值化處理,然后通過獲取連通域繪制櫻桃的輪廓,最后通過圖像輪廓計(jì)算得到圖像的面積。代碼如圖1所示。
這里需要注意的是,在計(jì)算大黃櫻桃投影面積時(shí),需要更改cv2.threshold()中的參數(shù),顏色閾值127改為155,才可以準(zhǔn)確識別大黃櫻桃的輪廓面積。
(2)計(jì)算寬高比
計(jì)算櫻桃輪廓的寬高比,相當(dāng)于識別它的“胖瘦”,在OpenCV中可以通過在找到的圖形外圍繪制外接矩形邊框的方法(如圖2),計(jì)算寬高比。通過函數(shù)cv2.boundingRect()獲取輪廓的范圍,返回外接矩形的四個(gè)參數(shù)——x,y,w,h,其中(x,y)是矩陣左上角坐標(biāo),w,h為矩陣的寬和高,并用函數(shù)cv2.rectangle()畫出矩形。最后,計(jì)算出邊界矩形的寬高比,即櫻桃的寬高比。代碼如圖3所示。
(3)導(dǎo)出數(shù)據(jù)
導(dǎo)出數(shù)據(jù)的過程也與前面文章中導(dǎo)出投影面積數(shù)據(jù)的步驟相似,通過在Python中導(dǎo)入xlwt庫,創(chuàng)建不同的工作表,將投影面積數(shù)據(jù)和寬高比數(shù)據(jù)分別批量自動記錄到不同的工作表中,種類設(shè)置大紅櫻桃為R,大黃櫻桃為Y,小櫻桃1組為LA,小櫻桃2組為LB。代碼如圖4所示。
● 數(shù)據(jù)分析
要比較兩組小樣本數(shù)據(jù)是否存在差異性,可以使用R語言來進(jìn)行檢驗(yàn),并繪制圖像,進(jìn)行直觀分析。
1.差異性檢驗(yàn)
這里首選T檢驗(yàn),它用于檢驗(yàn)兩個(gè)樣本總體均值是否一致,適用條件是小樣本、數(shù)據(jù)服從正態(tài)分布、方差齊性。因此,在做T檢驗(yàn)前,首先要對兩組小樣本進(jìn)行正態(tài)性檢驗(yàn)和方差齊性檢驗(yàn)。本欄目上期文章中用實(shí)驗(yàn)驗(yàn)證過植物果實(shí)投影面積等特征是符合正態(tài)分布的,在這里對小樣本數(shù)據(jù)將再次驗(yàn)證。
①正態(tài)性檢驗(yàn)。在導(dǎo)入數(shù)據(jù)后,通過Shapiro-Wilk進(jìn)行正態(tài)性檢驗(yàn),分別對大紅櫻桃和大黃櫻桃(簡稱RY)的投影面積和寬高比進(jìn)行檢驗(yàn),對兩組小櫻桃樣本(簡稱LALB)也進(jìn)行正態(tài)性檢驗(yàn)。對RY投影面積數(shù)據(jù)的正態(tài)性檢驗(yàn),運(yùn)行代碼結(jié)果如圖5所示。
由圖5可知,兩個(gè)p-value均大于0.05,說明兩組數(shù)據(jù)均符合正態(tài)分布。經(jīng)檢驗(yàn),所有樣本的輪廓特征數(shù)據(jù)均符合正態(tài)分布。
②方差齊性檢驗(yàn)。方差齊性檢驗(yàn)是對兩樣本方差是否相同進(jìn)行的檢驗(yàn)。這里將使用F檢驗(yàn)來檢驗(yàn)方差齊性,可以使用var.test()函數(shù)來完成,對RY投影面積的方差齊性檢驗(yàn),運(yùn)行結(jié)果如圖6所示。
在F檢驗(yàn)中,p-value=0.7072>0.05,因此認(rèn)為RY兩組數(shù)據(jù)的方差之間沒有顯著差異。經(jīng)檢驗(yàn),所有樣本的輪廓特征數(shù)據(jù)總體滿足方差齊性。
③T檢驗(yàn)。兩組數(shù)據(jù)獨(dú)立,呈正態(tài)分布,且滿足方差齊性,因此可以使用T檢驗(yàn)來進(jìn)行兩組數(shù)據(jù)的差異性檢驗(yàn)。通過函數(shù)t.test()實(shí)現(xiàn)差異性檢驗(yàn),如RY投影面積的檢驗(yàn)如圖7所示。
p-value=1.133e-07<0.05,說明RY的投影面積有顯著差異,且經(jīng)檢驗(yàn),寬高比p-value=0.02105<0.05,同樣說明RY寬高比有顯著差異。而兩組小櫻桃LALB的差異性檢驗(yàn)結(jié)果,投影面積p-value=0.8612>0.05,寬高比p-value=0.3749>0.05,驗(yàn)證假設(shè):大紅櫻桃和大黃櫻桃的兩個(gè)輪廓特征數(shù)據(jù)有顯著差異,兩組小櫻桃間的輪廓特征數(shù)據(jù)沒有顯著差異。
3.繪制組間差異柱狀圖
柱狀圖是差異可視化的一種表現(xiàn)形式,這里用R語言來繪制組間差異柱狀圖,主要使用的是功能強(qiáng)大的R包ggplot2來實(shí)現(xiàn)。在導(dǎo)入ggplot2包后,讀入樣本數(shù)據(jù),通過ggplot()函數(shù)開始繪制圖層。從柱狀圖可以直觀看出,兩組數(shù)據(jù)資料間存在顯著差異。組間差異柱狀圖為差異性檢驗(yàn)提供了一種可視化方法。
● 總結(jié)
本實(shí)驗(yàn)在Python中使用OpenCV加工處理圖像,獲取多組植物果實(shí)的輪廓特征,并導(dǎo)出數(shù)據(jù)資料。在此基礎(chǔ)上,使用R語言進(jìn)行數(shù)據(jù)分析,對小樣本數(shù)據(jù)進(jìn)行組間的差異性檢驗(yàn),以此驗(yàn)證問題假設(shè)。