廖學(xué)成,宋燕燕
(南京傳媒學(xué)院,江蘇 南京 211172)
計算機(jī)領(lǐng)域,經(jīng)過處理的數(shù)字圖像可以被運用在不同的行業(yè)當(dāng)中,例如,在影視處理領(lǐng)域中,可以通過對數(shù)字圖像進(jìn)行處理從而得到驚艷的特效;在醫(yī)療影像領(lǐng)域中,圖像處理常常被用來識別病灶;在衛(wèi)星遙感領(lǐng)域中,圖像處理經(jīng)常被用來切割各種衛(wèi)星遙感地圖,從而提取出有價值的信息等。
傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)由神經(jīng)元和計算關(guān)系組成,不同的神經(jīng)元之間有著極為復(fù)雜的計算關(guān)系,這些不同計算關(guān)系都有一個權(quán)重,并在進(jìn)行模型訓(xùn)練的過程中不斷地調(diào)整這些權(quán)重[1]。如圖1所示為傳統(tǒng)意義上的神經(jīng)網(wǎng)絡(luò),每層節(jié)點都和上一層節(jié)點相連接,構(gòu)成全連接網(wǎng)絡(luò),其缺點為參數(shù)眾多、冗余度大、難以訓(xùn)練。
圖1 神經(jīng)網(wǎng)絡(luò)
假設(shè)輸入一張像素為100×100的圖像,全連接層的每個神經(jīng)元都有將近10 000個權(quán)重參數(shù),極易產(chǎn)生過擬合[2]。為了解決這一問題,通常在該神經(jīng)網(wǎng)絡(luò)上添加卷積運算,構(gòu)成卷積神經(jīng)網(wǎng)絡(luò)[3]。
卷積運算公式為
(1)
其中,t為全局時間變量。卷積函數(shù)不僅可以是連續(xù)的曲線[4],還可以是離散的形式。因此公式(1)可以改寫為:
(2)
卷積神經(jīng)網(wǎng)絡(luò)由輸入層、卷積層、激活函數(shù)、池化層、全連接層組成[5],如圖2所示。
圖2 卷積神經(jīng)網(wǎng)絡(luò)
傅里葉描述子的作用是用來對特定物體創(chuàng)造一個特征圖像的,即只截取符合特征值的圖像[6]。從線性代數(shù)的角度思考,傅里葉描述子其實就是用一個高維的向量去描述一個物體。其計算公式為
z(t)=x(t)+μy(t)
(3)
其中,u為復(fù)數(shù)表示法;函數(shù)z為一個經(jīng)過處理只有輪廓圖的圖像,并且將所得圖像通過復(fù)變函數(shù)表達(dá)。
一般來講,在實驗的過程中,理想的輪廓提取和實際的輪廓提取總會產(chǎn)生一定的差距。為了很好地解決這些差距,通常會定義一個損失函數(shù)來度量模型預(yù)測的輪廓與實際輪廓之間的差距[7]。本文通過計算點到輪廓的距離來定義損失函數(shù)。
假設(shè)在讀取的手勢圖像中有2點P1(x1,y1)和P2(x2,y2),為了計算這2點的歐幾里得空間中的直線距離,其計算公式如下:
(4)
其中,d為歐式距離;(x1,y1)和(x2,y2)分別為2個點的坐標(biāo)。公式(4)中的平方根運算表示計算2個點在坐標(biāo)軸上的距離差的平方和的平方根。
公式(4)可以推廣到更高維度的歐幾里得空間中,其中每個點可以有更多的坐標(biāo)值。在三維空間中,公式會進(jìn)一步擴(kuò)展為:
(5)
首先獲取實時手勢圖像,然后進(jìn)行圖像預(yù)處理,包括圖像增強(qiáng)、圖像銳化等提高圖像清晰度[8]。接著計算手勢特征值提取輪廓,采用 YCrCb 顏色空間中的Cr分量并結(jié)合閾值分割算法進(jìn)行二值化,輸出切割圖像。最終確定當(dāng)前手勢,獲取手勢信息?;?OpenCV 的手勢識別流程如圖3所示。
圖3 手勢識別流程
從攝像頭或視頻中獲取手部圖像幀,將圖像轉(zhuǎn)換為灰度圖像進(jìn)而調(diào)整對比度。轉(zhuǎn)換的實現(xiàn)過程是使用OpenCV中的“cv2.cvtColor()”函數(shù),并將轉(zhuǎn)換方式設(shè)置為“cv2.COLOR_BGR2GRAY( )”函數(shù)。其具體實現(xiàn)代碼如下:
image=cv2.imread('image.jpg')
gray_image=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
上述代碼中,“cv2.cvtColor()”函數(shù)將彩色圖像轉(zhuǎn)換為灰度圖像。第一個參數(shù)是輸入圖像,第二個參數(shù)是轉(zhuǎn)換的方式,使用cv2.COLOR_BGR2GRAY指定轉(zhuǎn)換為灰度圖像。轉(zhuǎn)換后的灰度圖像將存儲在新的變量“gray_image”中。
這里需要注意的是,灰度圖像只有一個顏色通道,而彩色圖像有3個顏色通道。因此使用灰度圖像存儲可以大大節(jié)省內(nèi)存和計算資源。
特征圖像的創(chuàng)建過程如下:
(1)創(chuàng)建一個空白圖像,將描述子的每個元素作為像素值填充到圖像中對應(yīng)的位置。
(2)調(diào)整圖像的大小和尺度,從而適應(yīng)特定的應(yīng)用場景。
(3)使用諸如調(diào)色板、平滑濾波器、邊緣檢測等圖像處理技術(shù),從而突出顯示特征。
(4)將特征圖像與原始曲線圖像進(jìn)行疊加顯示。
如下代碼為創(chuàng)建特征圖像的核心算法:
def create_feature_image(descriptors):
feature_image=np.zeros((100, 100), dtype=np.uint8)
fori,descriptorin enumerate(descriptors):
x=int(descriptor[0]*50)++50
y=int(descriptor[1]*50)++50
feature_image[y,x]=255
feature_image=cv2.applyColorMap(feature_image,cv2.COLORMAP_JET)
returnfeature_image
descriptors=np.array([[1.2,0.8],[-0.5,0.2],[0.9,-0.7]])
feature_image=create_feature_image
構(gòu)建好描述子之后,可以進(jìn)行各種手勢特征提取,這些特征包括手指數(shù)量、手指的位置和彎曲度、手的方向、手掌的位置等。
膚色檢測流程如圖4所示。
圖4 膚色預(yù)測流程
首先需要進(jìn)行合適的顏色空間轉(zhuǎn)換[9]。常見的顏色空間轉(zhuǎn)換是將圖像從RGB空間轉(zhuǎn)換到Y(jié)UV、HSV或Lab。將圖像從RGB空間轉(zhuǎn)換到Y(jié)UV空間的實現(xiàn)代碼為:yuv_image=cv2.cvtColor(image, cv2.COLOR_BGR2YUV),將圖像從RGB空間轉(zhuǎn)換到HSV空間的實現(xiàn)代碼為:hsv_image=cv2.cvtColor(image, cv2.COLOR_BGR2HSV),將圖像從RGB空間轉(zhuǎn)換到Lab空間的實現(xiàn)代碼為:lab_image=cv2.cvtColor(image, cv2.COLOR_BGR2Lab)?!癱v2.cvtColor()”函數(shù)用于執(zhí)行顏色空間轉(zhuǎn)換。第一個參數(shù)是輸入圖像,第二個參數(shù)是轉(zhuǎn)換方式,可以通過使用預(yù)定義的常量(如cv2.COLOR_BGR2YUV、cv2.COLOR_BGR2HSV、cv2.COLOR_BGR2Lab)來指定所需的轉(zhuǎn)換。不過,使用YCrCb顏色空間可以最大化地對RGB圖像進(jìn)行顯示,其從RGB空間到Y(jié)CrCb空間的轉(zhuǎn)換公式如下:
(6)
對于手部輪廓的提取,使用的是簡單的自適應(yīng)閾值方法,在OpenCV中的表示代碼為:ret,threshold=cv2.threshold(gray_image, thresh, maxval, threshold_type),其中“gray_image”代表輸入的灰度圖像;“thresh”代表閾值,用于將像素分為目標(biāo)和背景;“maxval”代表像素大于閾值時,所設(shè)置的像素值;“threshold_type”代表閾值分割的類型,例如“cv2.THRESH_BINARY”表示二值化閾值分割。
對于上述算法在手勢輪廓提取的應(yīng)用實驗結(jié)果如圖5所示。
圖5 手勢輪廓
進(jìn)行膚色檢測和分割處理后的實驗結(jié)果如圖6所示。
圖6 原始圖像及分割后的圖像
基于提取的手勢特征進(jìn)行機(jī)器學(xué)習(xí)模型訓(xùn)練,在文中使用的模型為KNN。訓(xùn)練完成后識別的結(jié)果如圖7所示。
圖7 手勢識別
隨著人機(jī)交互技術(shù)的日益發(fā)展,手勢識別算法愈來愈成熟。本文主要是對手勢的識別先導(dǎo)思想如神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)等進(jìn)行分析,并通過圖像預(yù)處理、特征值提取、膚色預(yù)測等步驟實現(xiàn)人體手勢識別。后續(xù)對于本課題還有很大的改進(jìn)空間;例如是否可以從二維的角度進(jìn)而升級從三維的角度進(jìn)行處理,從而把本課題實現(xiàn)的二維模型建成三維模型,這樣不僅可以獲得更多的特征值,還可以極大地提高識別的成功率。