日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

基于特征点检测的人脸融合

發(fā)布時(shí)間:2024/3/13 pytorch 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于特征点检测的人脸融合 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

搬運(yùn)工又來了 還是為了自己學(xué)習(xí)啊 大佬勿怪...

所謂人臉融合:給定輸入人臉A、B,輸出的人臉C具有A和B共同的特征,是一張全新的人臉,也可以說是一張假臉。

人臉融合的過程主要有三步:人臉特征點(diǎn)定位,人臉融合,人臉交換。

  • 第一步,通過深度學(xué)習(xí)訓(xùn)練的模型對兩張待融合的圖像進(jìn)行關(guān)鍵點(diǎn)定位;

  • 第二步,根據(jù)定位結(jié)果對人臉進(jìn)行融合;

  • 第三步,將融合得到的人臉交換到待交換的人臉上,合成最終圖像。

實(shí)際上做到第二步已經(jīng)達(dá)到了人臉融合的基本要求,對于人臉交換,大部分用于假臉交換起到一定的隱私保護(hù)作用,用在人臉融合這里也算剛剛好,如果隨意用于交換真臉,那就是信息災(zāi)難了,例如各種換臉的視頻電影層出不窮。 whaosoft aiot?http://143ai.com

1 人臉特征點(diǎn)定位

1.1 訓(xùn)練模型

數(shù)據(jù)集越大,訓(xùn)練的模型越精確。人臉特征點(diǎn)檢測有一個(gè)非常著名的數(shù)據(jù)集300-W(300 Faces In-The-Wild Challenge)。300-W是一項(xiàng)專注于人臉特征點(diǎn)的檢測的競賽,在該競賽中,參賽隊(duì)伍需要從600張圖片中檢測出人臉,并且將面部的68個(gè)特征點(diǎn)全部標(biāo)記出來。300W數(shù)據(jù)的壓縮包有2G多。包含各種各樣已經(jīng)標(biāo)記好的人臉信息。因?yàn)樵谌绱舜蟮臄?shù)據(jù)集上訓(xùn)練需要大量的資源和時(shí)間。所以,在本次的設(shè)計(jì)中,我們使用少量的數(shù)據(jù)集來訓(xùn)練。

訓(xùn)練特征點(diǎn)檢測模型,這里我們用到了imglab工具。Imglab用于標(biāo)記可用于訓(xùn)練dlib或其他對象檢測器的對象的圖像。通過cmd:

imglab -c training_with_face_landmarks.xml images

來創(chuàng)建我們記錄標(biāo)簽的xml文件,接下來通過cmd:

imglab training_with_face_landmarks.xml

打開imglab工具對圖像打標(biāo)簽。這里我們按照dlib官方給出的68個(gè)特征點(diǎn)對每張圖片進(jìn)行標(biāo)注,shift+鼠標(biāo)左鍵拖動(dòng)截取人臉,雙擊選擇的矩形,shift+左鍵進(jìn)行特征點(diǎn)標(biāo)注,如下圖所示。

接下來就可以開始訓(xùn)練模型,這一步就看電腦性能了。首先定義參數(shù)設(shè)置函數(shù):

options = dlib.simple_object_detector_training_options()

大部分參數(shù),我們使用默認(rèn)值,針對我們的訓(xùn)練集,主要設(shè)定如下幾個(gè)參數(shù)。

  • Oversampling_amount: 通過對訓(xùn)練樣本進(jìn)行隨機(jī)變形擴(kuò)大樣本數(shù)目。比如N張訓(xùn)練圖片,通過設(shè)置該參數(shù),訓(xùn)練樣本數(shù)將變成N * oversampling_amount張。所以一般而言,值越大越好,只是訓(xùn)練耗時(shí)也會越久。因?yàn)楸纠杏?xùn)練集數(shù)據(jù)較少,所以我們將值設(shè)得較高(300)。

  • Nu: 正則項(xiàng)。nu越大,表示對訓(xùn)練樣本fit越好。

  • Tree depth: 樹深。本例中通過增加正則化(將nu調(diào)小)和使用更小深度的樹來降低模型的容量。

  • Be_verbose,是否輸出訓(xùn)練的過程中的相關(guān)訓(xùn)練信息,設(shè)置為真。

1.2 測試模型

人臉特征點(diǎn)檢測模型訓(xùn)練完成后,需要測試該模型的準(zhǔn)確率。測試模型的準(zhǔn)確率包括兩部分,訓(xùn)練集測試和測試集測試。訓(xùn)練集就是訓(xùn)練該模型的數(shù)據(jù)集合。輸出在訓(xùn)練集中的準(zhǔn)確率的核心代碼為:

print("Training accuracy{0}".format(dlib.test_shape_predictor(training_xml_path,"predictor.dat")))

測試集即非訓(xùn)練集數(shù)據(jù)的集合。輸出在測試集中的準(zhǔn)確率的核心代碼為:

print("Testing accuracy:{0}".format(dlib.test_shape_predictor(testing_xml_path, "predictor.dat")))

1.3 特征點(diǎn)定位

用訓(xùn)練好的模型進(jìn)行人臉特征點(diǎn)檢測。具體步驟如下,導(dǎo)入上述訓(xùn)練好的模型:

predictor = dlib.shape_predictor("predictor.dat");

檢測人臉:

dets = detector(img, 1)

返回人臉?biāo)诰匦?#xff0c;可通過len(dets)獲得人臉個(gè)數(shù);獲取檢測到的人臉特征點(diǎn):

lanmarks = [[p.x, p.y] for p in predicator(img1, d).parts()];

在圖片中循環(huán)打印出68個(gè)特征點(diǎn),如下圖所示。

2 人臉融合

這一步首先介紹兩個(gè)算法,Delaunay三角剖分,仿射變換。

2.1 Delaunay三角剖分

設(shè)點(diǎn)集V,x,y屬于點(diǎn)集V,多邊形S中兩個(gè)端點(diǎn)為x,y的一條邊e,若過x,y兩點(diǎn)存在一個(gè)圓,且點(diǎn)集V中任何其他的點(diǎn)都不在該圓內(nèi),圓上包括x,y兩點(diǎn)最多三點(diǎn),那么稱e為Delaunay邊。那么如果點(diǎn)集V的一個(gè)三角剖分T只包含Delaunay邊,那么該三角剖分稱為Delaunay三角剖分。

Delaunay三角剖分有兩個(gè)重要特性,一個(gè)是空接圓特性:Delaunay三角剖分是唯一的,任意四點(diǎn)不能共圓,在Delaunay三角剖分中任一三角形的外接圓范圍內(nèi)不會有其它點(diǎn)存在。另外一個(gè)是最大化最小角特性:在散點(diǎn)集形成的所有三角剖分中,Delaunay三角剖分所形成的三角形的最小角最大。

該算法其實(shí)來源于美術(shù)館問題,美術(shù)館是一個(gè)復(fù)雜的多邊形,我們需要在美術(shù)館當(dāng)中安排警衛(wèi),在使得他們能觀察到美術(shù)館的所有角落前提下,安排的警衛(wèi)最少。多邊形中的視野問題不好處理,所以將多邊形剖分成多個(gè)三角形從而使問題得到簡化。警衛(wèi)站在三角形的任意一個(gè)位置都能觀察到這個(gè)三角形中的每一個(gè)點(diǎn)。數(shù)學(xué)家Steve Fisk對這個(gè)問題給出了非常精彩的解答:剖分成三角形后,每個(gè)三角形的三個(gè)頂點(diǎn)共用三種不同的顏色染色,染色結(jié)束后在最少的顏色上設(shè)置警衛(wèi)即可,如下圖所示。

所以問題簡化成將該多邊形剖分成一個(gè)個(gè)三角形。另外三角剖分也有優(yōu)劣之分,一般來說,剖分出來的三角形越勻稱越好,勻稱的三角形在圖形圖像處理方面效果比陡峭的三角形更好,如下圖所示,都是對同一個(gè)六邊形進(jìn)行三角剖分,但是右邊的效果更好,這就是Delaunay三角剖分。而在人臉融合技術(shù)中,Delaunay三角剖分也扮演了不可或缺的角色。

我們根據(jù)得到的特征點(diǎn)對人臉進(jìn)行Delaunay三角剖分,將人臉剖分成一個(gè)個(gè)三角形,然后將一個(gè)個(gè)三角形進(jìn)行仿射變換,再調(diào)整透圖片透明度,便可得到融合后的人臉,訓(xùn)練的特征點(diǎn)越多,融合的效果便越好。OpenCV提供了Subdiv2D類實(shí)現(xiàn)了Delaunay三角剖分算法,subdiv = cv2.Subdiv2D(rect),將68個(gè)特征點(diǎn)的位置插入subdiv,subdiv.insert§ ,獲取Delaunay三角列表:

trangleList = subdiv.getTriangleList()

最后調(diào)用cv2.line()將剖分后的結(jié)果畫出,如下圖所示。

2.2 仿射變換

仿射變換,又稱仿射映射,是指在幾何中,一個(gè)向量空間進(jìn)行一次線性變換并接上一個(gè)平移,變換為另一個(gè)向量空間。仿射變換能夠保持圖像的“平直性”,包括旋轉(zhuǎn),縮放,平移,錯(cuò)切操作。一般而言,仿射變換矩陣為2*3的矩陣,第三列的元素起著平移的作用:

前面兩列的數(shù)字對角線上是縮放,其余為旋轉(zhuǎn)或者錯(cuò)切的作用。仿射變換是一種二維坐標(biāo)(x, y)到二維坐標(biāo)(xt, yt)的線性變換。數(shù)學(xué)表達(dá)式如下圖所示:

直觀的圖像表示就是這樣:

首先對之前得到的特征點(diǎn)進(jìn)行預(yù)處理。人臉特征點(diǎn)檢測算法得出的人臉68個(gè)特征點(diǎn)保存在本地的txt文件中。同時(shí),Delaunay三角剖分算法得到的三角形的索引結(jié)點(diǎn)也保存在本地的txt文件中。讀取人臉A的特征點(diǎn)points1,人臉B的特征點(diǎn)points2。因?yàn)橐笕诤系娜四槻灰欢ㄊ峭却笮?#xff0c;所以我們?nèi)∫粋€(gè)平均值保存在points中。Points即為我們?nèi)诤虾蟮娜四樚卣鼽c(diǎn)所在位置。經(jīng)過三角剖分后,人臉被剖分成一個(gè)個(gè)三角形。我們從保存的三角形索引結(jié)點(diǎn)中循環(huán)讀取每一個(gè)三角形的索引點(diǎn),通過索引結(jié)點(diǎn)找到人臉A和人臉B的該三角形所對應(yīng)的三個(gè)特征點(diǎn)位置。取得的三角形以下稱三角形A,三角形B。取平均值的三角形稱為C。因?yàn)樽龇律渥儞Q只需要變換一個(gè)我們剖分形成的三角形,不需要變換整張圖片,所以我們可以求得該三角形的最小外接矩形,以提升變換效率,并減少計(jì)算量。

r = cv2.boundingRect(np.float32([t]))

返回的r為一個(gè)四元組,前兩個(gè)值為矩形左上角的坐標(biāo),后兩個(gè)值為矩形的長和寬。因?yàn)橐谏厦娅@得的外接矩形中進(jìn)行仿射變換,所以原點(diǎn)從圖片的左上角點(diǎn)變成了外接矩形的左上角點(diǎn),從而要修改三角形的三點(diǎn)坐標(biāo)。

tRect.append(((t[i][0] - r[0]), (t[i][1] - r[1])))

t為預(yù)處理中獲得的三角形三個(gè)頂點(diǎn)坐標(biāo)。在上一步中,我們獲得了輸出矩形圖像。但是,我們對矩形區(qū)域內(nèi)的三角形感興趣。因此,我們使用fillConvexPoly創(chuàng)建一個(gè)掩模mask,用于遮蔽三角形外的所有像素。這個(gè)新的裁剪圖像最終可以使用輸出邊界矩形的左上角坐標(biāo)點(diǎn)置于輸出圖像中的正確位置。接下來就是通過仿射變換將三角形A,B變換到C的位置上。???????

warpImage1 = applyAffineTransform(img1Rect, t1Rect, tRect, size)warpImage2 = applyAffineTransform(img2Rect, t2Rect, tRect, size)

ApplyAffineTransform是手寫的函數(shù),包括cv2.getAffineTransform,用來找到兩個(gè)三角形之間的仿射變換矩陣,cv2.warpAffine將上個(gè)函數(shù)獲得的矩陣應(yīng)用于圖像。???????

# Apply affine tranform calculated using srcTri and sdtTri to src and output an image of sizedef applyAffineTransform(src, srcTri, dstTri, size): ? ?# Given a pair of triangles,find the affine transform. ? ?warpMat = cv2.getAffineTransform(np.float32(srcTri), np.float32(dstTri)) ? ?# Apply the Affine Transform just foundto the src image ? ?dst = cv2.warpAffine(src, warpMat, (size[0], size[1]), None, flags=cv2.INTER_LINEAR, ? ? ? ? ? ? ? ? ? ? ? ? borderMode=cv2.BORDER_REFLECT_101) ? ?return dst

2.3 圖像融合

將人臉剖分成一個(gè)個(gè)小三角形并仿射變換到既定的位置后,進(jìn)行圖片融合。簡單來說,通過把圖像設(shè)置為不同的透明度,把兩張圖像融合為一張圖像(一般要求圖像需要是等尺寸大小的),公式如下圖所示:

仿射變換時(shí),我們將人臉A的三角形A,人臉B的三角形B仿射到三角形C上。如果不處理,三角形A和三角形B仿射后的圖像會疊加在C上。這里我們設(shè)置一個(gè)透明度參數(shù)alpha為0.5,兩張人臉各占一半。

imgRect = (1.0 - alpha) * warpImage1 + alpha * warpImage2

warpImage1,warpImage2為經(jīng)過仿射變換的圖像。最后一步,最后將用于遮蔽三角形外的所有像素mask與上個(gè)步驟輸出的圖片結(jié)果相乘就可以得到對應(yīng)區(qū)域的值了。融合結(jié)果如下圖所示:

得到融合后的人臉后,最后一步,就是將融合后的人臉交換到待交換的人臉上。

3 人臉交換

人臉交換分為五個(gè)步驟:特征點(diǎn)檢測,查找凸包,基于凸包三角剖分,仿射變換,無縫克隆。特征點(diǎn)檢測,三角剖分和仿射變換之前的部分提及到,所以詳細(xì)介紹一下查找凸包和無縫克隆。

3.1 凸包算法

如下圖所示,所給平面上有點(diǎn)集V,包含p0到p12一共13個(gè)點(diǎn),過p0,p1,p3,p10,p13點(diǎn)作一個(gè)多邊形,點(diǎn)集V中所有點(diǎn)都包含在形成的這個(gè)多邊形上。如果當(dāng)這個(gè)多邊形是凸多邊形的時(shí)候,我們就叫它“凸包”。簡單來說,點(diǎn)集的凸包即一個(gè)最小的凸多邊形使得點(diǎn)集中所有的點(diǎn)在該凸邊形內(nèi)或該凸邊形上。

凸包算法為什么會用在人臉交換中呢?人臉交換同樣需要特征點(diǎn)檢測,同樣需要三角剖分,與人臉融合不同的是人臉交換是直接通過仿射變換將人臉A剖分后的三角形仿射到人臉B上。人臉融合剖分的三角形越多,融合效果越完美。

人臉交換不同于融合,第一步只需要將人臉A貼到人臉B上,所以只需要求出68個(gè)特征點(diǎn)的凸包多邊形,對這個(gè)多邊形剖分即可。OpenCV便提供了求得這個(gè)凸包的函數(shù)cv2.convexHull()。人臉交換不同于融合,第一步只需要將人臉A貼到人臉B上,所以只需要求出68個(gè)特征點(diǎn)的凸包多邊形,對這個(gè)多邊形剖分即可,如下圖所示。

仿射換臉核心代碼如下:???????

# Warps and alpha blends triangular regions from img1 and img2 to imgdef warpTriangle(img1, img2, t1, t2): # Find bounding rectangle for each triangle r1 = cv2.boundingRect(np.float32([t1])) r2 = cv2.boundingRect(np.float32([t2])) # Offset points by left top corner of the respective rectangles t1Rect = [] t2Rect = [] t2RectInt = [] for i in range(0, 3): t1Rect.append(((t1[i][0] - r1[0]), (t1[i][1] - r1[1]))) t2Rect.append(((t2[i][0] - r2[0]), (t2[i][1] - r2[1]))) t2RectInt.append(((t2[i][0] - r2[0]), (t2[i][1] - r2[1]))) # Get mask by filling triangle mask = np.zeros((r2[3], r2[2], 3), dtype=np.float32) cv2.fillConvexPoly(mask, np.int32(t2RectInt), (1.0, 1.0, 1.0), 16, 0); # Apply warpImage to small rectangular patches img1Rect = img1[r1[1]:r1[1] + r1[3], r1[0]:r1[0] + r1[2]] # img2Rect = np.zeros((r2[3], r2[2]), dtype = img1Rect.dtype) size = (r2[2], r2[3]) img2Rect = applyAffineTransform(img1Rect, t1Rect, t2Rect, size) img2Rect = img2Rect * mask # Copy triangular region of the rectangular patch to the output image img2[r2[1]:r2[1] + r2[3], r2[0]:r2[0] + r2[2]] = img2[r2[1]:r2[1] + r2[3], r2[0]:r2[0] + r2[2]] * ( (1.0, 1.0, 1.0) - mask) img2[r2[1]:r2[1] + r2[3], r2[0]:r2[0] + r2[2]] = img2[r2[1]:r2[1] + r2[3], r2[0]:r2[0] + r2[2]] + img2Rect

得到的結(jié)果如下圖,可以明顯看出膚色的差異:

3.2 無縫融合

優(yōu)秀的技術(shù)就像魔法。優(yōu)秀的魔術(shù)師將物理學(xué)、心理學(xué)和古老的魔術(shù)相結(jié)合實(shí)現(xiàn)了圖像的無縫融合。圖像的編輯包括全局變化和局部變化,無縫融合是將我們所選中的局部區(qū)域無縫且無影響地融合到目標(biāo)圖像中。傳統(tǒng)上的工具來完成局部的剪切與融合,是通過克隆工具直接覆蓋那部分融合區(qū)域的內(nèi)容,因此如果選擇的區(qū)域色彩和明暗有明顯的差異,會導(dǎo)致明顯的邊縫,顯得突兀。無縫融合由此誕生。

無縫融合的基本原理基于人的生物學(xué)特性,我們?nèi)搜厶焐蛯Α巴蛔儭备鼮槊舾小:唵蝸碚f,比如突然從密閉的黑暗房間出來,我們?nèi)搜蹠艿焦饩€的刺激。但是如果我們漸變的適應(yīng)一下,就不會感受到光線的刺激。就像白紙上的黑色圖形,我們會感覺很“突兀”。同理如果連續(xù)平滑的將這個(gè)圖像由白入灰再變黑,那么我們就感受不到這種突兀。無縫融合就是基于此生物學(xué)特性的魔法,雖然是將一張圖像融合到另一張圖像上,但是我們絲毫感覺不出“突兀”。

這種無縫編輯和克隆方法的核心是數(shù)學(xué)工具―泊松方程,前提是需滿足在所選區(qū)域未知函數(shù)的拉普拉斯條件和它的Dirichlct邊界條件:未知函數(shù)的邊界值與目標(biāo)圖像中所選區(qū)域的邊界值相同。因?yàn)樵谶@兩個(gè)條件下方程的解是唯一的。

首先,心理學(xué)家Land和Mccan在1971年提出通過拉普拉斯算子的限制可以減緩漸變的梯度,當(dāng)把一幅圖像混淆到另一幅圖像上幾乎注意不到有什么影響。并且,泊松方程可以完成無縫地填滿目標(biāo)圖像中的選中區(qū)域。在數(shù)學(xué)上說到底就是構(gòu)建方程組:Ax=b。然后通過求解這個(gè)方程組以得到每個(gè)像素點(diǎn)的值。矩陣A是一個(gè)系數(shù)矩陣,矩陣的每一行有五個(gè)非零元素,對應(yīng)于拉普拉斯算法的卷積核,而算法的關(guān)鍵在于怎么構(gòu)建方程組的b值 。首先,計(jì)算待融合圖像A和背景圖像B的梯度場;然后計(jì)算融合圖像的梯度場,計(jì)算完后將A的梯度場覆蓋到B的梯度場上;最后對梯度求偏導(dǎo)求得融合圖像的散度b,解系數(shù)方程Ax=b。雖然看起來涉及到許多數(shù)學(xué)知識,實(shí)際上實(shí)現(xiàn)起來只要一個(gè)函數(shù)cv2.seamlessClone,這就是OpenCV(Computer Vision)。實(shí)現(xiàn)的無縫融合效果如下圖:

當(dāng)然了,如果交換的人臉周圍是黑的,就比如下圖我們?nèi)诤系玫降闹虚g的人臉,人臉交換時(shí)人臉輪廓難免會包括周圍的黑色背景。所以,為了使無縫融合取得更好的效果,最好在圖片周圍加八個(gè)點(diǎn),將環(huán)境也粗略融合一下,這樣就可以避免人臉周圍黑色造成換臉后的“傷疤”。

新加的這8個(gè)點(diǎn),可以通過:

sp = img1.shape # [高|寬|像素值由三種原色構(gòu)成] #高寬色素

獲取圖片的高和寬,例如高的一半可以sp[0]/2表示,寬的一半sp[1]/2。三角剖分結(jié)果如下:

得到融合的圖像如下:

將這張人臉進(jìn)行人臉交換,可以有效防止周圍黑色環(huán)境無縫融合產(chǎn)生的“傷疤”,最后融合人臉得到的圖片如下:

4 實(shí)驗(yàn)分析總結(jié)

從第一張圖來看,我們對兩張性格相同的人臉進(jìn)行融合,實(shí)驗(yàn)結(jié)果顯示本文提出的人臉融合技術(shù)可以實(shí)現(xiàn)人臉融合,且最后的融合結(jié)果具有高度的真實(shí)感,我們基本分辨不出這是融合的效果,初步達(dá)到了我們對人臉融合實(shí)現(xiàn)的要求。

從第二張、第三張圖來看,我們對兩張性別不同、膚色不同的人臉進(jìn)行融合,并分別交換到這兩張性別不同的人臉上,從視覺效果上看,我們的算法依然取得了較好的效果,融合的人臉不論是交換在男性身上還是交換在女性身上都顯得非常自然,并且膚色也非常自然,性別,膚色并未對算法結(jié)果造成影響。

從第四張圖來看,我們選擇了兩張人臉大小不一的圖像來進(jìn)行融合,我們發(fā)現(xiàn)融合仍然具有高度的真實(shí)感。但是發(fā)現(xiàn)一點(diǎn)瑕疵,左邊的圖像由于燈光的照射使得右側(cè)臉頰有陰影,而我們的算法并不能判斷出這是由于燈光產(chǎn)生的陰影還是膚色,導(dǎo)致融合后陰影仍然存在,致使結(jié)果有些不自然,但并不影響整個(gè)融合的實(shí)現(xiàn),這個(gè)問題也是在未來需要解決的。

總的來說,實(shí)驗(yàn)結(jié)果證明本文提出的人臉融合實(shí)現(xiàn)的融合結(jié)果具有高度的真實(shí)感,基本實(shí)現(xiàn)了最初構(gòu)想,在效果上也達(dá)到了預(yù)期要求。但仍然還有需要改進(jìn)的方向:

(1)消除燈光照射產(chǎn)生陰影對人臉融合的影響。上述第四張圖片由于燈光的照射使得人臉右側(cè)臉頰產(chǎn)生陰影,而我們提到的無縫融合只能將其也歸為膚色,導(dǎo)致融合后即使沒用光照也有陰影,導(dǎo)致實(shí)驗(yàn)效果不自然。方向有兩個(gè),一個(gè)是對圖像進(jìn)行預(yù)處理,消除光照產(chǎn)生的影響;另一個(gè)就是在融合過程中對陰影部分進(jìn)行處理。從可行上來看,對圖像進(jìn)行預(yù)處理顯得更加便于操作。

(2)消除頭發(fā),眼鏡等遮擋物對融合的影響。我們的算法是在人臉完全展示的狀態(tài)下進(jìn)行剖分并進(jìn)行融合。如果出現(xiàn)遮擋物,仍然會把遮擋物當(dāng)成人臉的一部分參與仿射變換并進(jìn)行融合,這同樣會影響實(shí)驗(yàn)結(jié)果。而隨著社會的發(fā)展,發(fā)型遮擋人臉或者飾品遮擋人臉的情況也比較常見。

總結(jié)

以上是生活随笔為你收集整理的基于特征点检测的人脸融合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。