Sử dụng GA điều chỉnh các điểm đánh dấu

Một phần của tài liệu Nghiên cứu nhân bản chuyển động khuôn mặt trên các mô hình khuôn mặt 3D khác nhau (Trang 62)

Quay lại Phần 2.3, chúng ta biết rằng một số điểm đánh dấu trên mô hình khuôn mặt mục tiêu có thể đƣợc xác định tự động. Các điểm đánh dấu còn lại thuộc loại “không tự phát hiện”. Bùi Thế Duy và cộng sự [9] dùng các thuật toán di truyền học để điều chỉnh những điểm đánh dấu không tự phát hiện trên mô hình khuôn mặt mục tiêu để giảm thiểu sự khác biệt giữa mô hình khuôn mặt biến đổi và mô hình khuôn mặt mục tiêu. Các thuật toán di truyền học tìm biến thể tối ƣu của các điểm đánh dấu để làm giảm hàm sai số đã đƣợc mô tả ở phần trƣớc.

Quá trình GA bắt đầu với một tập hợp ngẫu nhiên các nghiệm, đƣợc biểu diễn là các nhiễm sắc thể. Bởi vì ta muốn giới hạn tìm kiếm chỉ quanh các điểm đánh dấu ban đầu, nên mỗi nghiệm của quá trình GA là biến thể của điểm đánh dấu trên mô hình khuôn mặt mục tiêu [9]. Trong phép điều chỉnh này, mỗi biến thể của điểm đánh dấu là một điểm bất kỳ nằm bên trong khối lập phƣơng có cạnh cho trƣớc, và điểm đánh dấu ban đầu chính là trung tâm của khối (xem Hình 3.5). Ta rút các nghiệm ra từ một tổng thể và sử dụng chúng để tạo nên một tổng thể mới. Sau đó những nghiệm mới lại đƣợc lựa chọn dựa trên mức độ thích nghi của chúng. Các nghiệm này càng phù hợp, thì chúng càng có cơ hội tái sinh (đƣợc chọn tiếp). Trong trƣờng hợp này, hàm thích nghi là hàm nghịch đảo của hàm sai số.

Hình 3.5: Một điểm đánh dấu ban đầu và biến thể của nó 3.5.1 Nhiễm sắc thể

Một nhiễm sắc thể là sự kết hợp các biểu diễn nhị phân của tất cả các điểm đánh dấu không tự phát hiện trên mô hình khuôn mặt mục tiêu. Mỗi điểm đánh dấu đƣợc biểu diễn trong nhiễm sắc thể bằng khoảng cách giữa điểm đánh dấu đó và điểm đánh dấu gốc ban đầu.

Có thể mô tả mỗi điểm đánh dấu bằng ba tọa độ v1,v2,v3. Bắt đầu từ một dạng điểm đánh dấu ban đầu, ta có thể thu đƣợc nhiều dạng điểm đánh dấu khác bằng cách biến đổi mỗi tọa độ trong một miền xác định trƣớc. Đặt Rmin1, Rmax1, Rmin2,

2 max

R , Rmin3, Rmax3 là các miền giá trị của những tọa độ này. Tọa độ của một điểm đánh dấu đƣợc biểu diễn nhƣ sau:

) , , (p1 p2 p3 trong đó, 0 pi 1, 3 .. 1 min max min     i R R R v p i i i i i

Vậy, ta có i i i i i p R R R

v  ( max  min ) min

Sau đó, ta chuyển đổi pi về một chuỗi nhị phân. Sử dụng 2 làm giới hạn n trên,3 ta biểu diễn pi bằng  2npi ở dạng nhị phân của nó:

1 hoÆc 0 , , , 2 1 i in iji c c c c

Ta kết hợp biểu diễn nhị phân này của ba tọa độ của tất cả các điểm đánh dấu để hình thành nên một nhiễm sắc thể.

3.5.2 Hàm thích nghi (Fitness function)

Hàm thích nghi là dạng đảo của hàm sai số đƣợc mô tả ở Phần 3.4: Hàm thích nghi (nghiệm) = u) tiª môc mÆt khu«n (nghiÖm), æi biÕn mÆt khu«n đ ( 1 E

trong đó, khuôn mặt biến đổi (nghiệm) là mô hình khuôn mặt biến đổi sử dụng nghiệm là các điểm đánh dấu trên mô hình khuôn mặt mục tiêu.

3.5.3 Phép lai ghép (Crossover)

Phép lai ghép đa điểm đƣợc sử dụng nhƣ mô tả tại Hình 3.6. Với phép lai ghép đa điểm, một số vị trí lai ghép đƣợc chọn ngẫu nhiên mà không có bản sao, và đƣợc sắp xếp theo thứ tự tăng dần. Sau đó, các thành phần nhiễm sắc thể giữa các điểm lai ghép kế tiếp nhau đƣợc trao đổi giữa hai bố mẹ để tạo ra hai đời con mới. Phần nằm giữa các thành phần thứ nhất và điểm lai ghép thứ nhất không đƣợc trao đổi giữa các cá thể. Ý tƣởng đằng sau toán tử phép lai đa điểm này là: những phần biểu diễn nhiễm sắc thể (mà có đóng góp chủ yếu cho hiệu quả hoạt động của một cá thể cụ thể) không nhất thiết nằm trong các chuỗi phụ liền kề. Ngoài ra, dƣờng nhƣ bản chất phá vỡ của phép lai đa điểm lại khuyến khích việc kiểm tra không gian tìm kiếm, hơn là ƣu tiên sự hội tụ về những cá thể có mức thích nghi cao ngay khi bắt đầu quá trình tìm kiếm; do đó khiến cho việc tìm kiếm có ý nghĩa hơn.

3

Hình 3.6: Phép lai ghép đa điểm.

3.5.4 Đột biến (Mutation)

Các nghiệm bị đột biến bởi việc áp dụng phép chuyển ngẫu nhiên cho yếu tố của các nhiễm sắc thể (0 tới 1 và 1 tới 0). Ta bắt đầu với tỷ lệ đột biến 0.3 [9]. Ta tăng tỷ lệ này lên khi sai số vẫn ổn định, và giảm tỷ lệ này xuống khi quá trình GA tạo ra những sai số nhỏ hơn (những kết quả tốt hơn). Tỷ lệ đột biến này đƣợc giới hạn trong khoảng 0.3 tới 0.5.

3.5.5 Phép toán bổ sung (Additional Operation)

Chúng ta làm quen với một phép toán bổ sung cho quá trình GA. Phép toán này chiếu mỗi nghiệm của GA lên bề mặt của mô hình khuôn mặt mục tiêu [9], sử dụng phép chiếu hình trụ mà tôi đã mô tả ở Phần 2.2.1. Tôi kiểm tra hai phƣơng pháp tiến hành phép toán này. Phƣơng pháp thứ nhất là thay thế mỗi nghiệm của quá trình GA bằng phép chiếu của nó. Cách thức GA hội tụ trong trƣờng hợp này đƣợc biểu diễn bằng đƣờng nét đứt trên Hình 3.7. Phƣơng pháp thứ hai là chỉ sử dụng phép chiếu của một nghiệm để tính hàm sai số và để tạo ra nghiệm cuối cùng. Đƣờng liên tục trong Hình 3.7 mô tả cách thức GA hội tụ trong trƣờng hợp này. Nhƣ có thể thấy từ hình vẽ, cách thứ nhất khiến các sai số giảm xuống và quá trình hội tụ rất nhanh, còn cách thứ hai khiến sai số giảm xuống nhƣng quá trình hội tụ khá chậm. Tuy nhiên, cách thứ nhất đƣa đến một cực tiểu cục bộ và ta không thể thoát khỏi cực tiểu cục bộ đó. Điều này xảy ra do mức đa dạng của các nghiệm GA giảm đi khi thay thế các nghiệm đó bằng phép chiếu của chúng.

Hình 3.7: Cách thức hội tụ của quá trình GA: đường nét đứt – các nghiệm được thay thế bởi phép chiếu của chúng lên mô hình khuôn mặt mục tiêu trong suốt quá trình GA; đường liên tục: phép chiếu được sử dụng chỉ để tính hàm sai số và

3.6 Quy trình biến đổi khuôn mặt 3D

Trên cơ sở phƣơng pháp đã đƣợc mô tả ở trên, tôi đƣa ra một quy trình để từ đó xây dựng một công cụ biến đổi khuôn mặt 3D (Hình 3.8).

Hình 3.8: Quy trình biến đổi khuôn mặt 3D

Quy trình gồm 2 bƣớc sau:

- Bƣớc 1: sử dụng phần mềm Poser để tạo ra khuôn mặt 3D mục tiêu. Phần mềm này cho phép ta có thể load ảnh từ ngoài vào để tạo khuôn mặt, hoặc có thể sử dụng các tính năng mà phần mềm hỗ trợ nhƣ: điều chỉnh mắt, mũi, miệng, … trên khuôn mặt sẵn có, để đƣa ra đƣợc khuôn mặt 3D mong muốn. Chi tiết cách tạo khuôn mặt sẽ đƣợc trình bày trong Phần 3.7.1.

- Bƣớc 2: Dữ liệu khuôn mặt 3D mục tiêu đƣợc xuất ra từ phần mềm Poser đƣợc đƣa vào công cụ biến đổi khuôn mặt 3D mà tôi xây dựng, với mô hình khuôn mặt nguồn đã đƣợc xây dựng theo các phƣơng pháp đƣợc mô tả ở chƣơng 1 [7, 8], công cụ sẽ đƣa ra mô hình khuôn mặt 3D mới có hình dạng giống nhƣ khuôn mặt mục tiêu với các thông số, mô hình cơ dựa trên khuôn mặt nguồn.

3.7 Một công cụ biến đổi khuôn mặt 3D

3.7.1 Tạo mô hình khuôn mặt 3D bằng Poser 5

Poser 5 là một công cụ thiết kế 3D đƣợc phát triển bởi Curious Labs với nhiều tính năng và thƣ viện hỗ trợ. Vì vậy trong nghiên cứu này, tôi lựa chọn Poser 5 để tạo mô hình khuôn mặt 3D (sử dụng công cụ Face của Poser 5, Hình 3.9).

Hình 3.9: Giao diện công cụ Face của Poser 5

Công cụ Face bao gồm các thành phần sau:

- Photo Lineup (1): Khu vực Photo Lineup là nơi ta đƣa hình ảnh từ ngoài vào và

cho phép căn chỉnh chúng bằng công cụ Face Shaping (8). Sau khi điều chỉnh, nhấn nút “Apply Shape” để tạo ra hình ảnh hiển thị ở vùng (3).

- Texture Variation (2): Vùng cho phép điều chỉnh chất liệu cho khuôn mặt hiển

thị.

- Face Sculpting (3): Vùng hiển thị hình ảnh cái đầu 3D dựa trên hình dạng và

chất liệu ta đã điều chỉnh. Cửa sổ này với công cụ Mini Camera cho phép thay đổi các góc độ quan sát. Ngoài ra ta cũng có thể sử dụng công cụ Face Shaping

- Random Face button (4): nhấn vào nút “Random Face” sẽ tạo ra một khuôn mặt hoàn toàn ngẫu nhiên. Thao tác này sẽ xoá bỏ tất cả những điều chỉnh đã thực hiện với khuôn mặt trƣớc đó.

- Reset Face room button (5): nhấn vào nút “Reset Face room” sẽ khôi phục lại

hình ảnh và chất liệu của cái đầu 3D mặc định của phần mềm Poser 5.

- Texture Preview window (6): Vùng hiển thị sự thay đổi chất liệu tạo nên khuôn

mặt khi ta thực hiện các thao tác liên quan. Và ta cũng có thể tải hoặc lƣu lại các chất liệu cho công việc sau này.

- Action Button (7): Các nút Action là các thao tác cho phép lƣu lại các biến đổi

đã thực hiện.

- Face Shaping Tool window (8): cửa sổ cung cấp các công cụ để thay đổi hình

dạng khuôn mặt theo mong muốn.

Có một số cách để tạo ra khuôn mặt 3D theo ý muốn: - Sử dụng hai hình ảnh để tạo hình dạng và chất liệu.

- Sử dụng công cụ Face ShapingTexture Variation để tạo hình dạng và chất liệu.

- Sử dụng tính năng Random Face.

3.7.1.1 Sử dụng ảnh để tạo khuôn mặt 3D

Để tạo khuôn mặt 3D từ ảnh, ta thực hiện các bƣớc sau: - Bƣớc 1: Nạp ảnh vào phần mềm.

- Bƣớc 2: Sắp xếp lại vị trí hình học các điểm trên ảnh.

- Bƣớc 3: Lƣu lại các thay đổi về hình dạng và chất liệu và xuất ra file định dạng VRML là đầu vào cho công cụ biến đổi đƣợc trình bày ở phần sau.

Để tạo ra khuôn mặt 3D, chúng ta cần phải có 2 ảnh: ảnh chụp thẳng và ảnh chụp bên (Hình 3.10)

Để đạt kết quả tốt nhất, đối với ảnh chụp thẳng, đối tƣợng đƣợc chụp phải hƣớng thẳng vào camera và camera nằm ngang với gƣơng mặt ngƣời đƣợc chụp. Đối với ảnh bên, ngƣời chụp nghiêng một góc 90 độ so với camera (chụp lấy mặt bên phải) và camera cũng nằm ngang với gƣơng mặt ngƣời đƣợc chụp. Các bức ảnh phải đƣợc chụp đủ gần và ánh sáng đƣợc điều chỉnh để nắm bắt đƣợc toàn bộ chi tiết gƣơng mặt. Biểu hiện của gƣơng mặt ngƣời chụp ở dạng bình thƣờng (không cƣời, nói, …). Khoảng cảnh từ camera đến ngƣời chụp ở cả 2 góc chụp là bằng nhau.

Hình 3.11: Nạp ảnh và xác định một số vị trí trên gương mặt

Ta nhấn biểu tƣợng “Load” nằm trên vùng Photo Lineup để nạp ảnh chụp thẳng và chụp bên. Poser 5 sẽ yêu cầu ta xác định một số vị trí trên gƣơng mặt (theo mũi tên hƣớng dẫn nhƣ Hình 3.11) để giúp phần mềm sắp xếp vị trí hình học của gƣơng mặt cho phù hợp với cái đầu 3D mặc định. Kết quả hiển thị ở Hình 3.12.

Ta điều chỉnh thủ công bằng chuột hoặc sử dụng các công cụ hỗ trợ trong Photo

LineUp để thay đổi vị trí các điểm định dạng khuôn mặt. Kết quả thu đƣợc hiển thị tại

cửa sổ Face Sculpting. Sau khi đạt đƣợc khuôn mặt nhƣ mong muốn, ta lƣu lại các thay đổi này và xuất ra file định dạng VRML.

3.7.1.2 Sử dụng công cụ Face Shaping và Texture Variation để tạo khuôn mặt 3D

Một cách khác để thu đƣợc khuôn mặt nhƣ ta mong muốn là sử dụng công cụ

Face Shaping để tạo hình dạng và Texture Variation để tạo chất liệu cho khuôn mặt

(Hình 3.13).

Hình 3.13: Texture Variation và công cụ Face Shaping

Để thay đổi chất liệu của khuôn mặt, ta có thể điều chỉnh các thông số của một số thành phần trong mục Texture Variation nhƣ: lông mày (Eyebrows), hốc mắt (Eye sockets), độ tuổi (Age), giới tính (Gender), … Với công cụ Face Shaping, ta có thể điều chỉnh trực tiếp khuôn mặt bằng cách lựa chọn và di chuyển các điểm trên khuôn mặt bằng chuột hoặc thay đổi các thông số của các thành phần trên khuôn mặt, nhƣ đỉnh mày (Brow Ridge), xƣơng gò má (Cheekbones), gò má (Cheek), cằm (Chin), mắt (Eyes), … Đặc biệt, tính năng Caricature cho phép ta cƣờng điệu các đặc điểm trên khuôn mặt. Kết quả cũng đƣợc ta lƣu lại và xuất ra file định dạng VRML để làm đầu vào cho công cụ biến đổi đƣợc mô tả ở phần sau.

3.7.2 Công cụ biến đổi

3.7.2.1 Thiết kế hệ thống

Tôi tiến hành phát triển một công cụ biến đổi khuôn mặt 3D bằng ngôn ngữ Mircosoft Visual C++ chạy trên nền Mircosoft Visual Studio 6.0. Công cụ này sử dụng mô hình khuôn mặt đã đƣợc xây dựng theo các phƣơng pháp đƣợc mô tả ở chƣơng 1 [7, 8] làm mô hình khuôn mặt nguồn, sau đó biến đổi theo hình dạng mô hình khuôn mặt mục tiêu đƣợc xuất ra từ phần mềm Poser. Hệ thống cơ trên mô hình khuôn mặt nguồn cũng đƣợc biến đổi tƣơng ứng. Nhƣ vậy, công cụ sẽ bao gồm 3 lớp chính sau: một lớp điều khiển mô hình khuôn mặt nguồn, một lớp điều khiển mô hình khuôn mặt mục tiêu và một lớp điều khiển các thao tác biến đổi mô hình khuôn mặt. Từ đó, tôi đƣa ra biểu đồ lớp thiết kế của hệ thống nhƣ Hình 3.14.

Hình 3.14: Biểu đồ lớp thiết kế của hệ thống

Ý nghĩa của từng lớp nhƣ sau:

- CMainFrame: Là lớp điều khiển khung hình (frame) chính của công cụ, trong

đó bao gồm 3 khung hình “con” (lớp CchildFrame). Lớp có một số hàm nhƣ:

o OnCreate(): Khởi tạo khung hình ban đầu.

o createAChildWindow(): khởi tạo khung hình “con”.

- CChildFrame: là lớp điều khiển khung hình “con” của công cụ. Có 3 khung hình “con” trong công cụ, đó là: khung hình hiển thị mô hình khuôn mặt nguồn, khung hình hiển thị mô hình khuôn mặt mục tiêu và khung hình hiển thị các thao tác biến đổi.

- CSFace: là lớp điều khiển mô hình khuôn mặt nguồn của công cụ. Lớp gọi hàm

OnCreate() để khởi tạo mô hình khuôn mặt nguồn.

- CControl: là lớp điều khiển của giao diện các thao tác biến đổi, với một số hàm nhƣ:

o DisplayVerticesInfo(): hiển thị danh sách điểm đánh dấu trên khuôn mặt

nguồn.

o OnSelchangeListVertices(): hiển thị vị trí điểm tƣơng ứng trên khuôn mặt nguồn khi ta lựa chọn điểm đánh dấu trong danh sách.

o OnButtonMorph(): thực hiện thao tác biến đổi mô hình khuôn mặt nguồn

theo mô hình khuôn mặt mục tiêu.

- CMeshDoc: vì mô hình khuôn mặt mục tiêu lấy dữ liệu đƣợc xuất ra từ phần

mềm Poser, nên đây là lớp phân tích dữ liệu để chuyển tới lớp CMeshView.

Hàm OnOpenDocument() thực hiện công việc phân tích này.

- CMeshView: là lớp điều khiển mô hình khuôn mặt mục tiêu, dữ liệu đƣợc lấy từ

lớp CMeshDoc. Lớp gọi hàm OnPaint() để hiển thị mô hình khuôn mặt mục tiêu.

- MGene: là lớpđiều khiển các xử lý liên quan đến gen, với một số hàm nhƣ:

o randomGenerate(): tạo ra ngẫu nhiên một gen.

o toChromosome(): đƣa gen vào trong nhiễm sắc thể.

- MGA: là lớp điều khiển thuật toán di truyền học, với một số hàm nhƣ:

o toChromosome(): kế thừa từ lớp MGene.

o lifeCycle(): xử lý một vòng đời, tạo ra một tổng thể mới từ tổng thể trƣớc đó.

o crossover(): hàm lai ghép, cho phép chọn 2 nhiễm sắc thể để tạo ra các

nhiễm sắc thể “con”.

o mutate(): hàm đột biến, thay đổi ngẫu nhiên một gen trong nhiễm sắc thể.

o to_fitness(): hàmlựa chọn ra những nhiễm sắc thể thích nghi.

Một phần của tài liệu Nghiên cứu nhân bản chuyển động khuôn mặt trên các mô hình khuôn mặt 3D khác nhau (Trang 62)

Tải bản đầy đủ (PDF)

(82 trang)