DataScience
article thumbnail
728x90

추출한 얼굴을 타겟 얼굴에 매칭시켜주기 위해  들로네 삼각분할을 합니다.

Delaunay(들로네) Triangulation(삼각분할)은 "어떤 삼각형의 외접원도 그 삼각형의 세 꼭지점을 제외한 다른 어떤 점도 포함하지 않는다" 최대한 정삼각형의 모양과 가깝게 분할한다는 특징이 있다.

 

 

특징을 추출한 포인트 마스크 입니다.
마스크에서 삼각형으로 분할합니다.
원본 얼굴에서 마스크에서 분할한 삼각형 부분을 추출해서 타겟 얼굴의 해당하는 삼각형에 맞게 사이즈를 맞춰 넣어줍니다.

아래 코드는 

원본 마스크에서 들로네 삼각분할을 구현한 내용입니다.

    # Delaunay triangulation
    rect = cv2.boundingRect(convexhull)
    subdiv = cv2.Subdiv2D(rect)
    subdiv.insert(landmarks_points)
    triangles = subdiv.getTriangleList()
    triangles = np.array(triangles, dtype=np.int32)

    for t in triangles:
        pt1 = (t[0], t[1])
        pt2 = (t[2], t[3])
        pt3 = (t[4], t[5])

        cv2.line(img, pt1, pt2, (0, 0, 255), 2)
        cv2.line(img, pt2, pt3, (0, 0, 255), 2)
        cv2.line(img, pt1, pt3, (0, 0, 255), 2)

 

 

 

part3에서 계속 진행하겠습니다.

profile

DataScience

@Ninestar

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!