115
BCÔNG THƯƠNG TRƯỜNG ĐẠI HC CÔNG NGHIP TP. HCM KHOA CÔNG NGHĐIN TĐỒ ÁN TT NGHIP Đề tài: DÒ TÌM VÀ CT NH MT NGƯỜI DÙNG PCA GVHD: Ths. Đào ThThu Thy SVTH : Nguyn Trung Hiếu -06052461 Bùi Ngc Liêm -06054491 Lp : DHDT2B1 TP. HChí Minh, tháng 7 năm 2010

DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Embed Size (px)

Citation preview

Page 1: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TP. HCM

KHOA CÔNG NGHỆ ĐIỆN TỬ

ĐỒ ÁN TỐT NGHIỆP

Đề tài:

DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

GVHD: Ths. Đào Thị Thu Thủy

SVTH : Nguyễn Trung Hiếu -06052461

Bùi Ngọc Liêm -06054491

Lớp : DHDT2B1

TP. Hồ Chí Minh, tháng 7 năm 2010

Page 2: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

LỜI MỞ ĐẦU

Hiện nay, cùng với sự phát triển của xã hội, vấn đề an ninh bảo mật đang

được yêu cầu khắt khe tại mọi quốc gia trên thế giới. Các hệ thống nhận dạng con

người được ra đời với độ tin cậy ngày càng cao. Một trong các bài toán nhận dạng

con người rất được quan tâm hiện nay là nhận dạng khuôn mặt. Vì nhận dạng khuôn

mặt là cách mà con người sử dụng để phân biệt nhau. Bên cạnh đó, ngày nay việc

thu thập, xử lý thông tin qua ảnh để nhận biết đối tượng đang được quan tâm và ứng

dụng rộng rãi. Với phương pháp này, chúng ta có thể thu nhận được nhiều thông tin

từ đối tượng mà không cần tác động nhiều đến đối tượng nghiên cứu. Sự phát triển

của khoa học máy tính tạo môi trường thuận lợi cho bài toán nhận dạng khuôn mặt

người từ ảnh số. Các hệ thống nhận dạng offline đã ra đời và có độ tin cậy cao, tuy

nhiên các hệ thống nhận dạng online lại chưa đáp ứng được nhiều.

Bài toán nhận dạng khuôn mặt người là một bài toán hấp dẫn, không giới hạn

giải pháp sử dụng, vận dụng linh hoạt kiến thức trong nhiều lĩnh vực, đã thách thức

nhiều người nghiên cứu vì tính ứng dụng to lớn trong thực tế. Đây là một chủ đề có

thể nói còn tương đối mới với những ứng dụng mang tính công nghệ cao như: robot,

các thiết bị camera,các hệ thống bảo mật, nhận dạng,…đã và đang được các hãng,

công ty áp dụng vào nhằm nâng cao các tính năng sản phẩm của mình trong quá

trình cạnh tranh trên thị trường hiện nay…

Với mong muốn tiếp cận các công nghệ mới, đồng thời bổ sung kiến thức về

khoa học kỹ thuật hiện đại, cũng như tổng kết lại những kỹ năng, kiến thức trong

suốt quá trình học tập tại trường, chúng em xin chọn đề tài “ Dò tìm và cắt ảnh

mặt người dùng PCA”. Đây có thể là một bài toán nhỏ, nhưng nó cũng giúp chúng

em có một cái nhìn khái quát về bài toán, tạo cơ sở tiền đề cho sự tìm tòi và phát

triển các hướng cao hơn trong sự nghiên cứu các công nghệ mới...

Bài luận này được trình bày bao gồm có 5 chương:

• Chương 1: Giới thiệu Matlab và khái quát về ảnh.

• Chương 2: Các phương pháp xác định khuôn mặt.

• Chương 3: Phân tích thành phần chính PCA.

Page 3: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

• Chương 4: Chương trình mô phỏng.

• Chương 5: Kết luận.

Nội dung của đề tài:

- Tìm hiểu phương pháp nhận diện ảnh.

- Nghiên cứu PCA.

- Dò tìm ảnh mặt người có không gian (1=>4).

- Cắt ảnh mặt và lưu vào 1 file.

- Xử lý ảnh động qua webcam.

Trong bài luận này chúng em xin đề cập tới vấn đề dò tìm và nhận dạng mặt

người qua một ảnh tĩnh cho trước, đồng thời mở rộng hơn là xử lý ảnh thu được qua

một thiết bị thu ảnh, ví dụ như: camera, webcam,…

Page 4: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

LỜI CẢM ƠN

Sau một thời gian học tập và nghiên cứu, cuối cùng chúng em cũng đã hoàn

thành bài luận nghiên cứu của mình. Đây là thời điểm tốt nhất để chúng em có dịp

được bày tỏ lòng biết ơn của mình đến những người thân đã giúp đỡ động viên

trong suốt quá trình chúng em thực hiện bài luận này.

Trước tiên, chúng em xin cảm ơn BGH trường Đại Học Công Nghiệp Thành

Phố Hồ Chí Minh, Quý Thầy Cô trong khoa Công nghệ Điện Tử đã tạo điều kiện

cho chúng em thực hiện bài luận này. Đặc biệt là Cô Đào Thị Thu Thủy, Cô không

chỉ là người hướng dẫn khoa học một cách tài tình, mà còn là người dìu dắt chúng

em, động viên và định hướng cho chúng em có những bước đi đầu đời về một cách

nhìn khoa học về trí thức, cuộc sống, và sự cố gắng phấn đấu trong tương lai, điều

này có ý nghĩa rất sâu sắc đối với chúng em, giúp chúng em tự tin và nổ lực hoàn

thành bài luận này đúng thời hạn. Một lần nữa, chúng em xin bày tỏ lòng biết ơn

sâu sắc đến với Cô.

Đồng thời chúng con xin cám ơn cha mẹ, anh chị đã hết sức thông cảm, chia

sẽ và động viên chúng con trong những khó khăn trong quá trình làm đồ án tốt

nghiệp này.

Xin cám ơn những người bạn thân yêu, những người đã yêu mến, chia sẽ,

giúp đỡ chúng tôi trong lúc chúng tôi thực hiện bài luận này.

Kết quả của bài luận này là món quà mà chúng em dành tặng cho tất cả mọi

người thân yêu, với tất cả tấm lòng mình!

Sinh viên thực hiện

Nguyễn Trung Hiếu

Bùi Ngọc Liêm

Page 5: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

Chữ ký của giáo viên

Page 6: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN ...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

...............................................................................................................................

Chữ ký của giáo viên

Page 7: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

MỤC LỤC Trang

Chương 1: GIỚI THIỆU MATLAB VÀ KHÁI QUÁT VỀ ẢNH

.............................................................................................................................1

1.1 Giới thiệu chung về phần mềm Matlab.........................................................2

1.1.1 Khái niệm về Matlab ............................................................................2

1.1.2 Tổng quan về cấu trúc dữ liệu Matlab, các ứng dụng ..........................2

1.1.2.1 Dữ liệu..........................................................................................3

1.1.2.2 Ứng dụng......................................................................................3

1.1.2.3 Toolbox là một công cụ quan trọng trong Matlab .......................3

1.1.3 Hệ thống Matlab ...................................................................................3

1.1.4 Làm quen với Matlab............................................................................4

1.1.5 Các cửa sổ làm việc của Matlab ...........................................................5

1.2 Giới thiệu khái quát về ảnh số......................................................................7

1.2.1 Các khái niệm cơ bản về ảnh................................................................7

1.2.2 Các cách phân loại ảnh .........................................................................8

1.3 Xử lý ảnh với Matlab ...................................................................................9

1.3.1 Xử lý ảnh .............................................................................................9

1.3.2 Các giai đoạn xử lý ảnh .....................................................................10

1.3.3 Xử lý ảnh với Matlab..........................................................................11

1.3.3.1 Các kiểu ảnh trong Matlab.........................................................11

1.3.3.2 Các hàm xử lý ảnh cơ bản trong Matlab....................................13

1.3.3.3 Biến đổi không gian ảnh ............................................................20

Chương 2: CÁC PHƯƠNG PHÁP XÁC ĐỊNH KHUÔN MẶT

...........................................................................................................................36

2.1 Định nghĩa bài toán xác định khuôn mặt người ..........................................37

2.2 Ứng dụng của phương pháp xác định khuôn mặt .......................................37

2.3 Phương pháp xác định khuôn mặt...............................................................39

2.3.1 Hướng tiếp cận dựa trên tri thức.........................................................40

2.3.2 Hướng tiếp cận dựa trên đặc trưng không thay đổi ............................41

2.3.2.1 Các đặc trưng khuôn mặt ...........................................................42

Page 8: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

2.3.2.2 Kết cấu .......................................................................................45

2.3.2.3 Sắc màu của da...........................................................................45

2.3.2.4 Đa đặc trưng...............................................................................45

2.3.3 Hướng tiếp cận dựa trên so khớp mẫu................................................45

2.3.4 Hướng tiếp cận dựa trên diện mạo .....................................................46

2.4 Khó khăn và thử thách trong bài toán xác định khuôn mặt người ..............47

Chương 3: PHÂN TÍCH THÀNH PHẦN CHÍNH PCA

(PRINCIPAL COMPONENT ANALYSIS)

...........................................................................................................................48

3.1 Sơ lược về phân tích thành phần chính PCA ..............................................49

3.2 Thuật toán PCA và ứng dụng trong nhận dạng khuôn mặt người ..............50

3.2.1 Thuật toán ...........................................................................................50

3.2.2 Phân tích thành phần chính PCA .......................................................50

3.2.3 Hình ảnh minh họa .............................................................................53

3.3 Ứng dụng Eigenfaces trong việc nhận dạng mặt người ..............................56

3.3.1 Tính toán Eigenfaces ..........................................................................59

3.3.2 Dùng Eigenfaces để phân loại ảnh mặt người. ...................................61

3.3.3 Ứng dụng Eigenfaces để phát hiện gương mặt...................................62

3.3.3.1 Xem xét lại không gian mặt .......................................................63

3.3.3.2 Nhận dạng theo thời gian thực ...................................................64

3.4 Nhận xét ......................................................................................................65

3.4.1 Ưu điểm của phương pháp PCA.........................................................65

3.4.2 Nhược điểm của PCA.........................................................................65

Chương 4: CHƯƠNG TRÌNH MÔ PHỎNG

...........................................................................................................................67

4.1 Chương trình mô phỏng ..............................................................................68

4.1.1 Cơ sở dữ liệu ảnh................................................................................68

41.1.1 Tập ảnh huấn luyện .......................................................................68

4.1.1.2 Tập ảnh mẫu...............................................................................69

4.1.2 Các bước thực hiện chương trình .......................................................70

Page 9: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

4.1.3 Lưu đồ giải thuật.................................................................................72

4.1.3.1 Lưu đồ giải thuật chính ..............................................................72

4.1.3.2 Lưu đồ giải thuật chi tiết ............................................................72

4.1.4 Kết quả mô phỏng...............................................................................77

4.1.5 Tốc độ thực hiện. ................................................................................80

4.2 Nhận xét kết quả đạt được...........................................................................81

Chương 5: KẾT LUẬN...................................................................................85

5.1 Kết luận .......................................................................................................85

5.2 Hướng phát triển đề tài................................................................................85

PHỤ LỤC.............................................................................................................

TÀI LIỆU THAM KHẢO ..................................................................................

Page 10: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

MỤC LỤC HÌNH Trang

Hình 1.1 Cửa sổ khi khởi động Matlab...............................................................4

Hình 1.2 Cửa sổ Command History....................................................................6

Hình 1.3 Cửa sổ Workspace................................................................................6

Hình 1.4 Cửa sổ Array Editor.............................................................................7

Hình 1.5 Các bước cơ bản trong xử lý ảnh.........................................................9

Hình 1.6 Ảnh trước và sau khi imresize ...........................................................23

Hình 1.7 Ảnh trước và sau khi imrotate............................................................26

Hình 1.8 Ảnh được quay theo chiều ngang.......................................................27

Hình 1.9 Ảnh trước và sau khi imcrop..............................................................28

Hình 1.10 Ảnh trước và sau khi imcrop theo 1 tọa độ cho trước .....................30

Hình 1.11 Ảnh trước và sau khi imtransforms..................................................32

Hình 1.12 Ảnh trước và sau khi imtransformsvới 1 cường độ ảnh...................35

Hình 2.1 Độ phân giải của 1 ảnh......................................................................41

Hình 2.2 Một loại trí thức của người nghiên cứu phân tích trên khuôn mặt....41

Hình 2.3 Một mẫu khuôn mặt, có 16 vùng và 23 quan hệ (các mũi tên) ..........46

Hình 3.1 Eigenfaces ..........................................................................................53

Hình 3.2 Bức ảnh kiểm tra và hình chiếu của nó..............................................54

Hình 3.3 Ảnh ban đầu .......................................................................................55

Hình 3.4 Face map của bức ảnh ban đầu .........................................................55

Hình 3.5 Face map ảnh ban đầu với không gian không phải là khuôn mặt .....56

Hình 3.6 Những gương mặt dùng để huấn luyện ..............................................57

Hình 3.7 Bảy Eigenfaces được tính toán từ dãy huấn luyện của hình 4.6,

phông nền đã được loại bỏ................................................................................58

Hình 3.8 Ảnh và hình chiếu của nó vào không gian mặt người xác định bởi

các Eigenfaces từ hình 3.7 ................................................................................61

Hình 3.9 Ảnh gốc và bản đồ mặt người, vùng tối chỉ ra hình dạng

khuôn mặt ..........................................................................................................63

Hình 3.10 Ví dụ đơn giản thể hiện 4 hình chiếu của ảnh lên không gian mặt người.

Trong trường hợp này sử dụng 2 eigenfaces là µ1, µ2 và 3 lớp mặt người (cá thể) đã

biết trước (Ω1, Ω2, Ω3).......................................................................................63

Page 11: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Hình 3.11 Hệ thống dò tìm và định vị mặt người..............................................64

Hình 4.1 Tập ảnh Face......................................................................................68

Hình 4.2 Tập ảnh nface.....................................................................................69

Hình 4.3 Tập ảnh mẫu.......................................................................................70

Hình 4.4 Lưu đồ giải thuật chính ......................................................................72

Hình 4.5 Lưu đồ giải thuật chọn ảnh ................................................................73

Hình 4.6 Lưu đồ giải thuật chương trình dò tìm ảnh mặt người ......................74

Hình 4.7 Lưu đồ giải thuật chương trình nhận dạng........................................75

Hình 4.8 Lưu đồ giải thuật PCA .......................................................................76

Hình 4.9 Giao diện chính ..................................................................................77

Hình 4.10 Giao diện chương trình 1 (ảnh tĩnh) ................................................77

Hình 4.11 Giao diện chương trình 2 (ảnh động) ..............................................78

Hình 4.12 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 1 khuôn mặt .......78

Hình 4.13 Giao diện kết quả chương trình 2 (ảnh động)với 1 khuôn mặt........79

Hình 4.14 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 2 khuôn mặt .......79

Hình 4.15 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 4 khuôn mặt nữ ..80

Hình 4.16 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 4 khuôn mặt nam80

Hình 4.17 Ảnh lỗi do quá nhiều chi tiết không phân biệt được ........................83

Hình 4.18 Lỗi do ảnh không được sắc nét ........................................................84

Page 12: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

1

Chương 1

GIỚI THIỆU MATLAB

VÀ KHÁI QUÁT VỀ ẢNH

1.1 Giới thiệu chung về phần mềm Matlab

1.2 Giới thiệu khái quát về ảnh số

1.3 Xử lý ảnh với Matlab

Page 13: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

2

Chương 1

GIỚI THIỆU MATLAB VÀ

KHÁI QUÁT VỀ ẢNH 1.1 Giới thiệu chung về phần mềm Matlab

1.1.1 Khái niệm về Matlab

Matlab là một ngôn ngữ lập trình thực hành bậc cao được sử dụng để giải

các bài toán về kỹ thuật. Matlab tích hợp được việc tính toán, thể hiện kết quả, cho

phép lập trình, giao diện làm việc rất dễ dàng cho người sử dụng. Dữ liệu cùng với

thư viện được lập trình sẵn cho phép người sử dụng có thể có được những ứng dụng

sau đây.

• Sử dụng các hàm có sẵn trong thư viện, các phép tính toán học thông thường.

• Cho phép lập trình tạo ra những ứng dụng mới.

• Cho phép mô phỏng các mô hình thực tế.

• Phân tích, khảo sát và hiển thị dữ liệu.

• Với phần mềm đồ hoạ cực mạnh.

• Cho phép phát triển, giao tiếp với một số phần mềm khác như C++, Fortran.

1.1.2 Tổng quan về cấu trúc dữ liệu của Matlab, các ứng dụng

Matlab là một hệ thống tương giao, các phần tử dữ liệu là một mảng (mảng

này không đòi hỏi về kích thước). Chúng cho phép giải quyết các vấn đề liên quan

đến lập trình bằng máy tính, đặc biệt sử dụng các phép tính về ma trận hay vectơ và

có thể sử dụng ngôn ngữ C học Fortran lập trình rồi thực hiện ứng dụng lập trình đó

bằng các câu lệnh gọi từ Matlab. Matlab được viết tắt từ chữ “MATrix

LABoratory” tức là thư viện về ma trận, từ đó phần mềm Matlab được viết nhằm

cung cấp cho việc truy cập vào phần mềm ma trận một cách dễ dàng, phần mềm ma

trận này được phát triển bởi các công trình Linpack và Eispack. Ngày nay Matlab

được phát triển bởi Lapack và Artpack tạo nên một nghệ thuật phần mềm cho ma

trận.

Page 14: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

3

1.1.2.1 Dữ liệu

Dữ liệu của Matlab thể hiện dưới dạng ma trận (hoặc mảng - tổng quát), và

có các kiểu dữ liệu được liệt kê sau đây:

• Kiểu đơn single, kiểu này có lợi về bộ nhớ dữ liệu vì nó đòi hỏi ít byte nhớ

hơn, kiểu dữ liệu này không được sử dụng trong các phép tính toán học, độ

chính xác kém hơn.

• Kiểu double kiểu này là kiểu thông dụng nhất của các biến trong Matlab.

• Kiểu Sparse.

• Kiểu uint8, uint8, uint16, uint64...

• Kiểu char ví dụ “Hello”.

• Kiểu cell.

• Kiểu Structure.

Trong Matlab kiểu dữ liệu double là kiểu mặc định sử dụng trong các phép

tính số học.

1.1.2.2 Ứng dụng

Matlab tạo điều kiện thuận lợi cho:

• Các khoá học về toán học.

• Các kỹ sư, các nhà nghiên cứu khoa học.

• Dùng Matlab để tính toán, nghiên cứu tạo ra các sản phẩm tốt nhất trong sản

xuất.

1.1.2.3 Toolbox là một công cụ quan trọng trong Matlab

Công cụ này được Matlab cung cấp cho phép bạn ứng dụng các kỹ thuật để

phân tích, thiết kế, mô phỏng các mô hình.

Ta có thể tìm thấy toolbox ở trong mô trường làm việc của.

• Mạng nơron.

• Logic mờ.

• Simulink.

1.1.3 Hệ thống Matlab

Hệ thống giao diện của Matlab được chia thành 5 phần:

• Môi trường phát triển.

Page 15: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

4

Đây là nơi đặt các thanh công cụ, các phương tiện giúp chúng ta sử dụng các

lệnh và các file, ta có thể liệt kê một số như sau.

+ Desktop.

+ Command Window.

+ Command History.

+ Browsers for viewinghelp.

• Thư viện, các hàm toán học bao gồm các cấu trúc như tính tổng, sin cosin

atan, atan2 etc..., các phép tính đơn giản đến các phép tính phức tạp như tính

ma trận nghich đảo, trị riêng, chuyển đổi fourier, laplace, symbolic library.

• Ngôn ngữ Matlab. Đó là các ngôn ngữ cao về ma trận và mảng, với các dòng

lệnh, các hàm, cấu trúc dữ liệu vào, có thể lập trình hướng đối tượng.

• Đồ hoạ trong Matlab. Bao gồm các câu lệnh thể hiện đồ họa trong môi

trường 2D và 3D, tạo các hình ảnh chuyển động, cung cấp các giao diện

tương tác giữa người sử dụng và máy tính.

• Giao tiếp với các ngôn ngữ khác. Matlab cho phép tương tác với các ngôn

ngữ khác như C, Fortran …

1.1.4 Làm quen với Matlab

Trước tiên để khởi động Matlab bạn kích click vào biểu tượng file

Matlab.exe, trên màn hình xuất hiện cửa sổ sau. (Xem hình vẽ 1.1) Cửa sổ đó chứa

các thanh công cụ (Giao diện người và máy) cần thiết cho việc quản lý các files, các

biến, cửa sổ lệnh, có thể coi desktop là các panel gồm các ô, vùng, quản lý và tác

dụng của từng cửa sổ nhỏ được quản lý bởi desktop.

Hình 1.1 Cửa sổ khi khởi động Matlab

Page 16: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

5

Trên hình vẽ ta thấy cửa sổ desktop (cửa sổ lớn nhất), và các cửa sổ phụ của

nó.

1.1.5 Các cửa sổ làm việc của Matlab

a) Cửa sổ Command Window

Là cửa sổ giao tiếp chính của Matlab bởi đây là nơi nhập giá trị các biến,

hiển thị giá trị, tính toán giá trị của biểu thức, thực thi các hàm có sẵn trong thư viện

(dạng lệnh), hoặc các hàm (dạng function) do người dùng lập trình ra trong M-file.

Các lệnh được nhập sau dấu nhắc “>>”, và nếu có sai sót trong quá trình gõ

(nhập) lệnh thì hãy nhấn phím Enter cho đến khi nhận được dấu nhắc “>>”. Thực

thi lệnh bằng nhấn phím Enter.

Gõ các lệnh sau:

>> A= pi/2 ;

>> B= sin(A)

B=

1

Hoặc chương trình soạn thảo trong M-file dưới đây:

% Chuong trinh trong M-file

x= 0:pi/6:2*pi;

y=sin(x);

plot(x, y);

% chuong trinh được lưu với tên file là “ve_sin.m”

b) Cửa sổ command History

Các dòng mà bạn nhập vào trong cửa sổ Command Window (các dòng này

có thể là dòng nhập biến, hoặc có thể là dòng lệnh thực hiện hàm nào đó) được giữ

lại trong cửa sổ Command History, và cửa sổ này cho phép ta sử dụng lại những

lệnh đó bằng cách click chuột lên các lệnh đó hoặc các biến, nếu như bạn muốn sử

dụng lại biến đó. Xem hình 1.2

Page 17: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

6

Click

chuột lên

lệnh hoặc

biến để sử

dụng lại

Hình 1.2 Cửa sổ Command History

c) Cửa sổ Workspace

Là cửa sổ thể hiện tên các biến bạn sử dụng cùng với kích thước vùng nhớ

(số bytes), kiểu dữ liệu(lớp), các biến được giải phóng sau mỗi lần tắt chương trình.

(xem hình 1.3)

Click

chuột lên

biến để

xem dữ

liệu (hoặc

thay đổi

giá trị)

Hình 1.3 Cửa sổ Workspace

Ngoài ra nó cho phép thay đổi giá trị, cũng như kích thước của biến bằng

cách click chuột lên các biến. Hoặc click vào nút bên trái ngay cạnh nút save. Ví dụ

khi chọn biến (giả sử là biến b) rồi click (hoặc click chuột vào nút cạnh nút save) ta

được cửa sổ sau gọi là Array Editor (xem hình 1.4)

Page 18: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

7

Hình 1.4 Cửa sổ Array Editor

Tiêu đề là tên biến b, định dạng dữ liệu ở ô có tên là: Numeric format, mặc

định là dạng short, kích thước size là 1 by 3 (tức là một hàng và 3 cột) ta có thể thay

đổi kích thước này bằng cách thay đổi giá trị có trong ô kích thước size.

Dùng cửa sổ này để lưu các biến ở dưới là dữ liệu của biến b, ta có thể thay

đổi chúng bằng cách thay đổi giá trị trong các ô đó. Tất cả các biến đều được lưu

trong Workspace trong đó thể hiện cả kích thước (Size), số Bytes và kiểu dữ liệu

(class) (8 bytes cho mỗi phần tử dữ liệu kiểu double cụ thể là 24 bytes dành cho b

và 8 bytes dành cho a).

d) Cửa sổ M-file

Là một cửa sổ dùng để soạn thảo chương trình ứng dụng, để thực thi chương

trình viết trong M-file bằng cách gõ tên của file chứa chương trình đó trong cửa sổ

Commandwindow.

Khi một chương trình viết trong M-file, thì tuỳ theo ứng dụng cụ thể, tuỳ

theo người lập trình mà chương trình có thể viết dưới dạng sau:

• Dạng Script file: Tức là chương trình gồm tập hợp các câu lệnh viết dưới

dạng liệt kê, không có biến dữ liệu vào và biến lấy giá trị ra.

• Dạng hàm function: có biến dữ liệu vào và biến ra.

e) Đường dẫn thư mục: Nơi lưu giữ các files chương trình.

1.2 Giới thiệu khái quát về ảnh số

1.2.1 Các khái niệm cơ bản về ảnh

Ảnh số là tập hợp hữu hạn các điểm ảnh với mức xám phù hợp dùng để mô

tả ảnh gần với ảnh thật. Số điểm ảnh xác định độ phân giải của ảnh. Ảnh có độ phân

Page 19: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

8

giải càng cao thì càng thể hiện rõ nét các đặt điểm của tấm hình càng làm cho tấm

ảnh trở nên thực và sắc nét hơn.

a) Điểm ảnh (Picture Element)

Điểm ảnh (Pixel) là một phần tử của ảnh số tại toạ độ (x, y) với độ xám hoặc

màu nhất định. Kích thước và khoảng cách giữa các điểm ảnh đó được chọn thích

hợp sao cho mắt người cảm nhận sự liên tục về không gian và mức xám (hoặc màu)

của ảnh số gần như ảnh thật. Mỗi phần tử trong ma trận được gọi là một phần tử

ảnh.

b) Mức xám của ảnh

Mức xám: Là kết quả của sự biến đổi tương ứng 1 giá trị độ sáng của 1 điểm

ảnh với 1 giá trị nguyên dương. Thông thường nó xác định trong [0, 255] tuỳ thuộc

vào giá trị mà mỗi điểm ảnh được biểu diễn.

Các thang giá trị mức xám thông thường: 16, 32, 64, 128, 256 (Mức 256 là

mức phổ dụng. Lý do: từ kỹ thuật máy tính dùng 1 byte (8 bit) để biểu diễn mức

xám. Mức xám dùng 1 byte biểu diễn: 28=256 mức, tức là từ 0 đến 255).

c) Độ phân giải của ảnh

Định nghĩa: Độ phân giải (Resolution) của ảnh là mật độ điểm ảnh được ấn

định trên một ảnh số được hiển thị.

Theo định nghĩa, khoảng cách giữa các điểm ảnh phải được chọn sao cho

mắt người vẫn thấy được sự liên tục của ảnh. Việc lựa chọn khoảng cách thích hợp

tạo nên một mật độ phân bổ, đó chính là độ phân giải và được phân bố theo trục x

và y trong không gian hai chiều.

Ví dụ: Độ phân giải của ảnh trên màn hình CGA (Color Graphic Adaptor) là

một lưới điểm theo chiều ngang màn hình: 320 điểm chiều dọc * 200 điểm ảnh

(320*200). Rõ ràng, cùng màn hình CGA 12” ta nhận thấy mịn hơn màn hình CGA

17” độ phân giải 320*200. Lý do: cùng một mật độ (độ phân giải) nhưng diện tích

màn hình rộng hơn thì độ mịn (liên tục của các điểm) kém hơn.

1.2.2 Các cách phân loại ảnh

Ảnh nhị phân: Giá trị xám của tất cả các điểm ảnh chỉ nhận giá trị 1 hoặc 0

như vậy mỗi điểm ảnh trong ảnh nhị phân được biểu diễn bởi 1 bit.

Ảnh xám: Giá trị xám nằm trong [0, 255] như vậy mỗi điểm ảnh trong ảnh

nhị phân được biểu diễn bởi 1 byte.

Page 20: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

9

Ảnh màu:

- Hệ màu RGB:

Một pixel được biểu diễn bằng 3 giá trị (R, G, B) trong đó R, G, B là một giá trị

xám và được biểu biểu diễn bằng 1 byte. Khi đó ta có một ảnh 24 bits.

P(x, y) = (R, G, B)

- Hệ màu CMY: là phần bù của hệ màu RGB

(C, M, Y) = (1, 1, 1) - (R, G, B)

Hay C+R=M+G=Y+B=1

=> Hệ màu này thường được dùng trong máy in.

- Hệ màu CMYK: trong đó K là độ đậm nhạt của màu K= min(C, M, Y)

P(x, y) = (C-K, M-K, V-K, K).

Ví dụ:

Với (C1, M1, Y1) ta sẽ có K=min(C1, M1, Y1)

vậy CMYK=(C1-K, M1-K, Y1-K, K)

1.3 Xử lý ảnh với Matlab

1.3.1 Xử lý ảnh

Các bước cần thiết trong xử lý ảnh. Đầu tiên, ảnh tự nhiên từ thế giới ngoài

được thu nhận qua các thiết bị thu (như Camera, máy chụp ảnh). Trước đây, ảnh thu

qua Camera là các ảnh tương tự (loại Camera ống kiểu CCIR). Gần đây, với sự phát

triển của công nghệ, ảnh màu hoặc đen trắng được lấy ra từ Camera, sau đó nó được

chuyển trực tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo. Máy ảnh số hiện nay

là một thí dụ gần gũi. Mặt khác, ảnh cũng có thể tiếp nhận từ vệ tinh; có thể quét từ

ảnh chụp bằng máy quét ảnh. Hình dưới đây mô tả các bước cơ bản trong xử lý ảnh.

Thu nhận ảnh

Tiền xử lý ảnh

Phân đoạn ảnh

Biểu diễn và mô tả

Nhận dạng và nội suy

Cơ sở tri thức

Page 21: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

10

Hình 1.5 Các bước cơ bản trong xử lý ảnh

1.3.2 Các giai đoạn xử lý ảnh

a) Thu nhận ảnh (Image Acquisition)

- Ảnh được thu từ nhiều nguồn khác nhau:máy ảnh, máy quay phim, máy quét,

ảnh vệ tinh…

- Mục đích: biến đổi thông tin hình ảnh về các cấu trúc được lưu trữ trong máy

tính, có thể hiển thị ra các thiết bị ngoại vi như là máy in, màn hình…

- Gồm hai tiến trình:

+ Biến đổi năng lượng quang học thành năng lượng điện.

+ Tổng hợp năng lượng điện thành ảnh hoặc ma trận số.

b) Tiền xử lý (Image Processing)

- Là quá trình sử dụng các kỹ thuật xử lý ảnh để làm ảnh tốt lên theo mục đích

sử dụng.

- Mục đích:

+ Điều chỉnh độ chiếu sáng để khắc phục hậu quả của việc chiếu sáng không

đều.

+ Giảm nhỏ thành phần nhiễu của ảnh tức là các đối tượng xuất hiện ngoài ý

muốn.

+ Hiệu chỉnh giá trị độ sáng giữa nền và đối tượng.

+ Chuẩn hoá độ lớn, màu, dạng của ảnh.

+Điều chỉnh bộ lọc để khuyếch đại và nén các tần số.

c) Phân đoạn (Segmentation)

- Là quá trình phân chia nội dung các đối tượng cần khảo sát ra khỏi ảnh.

- Phân chia các đối tượng tiếp giáp nhau.

- Phân tách các đối tượng riêng biệt thành các đối tượng con.

d) Biểu diễn ảnh (Image Representation)

Đầu ra ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh (ảnh đã phân

đoạn) cộng với mã liên kết với các vùng lận cận. Việc biến đổi các số liệu này thành

dạng thích hợp là cần thiết cho xử lý tiếp theo bằng máy tính. Việc chọn các tính

chất để thể hiện ảnh gọi là trích chọn đặc trưng (Feature Selection) gắn với việc tách

Page 22: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

11

các đặc tính của ảnh dưới dạng các thông tin định lượng hoặc làm cơ sở để phân

biệt lớp đối tượng này với đối tượng khác trong phạm vi ảnh nhận được.

Ví dụ: trong nhận dạng ký tự trên phong bì thư, chúng ta miêu tả các đặc

trưng của từng ký tự giúp phân biệt ký tự này với ký tự khác.

e) Nhận dạng và nội suy ảnh (Image Recognition and Interpretation)

Nhận dạng ảnh là quá trình xác định ảnh. Quá trình này thường thu được

bằng cách so sánh với mẫu chuẩn đã được học (hoặc lưu) từ trước. Nội suy là phán

đoán theo ý nghĩa trên cơ sở nhận dạng.

Ví dụ: một loạt chữ số và nét gạch ngang trên phong bì thư có thể được nội

suy thành mã điện thoại. Có nhiều cách phân loai ảnh khác nhau về ảnh. Theo lý

thuyết về nhận dạng, các mô hình toán học về ảnh được phân theo hai loại nhận

dạng ảnh cơ bản:

- Nhận dạng theo tham số.

- Nhận dạng theo cấu trúc.

Một số đối tượng nhận dạng khá phổ biến hiện nay đang được áp dụng trong

khoa học và công nghệ là: nhận dạng ký tự (chữ in, chữ viết tay, chữ ký điện tử),

nhận dạng văn bản (Text), nhận dạng vân tay, nhận dạng mã vạch, nhận dạng mặt

người…

f) Cơ sở tri thức (Knowledge Base)

Như đã nói ở trên, ảnh là một đối tượng khá phức tạp về đường nét, độ sáng

tối, dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo theo nhiễu. Trong

nhiều khâu xử lý và phân tích ảnh ngoài việc đơn giản hóa các phương pháp toán

học đảm bảo tiện lợi cho xử lý, người ta mong muốn bắt chước quy trình tiếp nhận

và xử lý ảnh theo cách của con người. Trong các bước xử lý đó, nhiều khâu hiện

nay đã xử lý theo các phương pháp trí tuệ con người. Vì vậy, ở đây các cơ sở tri

thức được phát huy.

1.3.3 Xử lý ảnh với Matlab

1.3.3.1 Các kiểu ảnh trong Matlab

a) Ảnh được định chỉ số (Indexed Images)

Một ảnh chỉ số bao gồm một ma trận dữ liệu X và ma trận bản đồ màu map.

Ma trận dữ liệu có thể có kiểu thuộc lớp uint8, uint16 hoặc kiểu double. Ma trận

bản đồ màu là một mảng mx3 kiểu double bao gồm các giá trị dấu phẩy động nằm

Page 23: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

12

giữa 0 và 1. Mỗi hàng của bản đồ chỉ ra các giá trị mà: red, green và blue của một

màu đơn. Một ảnh chỉ số sử dụng ánh xạ trực tiếp giữa giá trị của pixel ảnh tới giá

trị trong bản đồ màu. Màu sắc của mỗi pixel ảnh được tính toán bằng cách sử dụng

giá trị tương ứng của X ánh xạ tới một giá trị chỉ số của map. Giá trị 1 chỉ ra hàng

đầu tiên, giá trị 2 chỉ ra hàng thứ hai trong bản đồ màu …

Một bản đồ màu thường được chứa cùng với ảnh chỉ số và được tự động nạp

cùng với ảnh khi sử dụng hàm imread để đọc ảnh. Tuy nhiên, ta không bị giới hạn

khi sử dụng bản đồ màu mặc định, ta có thể sử dụng bất kì bản đồ màu nào.

b) Ảnh cường độ (Intensity Images)

Một ảnh cường độ là một ma trận dữ liệu ảnh I mà giá trị của nó đại diện cho

cường độ trong một số vùng nào đó của ảnh. Matlab chứa một ảnh cường độ như

một ma trận đơn, với mỗi phần tử của ma trận tương ứng với một pixel của ảnh. Ma

trận có thể thuộc lớp double, uint8 hay uint16. Trong khi ảnh cường độ hiếm khi

được lưu với bản đồ màu, Matlab sử dụng bản đồ màu để hiển thị chúng.

Những phần tử trong ma trận cường độ đại diện cho các cường độ khác nhau

hoặc độ xám. Những điểm có cường độ bằng 0 thường được đại diện bằng màu đen

và cường độ 1,255 hoặc 65535 thường đại diện cho cường độ cao nhất hay màu

trắng.

c) Ảnh nhị phân (Binary Images)

Trong một ảnh nhị phân, mỗi pixel chỉ có thể chứa một trong hai giá trị nhị

phân 0 hoặc 1. Hai giá trị này tương ứng với bật hoặc tắt (on hoặc off). Một ảnh nhị

phân được lưu trữ như một mảng logic của 0 và 1.

d) Ảnh RGB (RGB Images)

Một ảnh RGB - thường được gọi là true-color, được lưu trữ trong Matlab

dưới dạng một mảng dữ liệu có kích thước 3 chiều mxnx3 định nghĩa các giá trị màu

red, green và blue cho mỗi pixel riêng biệt. Ảnh RGB không sử dụng palette. Màu

của mỗi pixel được quyết định bởi sự kết hợp giữa các giá trị R, G, B (Red, Green,

Blue) được lưu trữ trong một mặt phẳng màu tại vị trí của pixel. Định dạng file đồ

hoạ lưu trữ ảnh RGB giống như một ảnh 24 bits trong đó R, G, B chiếm tương ứng

8 bit một. Điều này cho phép nhận được 16 triệu màu khác nhau.

Một mảng RGB có thể thuộc lớp double, uint8 hoặc uint16. Trong một mảng

RGB thuộc lớp double, mỗi thành phần màu có giá trị giữa 0 và 1. Một pixel mà

Page 24: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

13

thành phần màu của nó là (0, 0, 0) được hiển thị với màu đen và một pixel mà thành

phần màu là (1, 1, 1 ) được hiển thị với màu trắng. Ba thành phần màu của mỗi

pixel được lưu trữ cùng với chiều thứ 3 của mảng dữ liệu. Chẳng hạn, giá trị màu R,

G, B của pixel (10, 5) được lưu trữ trong RGB(10, 5, 1), RGB(10, 5, 2) và RGB(10,

5, 3) tương ứng.

Để tính toán màu sắc của pixel tại hàng 2 và cột 3 chẳng hạn, ta nhìn vào bộ

ba giá trị được lưu trữ trong (2, 3, 1:3). Giả sử (2, 3, 1) chứa giá trị 0.5176; (2, 3, 2)

chứa giá trị 0.1608 và (2, 3, 3) chứa giá trị 0.0627 thì màu sắc của pixel tại (2, 3) sẽ

là (0.5176, 0.1608, 0.0627).

1.3.3.2 Các hàm xử lý ảnh cơ bản trong Matlab

a) Đọc và ghi dữ liệu ảnh

Đọc một ảnh đồ hoạ

- Hàm imread đọc một ảnh từ bất kì định dạng nào được trợ giúp trong bất kì

chiều sâu bit nào được trợ giúp. Hầu hết các file ảnh sử dụng 8 bit để chứa

giá trị của pixel. Khi chúng được đọc vào bộ nhớ, Matlab chứa chúng dưới

dạng uint8. Với các file trợ giúp 16 bít dữ liệu, PNG và TIFF, Matlab chứa

chúng dưới dạng uint16.

Chú ý: Với ảnh chỉ số, imread luôn luôn đọc bản đồ màu vào trong một

chuỗi thuộc lớp double, thậm chí mảng ảnh tự nó thuộc lớp uint8 hay uint16

- Chẳng hạn, đoạn mã sau sẽ đọc một ảnh RGB vào không gian làm việc của

Matlab lưu trong biến RGB.

RGB=imread(‘football.jpg’);

Trong ví dụ này, imread sẽ nhận ra định dạng file để sử dụng từ tên file. Ta

cũng có thể chỉ ra định dạng file như một tham số trong hàm imread. Matlab trợ

giúp rất nhiều định dạng đồ hoạ thông dụng chẳng hạn: BMP, GIF, JPEG, PNG,

TIFF … Để biết thêm các kiểu gọi hàm và tham số truyền vào, xem trợ giúp online

của Matlab.

Đọc nhiều ảnh từ một file đồ hoạ

- Matlab trợ giúp một số định dạng file đồ hoạ chẳng hạn như: HDF và TIFF,

chúng chứa nhiều ảnh. Theo mặc định, imread chỉ trợ giúp ảnh đầu tiên

trong file. Để nhập thêm các ảnh từ file, sử dụng cú pháp được trợ giúp bởi

Page 25: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

14

định dạng file. Chẳng hạn, khi được sử dụng với TIFF, ta có thể sử dụng một

giá trị chỉ số với imread để chỉ ra ảnh mà ta muốn nhập vào.

Ví dụ sau đây đọc một chuỗi 27 ảnh từ một file TIFF và lưu những ảnh này

trong một mảng 4 chiều. Ta có thể sử dụng hàm iminfo để xem bao nhiêu ảnh đã

được lưu trữ trong file:

mri = uint8(zeros(128,128,1,27)); % preallocate 4-D array

for frame=1:27

[mri(:,:,:,frame),map] = imread('mri.tif',frame);

End

- Khi file chứa nhiều ảnh theo một số kiểu nhất định chẳng hạn theo thứ tự

thời gian, ta có thể lưu ảnh trong Matlab dưới dạng mảng 4 chiều. Tất cả các

ảnh phải có cùng kích thước.

Ghi một ảnh đồ hoạ

- Hàm imwrite sẽ ghi một ảnh tới một file đồ hoạ dưới một trong các định

dạng được trợ giúp. Cấu trúc cơ bản nhất của imwrite sẽ yêu cầu một biến

ảnh và tên file. Nếu ta gộp một phần mở rộng trong tên file, Matlab sẽ nhận

ra định dạng mong muốn từ nó.

Ví dụ sau tải một ảnh chỉ số X từ một file Map với bản đồ màu kết hợp với

nó map sau đó ghi ảnh xuống một file bitmap.

load clown

whos

Name Size Bytes Class

X 200x320 512000 double array

caption 2x1 4 char array

map 81x3 1944 double array

Grand total is 64245 elements using 513948 bytes

imwrite(X,map,'clown.bmp')

Chỉ ra định dạng phụ - Tham số đặc biệt

- Khi sử dụng imwrite với một số định dạng đồ hoạ, ta có thể chỉ ra các tham

số phụ. Chẳng hạn, với định dạng PNG ta có thể chỉ ra độ sâu bit như một

tham số phụ. Ví dụ sau sẽ chi một ảnh cường độ I với một file ảnh 4 bit

PNG.

Page 26: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

15

imwrite(I,'clown.png','BitDepth',4 );

- Để biết thêm các cấu trúc khác của hàm xem phần trợ giúp trực tuyến của

Matlab.

Đọc và ghi ảnh nhị phân theo định dạng 1 bit

- Trong một số định dạng file, một ảnh nhị phân có thể được lưu trong một

định dạng 1 bit. Nếu định dạng file trợ giúp nó, Matlab ghi ảnh nhị phân như

ảnh 1 bit theo mặc định. Khi ta đọc một ảnh nhị phân với định dạng 1 bit,

Matlab đại diện nó trong không gian làm việc như một mảng lôgic.

- Ví dụ sau đọc một ảnh nhị phân và ghi nó dưới dạng file TIFF. Bởi vì định

dạng TIFF trợ giúp ảnh 1 bit, file được ghi lên đĩa theo định dạng 1 bit:

BW = imread('text.png');

imwrite(BW,'test.tif');

Để kiểm tra chiều sâu bit của file test.tif, gọi hàm iminfo và kiểm tra trường

BitDepth của nó:

info = imfinfo('test.tif');

info.BitDepth

ans =1

Chú ý: Khi ghi file nhị phân, Matlab thiết lập trường ColorType thành

‘grayscale’.

Xem lớp lưu trữ của file .

- Hàm imwrite sử dụng luật sau đây để quyết định lớp lưu trữ được sử dụng

trong ảnh kết quả:

+ logical: Nếu định dạng ảnh ra (Output Image) được chỉ rõ là trợ giúp ảnh 1

bit, hàm imwrite tạo một file ảnh 1 bit. Nếu định dạng ảnh ra được chỉ rõ là không

trợ giúp ảnh 1 bit (như JPEG), hàm imwrite chuyển ảnh tới một ảnh thuộc lớp

uint8.

+ uint8: Nếu định dạng ảnh ra được chỉ rõ là trợ giúp ảnh 8 bit, hàm imwrite

tạo một ảnh 8 bit

+ uint16: Nếu định dạng ảnh ra được chỉ rõ trợ giúp ảnh 16 bit (PNG hoặc

TIFF), hàm imwrite tạo một ảnh 16 bit. Nếu định dạng ảnh ra không trợ giúp ảnh

16 bit, hàm chuyển đổi dữ liệu ảnh tới lớp uint8 và tạo một ảnh 8 bit.

Page 27: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

16

+ double: Matlab chuyển dữ liệu ảnh tới dạng uint8 và tạo một ảnh 8 bit bởi

vì hầu hết các file ảnh sử dụng định dạng 8 bit.

Truy vấn một file đồ hoạ

- Hàm imfinfo cho phép ta có thể nhận được thông tin về một file ảnh được

trợ giúp bởi toolbox.

Cú pháp: imfinfo(filename,fmt)

Các thông tin được cung cấp bởi hàm imfinfo là: filename, filemodedate,

filesize, format, formatversion, width, height, bitdepth, colortype … Thông tin mà

ta nhận được phụ thuộc vào kiểu của file nhưng nó luôn bao gồm những thông tin

sau:

+ Tên của file ảnh.

+ Định dạng file ảnh.

+ Số version của định dạng file.

+ Ngày sửa đổi file gần nhất.

+ Kích thước file tính theo byte.

+ Chiều rộng ảnh tính theo pixel.

+ Chiều cao ảnh tính theo pixel.

+ Số lượng bít trên một pixel.

+ Kiểu ảnh: RGB, chỉ số …

b) Hiển thị ảnh

Dùng hàm imview

- Để hiển thị một ảnh sử dụng hàm imview, dùng hàm imview, chỉ rõ ảnh mà

ta muốn hiển thị. Ta có thể sử dụng imview để hiển thị một ảnh mà đã được

nhập vào trong không gian làm việc của Matlab.

moonfig = imread('moon.tif');

imview(moonfig);

Ta cũng có thể chỉ định tên của file ảnh như trong ví dụ sau:

imview('moon.tif');

- File ảnh phải có mặt trong thư mục hiện tại hoặc trong đường dẫn của

Matlab. Cấu trúc này có thể hữu ích cho việc quét qua nhiều ảnh. Tuy nhiên,

lưu ý, khi sử dụng cấu trúc này, dữ liệu ảnh không được lưu trong không

gian làm việc của Matlab.

Page 28: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

17

- Nếu ta gọi hàm imview mà không chỉ ra mất kì tham số nào, nó sẽ hiển thị

một hộp chọn file cho phép ta chỉ ra tên file muốn hiển thị.

Xem nhiều ảnh

- Nếu ta chỉ ra một file mà chứa nhiều ảnh, hàm imview chỉ hiển thị ảnh đầu

tiên trong file đó. Để xem tất cả các ảnh trong file, sử dụng hàm imread để

nhập mỗi ảnh vào trong không gian làm việc của Matlab sau đó gọi hàm

imview nhiều lần để hiển thị mỗi ảnh riêng biệt.

Dùng hàm imshow

- Để xem ảnh, ta có thể sử dụng hàm imshow thay cho imview. Ta sử dụng

imshow để hiển thị một ảnh đã được nhập vào trong không gian làm việc

như ví dụ sau:

moon = imread('moon.tif');

imshow(moon);

Ta cũng có thể chỉ ra tên của file ảnh như một tham số truyền vào cho hàm

như ví dụ sau: imshow('moon.tif');

Khi sử dụng cấu trúc này thì dữ liệu ảnh không được nhập vào trong không

gian làm việc. Tuy nhiên, ta có thể mang ảnh vào trong không gian làm việc bằng

cách sử dụng hàm getimage. Hàm này sẽ nhận dữ liệu ảnh từ handle của một đối

tượng ảnh hiện tại. Chẳng hạn: moon = getimage; Sẽ gán dữ liệu ảnh từ moon.tif

vào biến moon.

c) Các hàm chuyển đổi kiểu ảnh

- Với các thao tác nhất định sẽ thật hữu ích khi có thể chuyển đổi ảnh từ dạng

này sang dạng khác. Chẳng hạn, nếu ta muốn lọc một màu ảnh được lưu trữ

dưới dạng ảnh chỉ số đầu tiên ta nên chuyển đổi nó thành dạng ảnh RGB.

Khi ta áp dụng phép lọc tới ảnh RGB, Matlab sẽ lọc giá trị cường độ trong

ảnh tương ứng. Nếu ta cố gắng lọc ảnh chỉ số, Matlab đơn giản chỉ áp đặt

phép lọc tới ma trận ảnh chỉ số và kết quả sẽ không có ý nghĩa.

Chú ý: Khi chuyển đổi một ảnh từ dạng này sang dạng khác, ảnh kết quả có

thể khác ảnh ban đầu. Chẳng hạn, nếu ta chuyển đổi một ảnh màu chỉ số sang một

ảnh cường độ, kết quả ta sẽ thu được một ảnh đen trắng.

- Danh sách sau đây sẽ liệt kê các hàm được sử dụng trong việc chuyển đổi

kiểu ảnh:

Page 29: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

18

+ dither: Tạo một ảnh nhị phân từ một ảnh cường độ đen trắng bằng cách

trộn, tạo một ảnh chỉ số từ một ảnh RGB bằng cách trộng (dither).

+ gray2id: Tạo một ảnh chỉ số từ một ảnh cường độ đen trắng.

+ grayslice: Tạo một ảnh chỉ số từ một ảnh cường độ đen trắng bằng cách

đặt ngưỡng.

+ im2bw: Tạo một ảnh nhị phân từ một ảnh cường độ, ảnh chỉ số hay ảnh

RGB trên cơ sở của ngưỡng ánh sáng.

+ ind2gray: Tạo một ảnh cường độ đen trắng từ một ảnh chỉ số.

+ ind2rgb: Tạo một ảnh RGB từ một ảnh chỉ số.

+ mat2gray: Tạo một ảnh cường độ đen trắng từ dữ liệu trong một ma trận

bằng cách lấy tỉ lệ giữ liệu.

+ rgb2gray: Tạo một ảnh cường độ đen trắng từ một ảnh RGB.

+ rgb2ind: Tạo một ảnh chỉ số từ một ảnh RGB.

- Ta cũng có thể thực hiện các phép chuyển đổi kiểu chỉ sử dụng cú pháp của

Matlab. Chẳng hạn, ta có thể chuyển đổi một ảnh cường độ sang ảnh RGB

bằng cách ghép nối 3 phần copy của ma trận ảnh gốc giữa 3 chiều:

RGB=cat(3,I,I,I );

- Ảnh RGB thu được có các ma trận đồng nhất cho các mặt phẳng R, G, B vì

vậy ảnh hiển thị giống như bóng xám.

- Thêm vào những công cụ chuyển đổi chuẩn đã nói ở trên, cũng có một số

hàm mà trả lại kiểu ảnh khác như một phần trong thao tác mà chúng thực

hiện.

Chuyển đổi không gian màu

- Toolbox xử lý ảnh biểu diễn màu sắc như các giá trị RGB ( trực tiếp trong

ảnh RGB hoặc gián tiếp trong ảnh chỉ số ). Tuy nhiên, có các phương pháp

khác cho việc biểu diễn màu sắc. Chẳng hạn, một màu có thể được đại diện

bởi các giá trị hue, saturation và các giá trị thành phần (HSV). Các phương

pháp khác cho việc biểu diễn màu được gọi là không gian màu.

- Toolbox cung cấp một tập các thủ tục để chuyển đổi giữa các không gian

màu. Các hàm xử lý ảnh tự chúng coi dữ liệu màu sắc dưới dạng RGB tuy

nhiên, ta có thể xử lý một ảnh mà sử dụng các không gian màu khác nhau

Page 30: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

19

bằng cách chuyển đổi nó sang RGB sau đó chuyển đổi ảnh đã được xử lý trở

lại không gian màu ban đầu.

d) Chuyển đổi định dạng các file ảnh

- Để thay đổi định dạng đồ hoạ của một ảnh, sử dụng hàm imread để đọc một

ảnh và sau đó lưu nó với hàm imwrite đồng thời chỉ ra định dạng tương ứng.

- Để minh hoạ, ví dụ sau đây sử dụng hàm imread để đọc một file BMP vào

không gian làm việc.Sau đó, hàm imwrite lưu ảnh này dưới định dạng PNG

bitmap = imread('mybitmap.bmp','bmp');

imwrite(bitmap,'mybitmap.png','png');

e) Số học ảnh

- Số học ảnh sự ứng dụng của các phép toán số học chuẩn như: cộng, trừ,

nhân, chia lên ảnh. Số học ảnh được sử dụng nhiều trong xử lý ảnh trong cả

các bước ban đầu lẫn các thao tác phức tạp hơn. Chẳng hạn, trừ ảnh có thể

được sử dụng để phát hiện sự khác nhau giữa hai hoặc nhiều ảnh của cùng

một cảnh hoặc một vật.

- Ta có thể thực hiện số học ảnh sử dụng các toán tử số học của Matlab.

Toolbox xử lý ảnh bao gồm một tập hợp các hàm ứng dụng các phép toán số

học trên tất cả các con số không lấp đầy. Hàm số học của toolbox chấp nhận

bất kì kiểu dữ liệu số nào bao gồm uint8, uint16 hay double và trả lại ảnh kết

quả trong cùng định dạng. Các hàm thực hiện các phép toán với độ chính xác

kép trên từng phần tử nhưng không chuyển đổi ảnh tới giá trị chính xác kép

trong không gian làm việc của Matlab. Sự tràn số được điều khiển tự động.

Hàm sẽ cắt bỏ giá trị trả về để vừa với kiểu dữ liệu.

Luật cắt bỏ trong số học ảnh

- Kết quả của số học nguyên có thể dễ dàng tràn số dùng cho lưu trữ. Chẳng

hạn, giá trị cực đại ta có thể lưu trữ trong uint8 là 255. Các phép toán số học

có thể trả về giá trị phân số - không được biểu diễn bởi một chuỗi số nguyên.

- Các hàm số học ảnh sử dụng những luật này cho số học nguyên:

+ Giá trị vượt quá khoảng của kiểu số nguyên bị cắt bỏ tới khoảng đó

+ Giá trị phân số được làm tròn

Page 31: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

20

Chẳng hạn, nếu dữ liệu có kiểu uint8, kết quả trả về nếu lớn hơn 255 ( bao

gồm Inf ) thì được gán là 255.

Lời gọi lồng nhau tới hàm số học ảnh

- Ta có thể sử dụng các hàm số học ảnh kết hợp để thực hiện một chuỗi các

phép toán. Chẳng hạn để tính giá trị trung bình của hai ảnh:

C=(A+B) /2

Ta có thể nhập vào như sau:

I = imread('rice.png');

I2 = imread('cameraman.tif');

K = imdivide(imadd(I,I2), 2); % not recommended

- Khi được sử dụng với kiểu uint8 hay uint16, mỗi hàm số học cắt kết quả của

nó trước khi truyền nó cho hàm thiếp theo. Sự cắt bỏ này có thể giảm đáng

kể lượng thông tin trong ảnh cuối cùng. Một cách làm tốt hơn để thực hiện

một chuỗi các tính toán là sử dụng hàm imlincomb. Hàm này thi hành tất cả

các phép toán số học trong sự kết hợp tuyến tính của độ chính xác kép và chỉ

cắt bỏ kết quả cuối cùng:

K = imlincomb(.5,I,.5,I2); % recommended

1.3.3.3 Biến đổi không gian ảnh

Biến đổi không gian ảnh là thực hiện ánh xạ giữa vị trí các pixel trong ảnh

vào với các pixel trong ảnh ra.

a) Bảng thuật ngữ

Tên thuật ngữ Diễn giải

Aliasing

Răng cưa - xuất hiện khi giảm kích thước

ảnh. Khi kích thước của một ảnh bị giảm,

các pixel gốc bị lấy mẫu giảm để tạo ra ít

pixel hơn. Aliasing xảy ra như kết quả của

việc giảm kích thước ảnh thường xuất hiện

dưới dạng bậc thang ( đặc biệt trong các

ảnh có độ tương phản cao )

Antialiasing Các biện pháp chống răng cưa cho ảnh

Bicubic interpolation Giá trị của các pixel ra được tính toán từ

Page 32: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

21

giá trị trung bình của 4x4 pixel lân cận

Bilinear interpolation Gía trị của pixel ra được tính toán từ giá

trị trung bình của 2x2 pixel lân cận

Geometric operation

Một thao tác sửa đổi quan hệ hình học gữa

các pixel trong một ảnh. Chẳng hạn thay

đổi kích thước ảnh, quay ảnh và xén ảnh

Interpolation Quá trình được sử dụng để ước lượng giá

trị ảnh ở một vị trí giữa các pixel

Nearest-neighbor

interpolation

Các giá trị pixel ra được gán giá trị của

pixel nằm trong một vùng gần pixel đó.

b) Nội suy

Nội suy là quá trình sử dụng để ước lượng một giá trị ảnh ở một vị trí giữa

các pixel. Chẳng hạn, nếu ta thay đổi kích thước một ảnh, nó sẽ chứa nhiều pixel

hơn ảnh gốc, toolbox sử dụng sự nội suy để tính giá trị cho các pixel thêm vào. Hàm

imresize và imrotate sử dụng nội suy hai chiều để thực hiện thao tác của mình.

Hàm improfile cũng sử dụng sự nội suy hoá.

Các phương pháp nội suy

- Toolbox sử lý ảnh cung cấp 3 cách nội suy hoá

+ Nội suy các pixel gần nhất ( nearest –neighbor interpolation )

+ Nội suy song tuyến tính ( Bilinear interpolation )

+ Nội suy song khối ( Bicubic interpolation )

Các phương pháp nội suy làm việc theo một cách giống nhau. Trong mỗi

trường hợp, để tính giá trị của một pixel đã được nội suy, chúng tìm điểm trong ảnh

ra mà pixel nằm tại đó. Sau đó, chúng gán một giá trị tới các pixel ra bằng cách tính

toán giá trị trung bình có trọng số của một số pixel lân cận. Trọng số dựa trên cơ sở

khoảng cách tới điểm đang xét.

- Các phương pháp này khác nhau ở tập các pixel mà chúng xem xét:

+ Với nội suy các pixel gần nhất: pixel ra được gán giá trị của các pixel ở

gần nó nhất. Các pixel khác không được xem xét.

+ Nội suy song tuyến tính, giá trị của pixel ra là giá trị trung bình theo trọng

số của 2x2 pixel lân cận.

Page 33: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

22

+ Nội suy song khối: giá trị của pixel ra là trung bình có trọng số của 4x4

pixel lân cận.

Số lượng các pixel được xem xét ảnh hưởng đến độ phức tạp tính toán. Vì

vậy, phương pháp song tuyến tính mất nhiều thời gian hơn phương pháp thứ nhất và

phương pháp song khối mất nhiều thời gian hơn song tuyến tính. Tuy nhiên, số

lượng pixel lớn hơn, độ chính xác sẽ tốt hơn.

Kiểu ảnh

- Các hàm sử dụng tuyến tính yêu cầu một tham số chỉ ra phương pháp nội

suy. Với hầu hết các hàm, phương pháp mặc định được sử dụng là nearest-neighbor

interpolation. Phương pháp này tạo ra một kết quả có thể chấp nhận được cho hầu

hết các ảnh và là phương pháp duy nhất thích hợp với ảnh chỉ số. Với ảnh cường độ

hay RGB, tuy nhiên ta thường chỉ ra kiểu song tuyến tính hoặc song khối bởi vì

những phương pháp này cho kết quả tốt hơn

Với ảnh RGB, nội suy thường được thực hiện trên mặt phẳng R,B,G một

cách riêng biệt

Với ảnh nhị phân, nội suy gây ra những ảnh hưởng mà ta có thể nhận thấy

được. Nếu sử dụng nội suy song tuyến tính hoặc song khối, giá trị tính toán được

cho pixel trong ảnh ra sẽ không hoàn toàn là 0 hoặc 1. Ảnh hưởng trên ảnh kết quả

phụ thuộc vào lớp của ảnh vào:

+ Nếu lớp ảnh vào là double, ảnh ra là một ảnh đen trắng thuộc lớp double.

Ảnh ra không là ảnh nhị phân bởi vì nó bao gồm các giá trị khác 0 và 1.

+ Nếu ảnh vào là uint8, ảnh ra là một ảnh nhị phân thuộc lớp uint8. Giá trị

của các pixel được nội suy được làm tròn thành 0 hoặc 1. Vì vậy , ảnh ra thuộc lớp

uint8.

Nếu sử dụng phương pháp nearest-neighbor interpolation, ảnh ra luôn là ảnh

nhị phân bởi vì những giá trị của pixel được nội suy được lấy trực tiếp từ ảnh vào.

c) Thay đổi kích thước ảnh

- Để thay đổi kích thước của một ảnh, sử dụng hàm imresize. Sử dụng hàm

này ta có thể:

+ Chỉ ra kích thước của ảnh kết quả.

+ Chỉ ra phương pháp nội suy được sử dụng.

+ Chỉ ra bộ lọc được sử dụng để ngăn ngừa hiện tượng răng cưa.

Page 34: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

23

Chỉ ra kích thước cho ảnh kết quả

- Sử dụng hàm imresize, ta chó thể chỉ ra kích thước của ảnh kết quả theo

hai cách:

+ Bằng cách chỉ ra hệ số phóng đại được sử dụng trên ảnh.

+ Bằng cách chỉ ra chiều của ảnh kết quả.

Sử dụng hệ số phóng đại ảnh

- Để mở rộng một ảnh, chỉ ra hệ số phóng đại lớn hơn 1. Để thu nhỏ một ảnh,

chỉ ra hệ số phóng đại nằm giữa 0 và 1. Chẳng hạn, lệnh sau tăng kích thước của

ảnh I lên 1.25 lần:

Hình 1.5 Ảnh trước và sau khi imresize

I = imread('circuit.tif');

J = imresize(I,1.25);

imshow(I)

figure, imshow(J)

Chỉ định kích thước của ảnh ra

- Ta có thể chỉ ra kích thước của ảnh ra bằng cách truyền một véc tơ chứa số

lượng hàng và cột của ảnh sau cùng. Những lệnh sau đây tạo một ảnh ra Y với 100

hàng và 150 cột.

Y = imresize(X,[100 150])

Page 35: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

24

Chú ý: Nếu kích thước được chỉ ra không có cùng tỉ lệ với ảnh vào, ảnh ra

sẽ bị biến dạng

Chỉ định phương pháp nội suy được sử dụng.

- Theo mặc định, hàm imresize sử dụng phương pháp nội suy các pixel gần

nhất (nearest – neighbor interpolation) để tính giá trị các pixel của ảnh ra. Tuy

nhiên, ta có thể chỉ định các phương pháp nội suy khác. Bảng sau đây liệt kê các

phương pháp nội suy được trợ giúp theo thứ tự của độ phức tạp.

Giá trị tham số Phương pháp nội suy

‘nearest’ Nội suy các phixel gần nhất ( mặc định )

‘bilinear’ Nội suy song tuyến tính

‘biculic’ Nội suy song khối

Trong ví dụ sau, hàm imresize sử dụng phương pháp nội suy song tuyến tính:

Y=imresize(X, [100 150],’bilinear’);

Sử dụng bộ lọc để ngăn chặn hiện tượng răng cưa

- Việc giảm kích thước (hình học) của một ảnh có thể gây ra những ảnh

hưởng nhất định lên ảnh chẳng hạn như hiện tượng xuất hiện răng cưa tại biên của

ảnh . Điều này là do thông tin luôn bị mất khi ta giảm kích thước một ảnh. Răng cưa

xuất hiện như những gợn sóng trong ảnh sau cùng.

- Khi giảm kích thước của ảnh sử dụng nội suy song tuyến tính hoặc song

khối, hàm imresize tự động áp đặt một bộ lọc thông thấp lên ảnh trước khi nội suy.

Điều này để giảm ảnh hưởng của răng cưa trong ảnh ra. Ta có thể chỉ ra kích thước

của bộ lọc này hoặc chỉ ra một bộ lọc khác thay thế.

Chú ý: Thậm chí đã sử dụng một bộ lọc thông thấp, chất lượng của ảnh vẫn

bị ảnh hưởng do thông tin luôn bị mất trong quá trình nội suy

- Hàm imresize không áp đặt một bộ lọc thông thấp lên ảnh nếu phương pháp

nội suy các pixel gần nhất được sử dụng. Phương pháp nội suy này ban đầu được sử

dụng với các ảnh chỉ số và bộ lọc thông thấp không thích hợp cho kiểu ảnh này.

- Ta cũng có thể chỉ ra một bộ lọc tự tạo thay cho các bộ lọc có sẵn.

Hàm imresize

Cú pháp của hàm này như sau:

B = imresize(A,m)

Page 36: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

25

B = imresize(A,m,method)

B = imresize(A,[mrows ncols],method)

B = imresize(...,method,n)

B = imresize(...,method,h)

Diễn giải

+ B=imresize(A,m): Trả lại một ảnh B lớn gấp m lần ảnh A (kích thước hình

học) sử dụng phương pháp nội suy mặc định (nearest - neighbor interpolcation). A

có thể là một ảnh chỉ số, ảnh đen trắng, RGB hoặc ảnh nhị phân. Nếu m nằm giữa 0

và 1, B sẽ nhỏ hơn A. Nếu m lớn hơn 1, B sẽ lớn hơn A.

+ B=imresize(A,m,method): Trả lại một ảnh lớn gấp m lần ảnh A sử dụng

phương pháp nội suy method. method là một chuỗi chỉ ra phương pháp nội suy nào

được sử dụng chẳng hạn: ‘nearest’,’bilinear’,’bicubic’.

+ B=imresize(A, [mrows ncols],method): Trả lại một ảnh với kích thước

được chỉ ra bởi vector [mrows ncols]. Nếu kích thước được chỉ ra không cùng tỉ lệ

với ảnh vào, ảnh sẽ bị biến dạng

Khi kích thước của ảnh ra nhỏ hơn kích thước của ảnh vào và phương pháp

nội suy được sử dụng là ‘bilinear’ hoặc ‘bicubic’, hàm imresize áp đặt một bộ lọc

thông thấp trước khi tuyến tính hoá để giảm hiện tượng răng cưa. Kích thước mặc

định là 11x11.

Ta có thể chỉ ra một thứ tự khác cho bộ lọc mặc định sử dụng cấu trúc:

B=imresize(…,method,n): n là một số nguyên chỉ ra kích thước của bộ lọc –

nxn. Nếu n=0, hàm imresize bỏ qua bước lọc. Ta cũng có thể chỉ ra bộ lọc riêng sử

dụng cú pháp:

B=imresize(…,method,h): Trong đó h là một bộ lọc FIR hai chiều ( có thể

được trả về bởi các hàm ftrans2, fwind1, fwind2 hoặc fsamp2 ).

d) Quay ảnh

- Để quay một ảnh, sử dụng hàm imrotate. Hàm này chấp nhận hai tham số

chính:

+ Ảnh cần quay

+ Góc quay

- Góc quay tính theo độ. Nếu ta chỉ ra một giá trị dương, hàm imrotate quay

ảnh theo chiều ngược chiều kim đồng hồ. Nếu chỉ ra giá trị âm, hàm quay ảnh theo

Page 37: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

26

chiều kim đồng hồ. Ví dụ sau quay một ảnh 35 độ theo chiều ngược chiều kim đồng

hồ:

J=imrotate(I,35 ) ;

- Một số tham số tuỳ chọn ta có thể truyền vào cho hàm bao gồm:

+ Phương pháp nội suy được sử dụng

+ Kích thước của ảnh ra

Chỉ định phương pháp nội suy được sử dụng

- Theo mặc định, hàm imrotate sử dụng phương pháp nội suy thứ nhất

(nearest-neighbor interpolation) để tính giá trị các pixel trong ảnh ra. Tuy nhiên, ta

có thể chỉ ra các phương pháp nội suy khác như: ‘bilinear ‘,’bicubic’

Ví dụ sau quay một ảnh 35 độ ngược chiều kim đồng hồ sử dụng nội suy song tuyến

tính:

I = imread('circuit.tif');

J = imrotate(I,35,'bilinear');

imshow(I)

figure, imshow(J)

Hình 1.7 Ảnh trước và sau khi imrotate

Chỉ định kích thước của ảnh ra

Theo mặc định, hàm imrotate tạo một ảnh ra đủ lớn để có thể bao gồm toàn

bộ các pixel của ảnh gốc. Các pixel nằm ngoài biên của ảnh gốc được gán giá trị 0

Page 38: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

27

như thể nền màu đen trong ảnh ra. Nếu ta chỉ ra chuỗi ‘crop’ như một tham số, hàm

imrotate sẽ xén ảnh ra tới kích thước như ảnh vào.

Hàm imrotate

Cú pháp của nó như sau:

B = imrotate(A,angle)

B = imrotate(A,angle,method)

B = imrotate(A,angle,method,bbox)

Diễn giải

+ B=imrotate(A,angle): Quay ảnh A một góc angle độ theo chiều ngược

chiều kim đồng hồ, sử dụng phương pháp nội suy các pixel gần nhất. Để quay theo

chiều kim đồng hồ hãy truyền giá trị âm cho tham số angle

+ B=imrotate(A,angle,method): Quay ảnh A một góc angle độ theo chiều

kim đồng hồ sử dụng phương pháp nội suy được chỉ ra trong method.

+ B=imrotate(A,angle,method,bbox): Quay ảnh A một góc angle độ. Tham

số bbox chỉ ra hộp biên của ảnh trả về. bbox là một chuỗi có thể nhận các giá trị

sau:

‘crop’: Ảnh ra B chỉ bao gồm phần trung tâm của ảnh được quay và có cùng

kích thước với ảnh A

‘loose’: ( Mặc định ): Ảnh ra B bao gồm toàn bộ ảnh được quay và lớn hơn

ảnh A. Hàm imrotate thiết lập giá trị 0 cho các pixel ngoài biên của ảnh gốc.

Ví dụ

- Ví dụ này đọc một ảnh quang phổ ánh sáng mặt trời được lưu trong định

dạng FITS và quay nó và căn nó theo chiều ngang.

I = fitsread('solarspectra.fts');

I = mat2gray(I);

J = imrotate(I,-1,'bilinear','crop');

imshow(I)

figure, imshow(J)

Page 39: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

28

Hình 1.8 Ảnh được quay theo chiều ngang

e) Xén ảnh (image cropping)

- Để trích một vùng chữ nhật của một ảnh, sử dụng hàm imcrop. Hàm

imcrop chấp nhận hai tham số chính:

+ Ảnh cần xén

+ Các góc của hình chữ nhật xác định vùng xén

- Nếu ta gọi hàm imcrop mà không chỉ ra hình chữ nhật, ta có thể xén ảnh

theo các tương tác. Trong trường hợp này, ta sử dụng trỏ chuột để chọn vùng chữ

nhật cần xén bằng cách nhấn và giữ phím chuột trái và di chuyển để chọn vùng xén.

Khi chọn xong thì nhả chuột. Trong ví dụ sau, ta hiển thị một ảnh và gọi hàm

imcrop. Hàm imcrop hiển thị ảnh trong một hình và đợi ta vẽ vùng chữ nhật cần

xén trên ảnh.

imshow circuit.tif

I=imcrop;

Imshow(I);

Hình 1.9 Ảnh trước và sau khi imcrop

Page 40: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

29

Hàm imcrop

- Cú pháp của nó như sau:

I2 = imcrop(I)

X2 = imcrop(X,map)

RGB2 = imcrop(RGB)

I2 = imcrop(I,rect)

X2 = imcrop(X,map,rect)

RGB2 = imcrop(RGB,rect)

[...] = imcrop(x,y,...)

[A,rect] = imcrop(...)

[x,y,A,rect] = imcrop(...)

Diễn giải

- Hàm imcrop xén một ảnh theo một hình chữ nhật được chỉ định.

I2=imcrop(I) ;

X2=imcrop(X,map);

RGB2=imcrop(RGB);

Hàm imcrop sẽ hiển thị ảnh I và đợi ta chỉ ra hình chữ nhật cần xén bằng

chuột

- Nếu ta bỏ qua các tham số, hàm imcrop thao tác trên ảnh của trục hiện tại.

- Để chỉ định một hình chữ nhật ta dùng trỏ chuột như đã nói ở trên

- Ta cũng có thể chỉ ra kích thước của hình chữ nhật mà không thao tác trực

tiếp như các cú pháp sau:

I2 = imcrop(I,rect)

X2 = imcrop(X,map,rect)

RGB2 = imcrop(RGB,rect)

Trong đó: rect là một vector bốn phần tử dạng [xmin ymin width height],

những giá trị này được chỉ ra trong toạ độ không gian. Để chỉ định các toạ độ không

theo toạ độ không gian cho ảnh vào, đặt trước các tham số khác với 2 vector hai

phần tử chỉ ra Xdata và Ydata. Chẳng hạn:

[…]=imcrop(x,y,…)

- Nếu ta cung cấp các tham số ra phụ, hàm imcrop sẽ trả lại thông tin về

vùng chữ nhật được chọn và hệ toạ độ của ảnh vào. Chẳng hạn:

Page 41: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

30

[A,rect] = imcrop(...)

[x,y,A,rect] = imcrop(...)

A là ảnh ra, x và y là Xdata và Ydata của ảnh vào

Chú ý:

- Do rect là một tập hợp các toạ độ không gian, các phần tử width và height

trong rect không luôn luôn tương ứng chính xác với kích thước của ảnh ra. Chẳng

hạn, giả sử rect là [20 20 40 30], sử dụng hệ toạ độ không gian theo mặc định. Góc

trên trái của vùng chữ nhật được chọn là tâm của pixel (20,20) và góc dưới phải của

vùng chữ nhật là tâm của pixel (50,60). Ảnh ra là một ảnh có kích thước 31x41 chứ

không phải 30x40. Điều này là do ảnh ra bao gồm tất cả các pixel trong ảnh vào

hoàn toàn hoặc một phần được bao bọc bởi vùng chữ nhật trên.

Ví dụ

I = imread('circuit.tif');

I2 = imcrop(I,[75 68 130 112]);

imview(I), imview(I2)

Hình 1.10 Ảnh trước và sau khi imcrop theo 1 tọa độ cho trước

f) Các biến đổi ảnh thông dụng

- Để thực hiện các biến đổi không gian ảnh 2 chiều, sử dụng hàm

imtransform. Hàm này chấp nhận hai tham số chính:

+ Ảnh cần biến đổi

Page 42: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

31

+ Một cấu trúc biến đổi được gọi là TFORM chỉ ra kiểu biến đổi ta muốn

thực hiện

Chỉ ra kiểu biến đổi

- Ta chỉ ra kiểu biến đổi trong cấu trúc TFORM. Có hai cách để tạo một cấu

trúc TFORM:

+ Sử dụng hàm maketform

+ Sử dụng hàm cp2tform

Sử dụng hàm maketform

- Khi sử dụng hàm này, ta chỉ ra kiểu biến đổi ta muốn thực hiện. Các kiểu

biến đổi mà maketform trợ giúp bao gồm:

+’ affine’: Biến đổi có thể bao gồm: translation ( dịch ), rotation ( quay ),

scaling, stretching và shearing. Các đường thẳng vẫn là đường thẳng, đường song

song vẫn song song nhưng hình chữ nhật có thể bị biến đổi

+’box’: Một trường hợp đặc biệt của affine khi mỗi chiều được dời và định tỉ

lệ độc lập

+ ‘composite ‘: Bao gồm tổ hợp của hai hay nhiều phép biến đổi

+ ‘custom ‘: Biến đổi do người dùng tự định nghĩa, nó cung cấp các hàm

thuận hoặc nghịch được gọi bởi hàm imtransform

+ ‘projective ‘: Biến đổi trong đó các đường thẳng vẫn giữ nguyên nhưng các

đường song song đồng quy lại thành một điểm.

Sử dụng cp2tform

- Ta sử dụng hàm này để tạo ra cấu trúc TFORM khi ta muốn thi hành một

biến đổi cần khít với các điểm dữ liệu như một biến đổi đa thức.

Chú ý: Khi sử dụng với hàm imtransform, cấu trúc TFORM phải định nghĩa một

biến đổi 2 chiều. Nếu một ảnh chứa nhiều hơn một chiều chẳng hạn như ảnh RGB,

cùng một biến đổi 2 chiều sẽ được áp đặt tới tất cả các mặt phẳng 2 chiều theo chiều

cao hơn. Để định nghĩa một biến đổi n chiều sử dụng hàm imformarrray

Thực hiện biến đổi

- Khi ta đã định nghĩa một cấu trúc TFORM, ta có thể thi hành một sự biến

đổi bằng cách gọi hàm imtransform. Chẳng hạn, đoạn mã sau sử dụng hàm này để

thi hành một biến đổi projective cho một ảnh bàn cờ:

I = checkerboard(20,1,1);

Page 43: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

32

figure; imshow(I)

T = maketform('projective',[1 1; 41 1; 41 41; 1 41],...

[5 5; 40 5; 35 30; -10 30]);

R = makeresampler('cubic','circular');

K = imtransform(I,T,R,'Size',[100 100],'XYScale',1);

figure, imshow(K)

Hình 1.11 Ảnh trước và sau khi imtransforms

- Các tuỳ chọn của hàm imtransform cho phép ta điều khiển nhiều khía

cạnh của việc biến đổi. Chẳng hạn, chú ý rằng ảnh bị biến đổi xuất hiện nhiều bản

copy của ảnh gốc. Điều này nhận được bởi tuỳ chon ‘size’.Xem thêm Help Online

Hàm imtransform

- Áp đặt một biến đổi không gian 2 chiều lên một ảnh

Cú pháp

B = imtransform(A,TFORM)

B = imtransform(A,TFORM,INTERP)

[B,XDATA,YDATA] = imtransform(...)

[B,XDATA,YDATA] = imtransform(...,param1,val1,param2,val2,...)

Diễn giải

+ B=imtransform(A,TFORM ): biến đổi ảnh A theo cấu trúc được định nghĩa

trong TFORM. Cấu trúc này được trả về từ hàm maketform hoặc cp2tform. Nếu

ndims(A)>2 như các ảnh RGB thì cùng một biến đổi không gian 2 chiều được áp

đặt tới tất cả các mặt phẳng theo chiều cao hơn.

Khi sử dụng cú pháp này, hàm imtransform tự động dịch gốc của ảnh ra để ảnh ra

có thể được hiển thị nhiều nhất có thể.

Page 44: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

33

+ B=imtransform(A,TFORM, INTERP): chỉ ra dạng của phép nội suy được

sử dụng. INTERP có thể là một trong các giá trị ‘nearest’, ‘bicubic’ hoặc ‘bilinear’.

Tương tự, INTERP có thể là một cấu trúc được trả về từ hàm

makeresampler. Tuỳ chọn này cho phép điều khiển nhiều hơn lên việc lấy mẫu lại

(resampling).

+ [B,XDATA,YDATA]= imtransform(…): trả về vị trí của ảnh ra B trong

không gian X-Y. XDATA và YDATA các vector hai thành phần. Những thành

phần của XDATA chỉ ra toạ độ x của cột đầu và cuối của B. Những thành phần của

YDATA chỉ ra toạ độ y của cột đầu và cuối của B. Bình thường, hàm imtransform

tính toán XDATA và YDATA tự động vì vậy B chứa toàn bộ ảnh đã biến đổi A.

Tuy nhiên, ta có thể đè chồng tính toán tự động này xem dưới đây:

+ [B,XDATA,YDATA] = imtransform(...,param1,val1,param2,val2,...): Chỉ

ra các tham số điều khiển nhiều khía cạnh khác nhau của biến đổi không gian. Bảng

sau liệt kê các tham số mà ta có thể chỉ ra.

Tham số Diễn giải

‘UData’

‘VData’

Cả hai tham số này là các vector hai phần tử thực. ‘Udata’ và

‘Vdata’ chỉ ra vị trí không gian của ảnh A trong không gian

vào 2 chiều U-V. Hai phần tử của ‘Udata’ cho toạ độ u (hoành

độ ) của cột đầu tiên và cuối cùng của A. Hai phần tử của

‘Vdata’ cho toạ độ v ( tung độ ) của hàng đầu tiên và cuối cùng

của A.

Giá trị mặc định cho ‘Udata’ và ‘Vdata’ tương ứng là [1

size(A,2) ] và [1 size(A,1) ]

‘Xdata’

‘Ydata’

Cả hai tham số này là các vector hai phần tử thực chỉ ra vị trí

không gian của ảnh ra B trong không gian ra 2 chiều X-Y. Hai

phần tử của ‘Xdata’ chỉ ra hoành độ x của cột đầu tiên và cuối

cùng của B. Hai phần tử của ‘Ydata’ chỉ ra tung độ của hàng

đầu tiên và cuối cùng của B.

Nếu ‘Xdata’ và ‘Ydata’ không được chỉ ra, hàm imtransform

ước lượng giá trị cho chúng để có thể chứa toàn bộ ảnh ra đã bị

biến đổi

Page 45: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

34

‘XYScale’

Là vector với một hoặc hai phần tử thực. Phần tử đầu tiên của

‘XYScale’ chỉ ra chiều rộng của mỗi pixel vào trong không

gian X-Y. Phần tử thứ hai (nếu tồn tại) chỉ ra chiều cao của

mỗi pixel ra. Nếu ‘XYScale’ chỉ có một phần tử, giá trị này sẽ

được dùng cho cả chiều rộng và chiều cao.

Nếu ‘XYScale’ không được chỉ định nhưng Size được chỉ ra

thì ‘XYScale’ được tính toán từ ‘Size’,’Xdata’ và ‘Ydata’.

‘Size’

Một vector hai phần tử nguyên không âm. ‘Size’ chỉ ra số hàng

và cột trong ảnh ra B. Với chiều cao hơn, kích cỡ của B được

lấy trực tiếp từ A. Nói cách khác, size(B,k) tương đương với

size(A,k) với k>2. Nếu ‘Size’ không được chỉ định, nó sẽ được

tính từ ‘Xdata’,’Ydata’ và ‘XYScale’

‘FillValues’

Một mảng chứa một hoặc nhiều giá trị tô (fill values). Fill

values được sử dụng cho các pixel trên ảnh ra khi vị trí được

biến đổi tương ứng trên ảnh vào hoàn toàn là viền ngoài của

ảnh ra. nếu A là 2 chiều, ‘Fillvalues’ phải vô hướng. Tuy

nhiên, nếu chiều của A lớn hơn 2, ‘FillValues’ có thể là một

mảng mà kích thước của nó thoả mãn ràng buộc sau:

size(fill_values,k) phải bằng size(A,k+2) hoặc 1.

Chẳng hạn, nếu A là một ảnh RGB unit8 có kích thước

200x200x3 thì các khả năng của ‘FillValues’ bao gồm:

+ 0: Tô với màu đen

+ [0;0;0]: Tô với màu đen

+ 255: Tô với màu trắng

+ [255;255;255]: Tô với màu trắng

+ [0;0;255]: Tô với màu xanh

+ [255;255;0]: Tô với màu vàng

Nếu A là 4 chiều 200x200x3x10 thì ‘FillValues’ có thể là 1 vô

hướng 1x10,3x1,3x10

Ví dụ

Áp một phép dịch chuyển ngang tới một ảnh cường độ ;

I = imread('cameraman.tif');

Page 46: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 1: Giới thiệu Matlab và khái quát về ảnh

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

35

tform = maketform('affine',[1 0 0;.5 1 0; 0 0 1]);

J = imtransform(I,tform);

imshow(I), figure, imshow(J)

Hình 1.12 Ảnh trước và sau khi imtransformsvới 1 cường độ ảnh

Page 47: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 2: Các phương pháp xác định khuôn mặt

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

36

Chương 2

CÁC PHƯƠNG PHÁP

XÁC ĐỊNH KHUÔN MẶT

2.1 Định nghĩa bài toán xác định khuôn mặt người

2.2 Ứng dụng của phương pháp xác định khuôn mặt

2.3 Phương pháp xác định khuôn mặt

2.4 Khó khăn và thử thách trong bài toán xác định khuôn mặt người

Page 48: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 2: Các phương pháp xác định khuôn mặt

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

37

Chương 2

CÁC PHƯƠNG PHÁP XÁC ĐỊNH

KHUÔN MẶT

Hơn một thập kỷ qua có rất nhiều công trình nghiên cứu về bài toán xác định

khuôn mặt người từ ảnh đen trắng, xám đến ảnh màu như ngày hôm nay. Các

nghiên cứu đi từ bài toán đơn giản, mỗi ảnh chỉ có một khuôn mặt người nhìn thẳng

vào thiết bị thu hình và đầu ở tư thế thẳng đứng trong ảnh đen trắng. Cho đến ngày

hôm nay bài toán mở rộng cho ảnh màu, có nhiều khuôn mặt trong cùng một ảnh,

có nhiều tư thế thay đổi trong ảnh. Không những vậy mà còn mở rộng cả phạm vi từ

môi trường xung quanh khá đơn giản (trong phòng thí nghiệm) cho đến môi trường

xung quanh rất phức tạp (như trong tự nhiên) nhằm đáp ứng nhu cầu thật sự và rất

nhiều của con người.

2.1 Định nghĩa bài toán xác định khuôn mặt người

Xác định khuôn mặt người (Face Detection) là một kỹ thuật máy tính để xác

định các vị trí và các kích thước của các khuôn mặt người trong các ảnh bất kỳ (ảnh

kỹ thuật số). Kỹ thuật này nhận biết các đặc trưng của khuôn mặt và bỏ qua những

thứ khác như: tòa nhà, cây cối, cơ thể, …

2.2 Ứng dụng của phương pháp xác định khuôn mặt

Có rất nhiều ứng dụng đã và đang được nghiên cứu, sau đây chúng em xin

đưa ra 1 vài ứng dụng trong thực tế:

• Hệ thống tương tác giữa người và máy: giúp những người bị tật hoặc khiếm

khuyết có thể trao đổi. Những người dùng ngôn ngữ tay có thể giao tiếp với

những người bình thường. Những người bị bại liệt thông qua một số ký hiệu

nháy mắt có thể biểu lộ những gì họ muốn, …. Đó là các bài toán điệu bộ của

bàn tay (hand gesture), điệu bộ khuôn mặt, …

Page 49: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 2: Các phương pháp xác định khuôn mặt

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

38

• Nhận dạng người A có phải là tội phạm truy nã hay không? Giúp cơ quan an

ninh quản lý tốt con người. Công việc nhận dạng có thể ở trong môi trường bình

thường cũng như trong bóng tối (sử dụng camera hồng ngoại).

• Hệ thống quan sát, theo dõi và bảo vệ. Các hệ thống camera sẽ xác định đâu

là con người và theo dõi con người đó xem họ có vi phạm gì không, ví dụ xâm

phạm khu vực không được vào, ….

• Lưu trữ (rút tiền ATM, để biết ai rút tiền vào thời điểm đó), hiện nay có tình

trạng những người bị người khác lấy mất thẻ ATM hay mất mã số PIN và những

người ăn cắp này đi rút tiền, hoặc những người chủ thẻ đi rút tiền nhưng lại báo

cho ngân hàng là mất thẻ và mất tiền. Các ngân hàng có nhu cầu khi có giao dịch

tiền sẽ kiểm tra hay lưu trữ khuôn mặt người rút tiền để sau đó đối chứng và xử

lý.

• Thẻ căn cước, chứng minh nhân dân (Face Identification).

• Điều khiển vào ra: văn phòng, công ty, trụ sở, máy tính, Palm,…. Kết hợp

thêm vân tay và mống mắt. Cho phép nhân viên được ra vào nơi cần thiết, hay

mỗi người sẽ đăng nhập máy tính cá nhân của mình mà không cần nhớ tên đăng

nhập cũng như mật khẩu mà chỉ cần xác định thông qua khuôn mặt.

• An ninh sân bay, xuất nhập cảnh (hiện nay cơ quan xuất nhập cảnh Mỹ đã

áp dụng). Dùng để xác thực người xuất nhập cảnh và kiểm tra có phải là nhân

vật khủng bố hay không.

• Trong tương lai sẽ phát triển các loại thẻ thông minh có tích hợp sẵn đặc

trưng của người dùng trên đó, khi bất cứ người dùng khác dùng để truy cập hay

xử lý tại các hệ thống sẽ được yêu cầu kiểm tra các đặc trưng khuôn mặt so với

thẻ để biết nay có phải là chủ thẻ hay không.

• Tìm kiếm và tổ chức dữ liệu liên quan đến con người thông qua khuôn mặt

người trên nhiều hệ cơ sở dữ liệu lưu trữ thật lớn, như internet, các hãng truyền

hình,… Ví dụ: tìm các đoạn video có tổng thống Bush phát biểu, tìm các phim

có diễn viên Lý Liên Kiệt đóng, tìm các trận đá banh có Ronaldo đá, …

Page 50: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 2: Các phương pháp xác định khuôn mặt

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

39

• Hiện nay có nhiều hướng tiếp cận để xác định một ảnh có phải là ảnh khỏa

thân hay không? Khuôn mặt người được xem như một yếu tố để xác định cho

một hướng tiếp cận mà được dùng gần đây.

• Ứng dụng trong video phone.

• Phân loại trong lưu trữ hình ảnh trong điện thoại di động. Thông qua bài toán

xác định khuôn mặt người và trích đặc trưng, rồi dựa vào đặc trưng này để sắp

xếp lưu trữ, giúp người sử dụng dễ dàng truy tìm khi cần thiết.

• Kiểm tra trạng thái người lái xe có ngủ gật, mất tập trung hay không, và hỗ

trợ thông báo khi cần thiết.

• Phân tích cảm xúc trên khuôn mặt.

• Trong lãnh vực thiết kế điều khiển robot.

• Hãng máy chụp hình Canon đã ứng dụng bài toán xác định khuôn mặt người

vào máy chụp hình thế hệ mới để cho kết quả hình ảnh đẹp hơn, nhất là khuôn

mặt người.

2.3 Phương pháp xác định khuôn mặt

Có nhiều nghiên cứu tìm phương pháp xác định khuôn mặt người, từ ảnh

xám đến ngày nay là ảnh màu. Dựa vào tính chất của các phương pháp xác định

khuôn mặt, các phương pháp này được chia làm bốn hướng tiếp cận chính:

• Hướng tiếp cận dựa trên tri thức: Mã hóa các hiểu biết của con người về các

loại khuôn mặt người thành các luật. Thông thường các luật mô tả quan hệ của

các đặc trưng.

• Hướng tiếp cận dựa trên đặc trưng không thay đổi: Mục tiêu các thuật toán đi

tìm các đặc trưng mô tả cấu trúc khuôn mặt người mà các đặc trưng này sẽ

không thay đổi khi tư thế khuôn mặt, vị trí đặt thiết bị thu hình hoặc điều kiện

ánh sáng thay đổi.

• Hướng tiếp cận dựa trên so khớp mẫu: Dùng các mẫu chuẩn của khuôn mặt

người (các mẫu này được chọn lựa và lưu trữ) để mô tả cho khuôn mặt người

hay các đặc trưng khuôn mặt (các mẫu này phải chọn làm sao cho tách biệt nhau

theo tiêu chuẩn mà các tác giả định ra để so sánh). Các mối tương quan giữa dữ

liệu ảnh đưa vào và các mẫu dùng để xác định khuôn mặt người.

Page 51: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 2: Các phương pháp xác định khuôn mặt

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

40

• Hướng tiếp cận dựa trên diện mạo: Trái ngược hẳn với so khớp mẫu, các mô

hình (hay các mẫu) được học từ một tập ảnh huấn luyện trước đó. Sau đó hệ

thống (mô hình) sẽ xác định khuôn mặt người. Hay một số tác giả còn gọi hướng

tiếp cận này là hướng tiếp cận theo phương pháp học.

2.3.1 Hướng tiếp cận dựa trên tri thức

Trong hướng tiếp cận này, các luật sẽ phụ thuộc rất lớn vào tri thức của

những tác giả nghiên cứu về bài toán xác định khuôn mặt người. Đây là hướng tiếp

cận dạng top-down. Dễ dàng xây dựng các luật cơ bản để mô tả các đặc trưng của

khuôn mặt và các quan hệ tương ứng. Ví dụ, một khuôn mặt thường có hai mắt đối

xứng nhau qua trục thẳng đứng ở giữa khuôn mặt và có một mũi, một miệng. Các

quan hệ của các đặc trưng có thể được mô tả như quan hệ về khoảng cách và vị trí.

Thông thường các tác giả sẽ trích đặc trưng của khuôn mặt trước tiên để có được

các ứng viên, sau đó các ứng viên này sẽ được xác định thông qua các luật để biết

ứng viên nào là khuôn mặt và ứng viên nào không phải khuôn mặt. Thường áp dụng

quá trình xác định để giảm số lượng xác định sai.

Một vấn đề khá phức tạp khi dùng hướng tiếp cận này là làm sao chuyển từ

tri thức con người sang các luật một các hiệu quả. Nếu các luật này quá chi tiết (chặt

chẽ) thì khi xác định có thể xác định thiếu các khuôn mặt có trong ảnh, vì những

khuôn mặt này không thể thỏa mãn tất cả các luật đưa ra. Nhưng các luật tổng quát

quá thì có thể chúng ta sẽ xác định lầm một vùng nào đó không phải là khuôn mặt

mà lại xác định là khuôn mặt. Và cũng khó khăn mở rộng yêu cầu từ bài toán để xác

định các khuôn mặt có nhiều tư thế khác nhau.

Có hai tác giả Yang và Huang đã dùng một phương thức theo hướng tiếp cận

này để xác định các khuôn mặt. Hệ thống của hai tác giả này bao gồm ba mức luật.

Ở mức cao nhất, dùng một khung cửa sổ quét trên ảnh và thông qua một tập luật để

tìm các ứng viên có thể là khuôn mặt. Ở mức kế tiếp, hai ông dùng một tập luật để

mô tả tổng quát hình dáng khuôn mặt. Còn ở mức cuối cùng lại dùng một tập luật

khác để xem xét ở mức chi tiết các đặc trưng khuôn mặt. Một hệ thống đa độ phân

giải có thứ tự được dùng để xác định (hình 2.1).

Page 52: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 2: Các phương pháp xác định khuôn mặt

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

41

(a) (b) (c) (d)

Hình 2.1 Độ phân giải của 1 ảnh; (a) Ảnh ban đầu có độ phân giải n=1;

(b),(c), và (d) Ảnh có độ phân giải n=4, 8, và 16.

Các luật ở mức cao nhất để tìm ứng viên như: “vùng trung tâm khuôn mặt

(phần tối hơn trong hình 2.2) có bốn phần với một mức độ đều cơ bản”, “phần xung

quanh bên trên của một khuôn mặt (phần sáng hơn trong hình 2.2) có một mức độ

đều cơ bản”, và “mức độ khác nhau giữa các giá trị xám trung bình của phần trung

tâm và phần bao bên trên là đáng kể”. Độ phân giải thấp nhất (mức mộ) của ảnh

dùng để tìm ứng viên khuôn mặt mà còn tìm ở các mức phân giải tốt hơn. Ở mức

hai, xem xét biểu đồ histogram của các ứng viên để loại bớt ứng viên nào không

phải là khuôn mặt, đồng thời dò ra cạnh bao xung quanh ứng viên. Ở mức cuối

cùng, những ứng viên nào còn lại sẽ được xem xét các đặc trưng của khuôn mặt về

mắt và miệng. Hai ông đã dùng một chiến lược “từ thô đến mịn” hay “làm rõ dần”

để giảm số lượng tính toán trong xử lý. Mặc dù tỷ lệ chính xác chưa cao, nhưng đây

là tiền đề cho nhiều nghiên cứu sau này.

Hình 2.2 Một loại trí thức của người nghiên cứu phân tích trên khuôn mặt.

2.3.2 Hướng tiếp cận dựa trên đặc trưng không thay đổi

Đây là hướng tiếp cận theo kiểu bottom-up. Các tác giả cố gắng tìm các đặc

trưng không thay đổi của khuôn mặt người để xác định khuôn mặt người. Dựa trên

nhận xét thực tế, con người dễ dàng nhận biết các khuôn mặt và các đối tượng trong

các tư thế khác nhau và điều kiện ánh sáng khác nhau, thì phải tồn tại các thuộc tính

hay đặc trưng không thay đổi. Có nhiều nghiên cứu đầu tiên xác định các đặc trưng

khuôn mặt rồi chỉ ra có khuôn mặt trong ảnh hay không. Các đặc trưng như: lông

Page 53: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 2: Các phương pháp xác định khuôn mặt

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

42

mày, mắt, mũi, miệng, và đường viền của tóc được trích bằng phương pháp xác

định cạnh. Trên cơ sở các đặc trưng này, xây dựng một mô hình thống kê để mô tả

quan hệ của các đặc trưng này và xác định sự tồn tại của khuôn mặt trong ảnh. Một

vấn đề của các thuật tóan theo hướng tiếp cân đặc trưng cần phải điều chỉnh cho phù

hợp điều kiện ánh sáng, nhiễu, và bị che khuất. Đôi khi bóng của khuôn mặt sẽ tạo

thêm cạnh mới, mà cạnh này lại rõ hơn cạnh thật sự của khuôn mặt, vì thế nếu dùng

cạnh để xác định sẽ gặp khó khăn.

2.3.2.1 Các đặc trưng khuôn mặt

Một số phương pháp xác định các đặc trưng của khuôn mặt có tỷ lệ chính

xác cao:

+ Phương pháp xác định khuôn mặt từ một ảnh có hình nền phức tạp.

Phương pháp này dựa trên cạnh (dùng phương pháp Candy và heuristics) để loại bỏ

các cạnh để còn lại duy nhất một đường bao xung quanh khuôn mặt. Một hình

ellipse dùng để bao khuôn mặt, tách biệt vùng đầu và hình nền. Tỷ lệ chính xác của

thuật toán là 80%.

+ Phương pháp xác định khuôn mặt trong ảnh xám. Dùng bộ lọc để làm nổi

các biên, các phép toán hình thái học (morphology) được dùng để làm nổi bật các

vùng có cường độ cao và hình dáng chắc chắn (như mắt). Thông qua histogram để

tìm các đỉnh nổi bật để xác định các ngưỡng chuyển ảnh xám thành hai ảnh nhị

phân. Các thành phần dính nhau đều xuất hiện trong hai ảnh nhị phân thì được

xem là vùng của ứng viên khuôn mặt rồi phân loại xem có phải là khuôn mặt không.

Phương pháp được kiểm tra trên các ảnh chỉ có đầu và vai của người. Tuy nhiên còn

vấn đề, làm sao sử dụng các phép toán morphology và làm sao xác định khuôn mặt

trên các vùng ứng viên.

+ Phương pháp xác định khuôn mặt dựa mô hình xác suất để xác định khuôn

mặt ở trong ảnh có hình nền phức tạp trên cơ sở một bộ xác định đặc trưng cục bộ

và so khớp đồ thị ngẫu nhiên. Ý chính là xem bài toán xác định khuôn mặt như là

bài toán tìm kiếm với mục tiêu là tìm thứ tự các đặc trưng chắc chắn của khuôn mặt

để tạo thành giống nhất một mẫu khuôn mặt. Dùng năm đặc trưng (hai mắt, hai lỗ

mũi, phần nối giữa mũi và miệng) để mô tả một khuôn mặt. Luôn tính quan hệ

khoảng cách với các đặc trưng cặp (như mắt trái, mắt phải), dùng phân bố Gauss để

Page 54: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 2: Các phương pháp xác định khuôn mặt

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

43

mô hình hóa. Một mẫu khuôn mặt được đưa ra thông qua trung bình tương ứng cho

một tập đa hướng, đa tỷ lệ của bộ lọc đạo hàm Gauss. Từ một ảnh, các đặc trưng

ứng viên được xác định bằng cách so khớp từng điểm ảnh khi lọc tương ứng với

vector mẫu (tương tự mối tương quan), chọn hai ứng viên đặc trưng đứng đầu để

tìm kiếm cho các đặc trưng khác của khuôn mặt. Giống như xây dựng một đồ thị

quan hệ mỗi node của đồ thị tương ứng như các đặc trưng của một khuôn mặt, đưa

xác suất vào để xác định. Tỷ lệ xác định chính xác là 86%.

+ Phương pháp xác định khuôn mặt dùng lý thuyết xác suất thống kê về hình

dáng. Dùng hàm mật độ xác suất (Probility Density Function- PDF) qua N điểm đặc

trưng, tương ứng (xi, yi) là đặc trưng thứ i với giả sử dựa vào phân bố Gauss có 2N-

chiều. Các tác giả áp dụng phương thức cực đại khả năng (Maximum Likelihood-

ML) để xác định vị trí khuôn mặt. Một thuận lợi của phương pháp này là các khuôn

mặt bị che khuất vẫn có thể xác định được. Nhưng phương pháp không xác định

được đa khuôn mặt trong ảnh.

+ Phương pháp xác định khuôn mặt dựa vào đặc trưng, dùng số lượng lớn

các dấu hiệu từ ảnh và cả dấu hiệu về ngữ cảnh. Đầu tiên dùng bộ lọc đạo hàm

Gauss thứ hai, xác định các điểm mấu chốt ở tại cực đại địa phương trong bộ lọc,

rồi chỉ ra nơi có thể là đặc trưng. Giai đoạn hai, kiểm tra các cạnh xung quanh điểm

mấu chốt và nhóm chúng lại thành các vùng. Tiêu chuẩn để nhóm các cạnh là gần

và tương tự hướng và cường độ. Đo lường các đặc tính vùng như: chiều dài cạnh,

cường độ cạnh, và biến thiên cường độ được lưu trong một vector đặc trưng. Từ dữ

liệu đặc trưng khuôn mặt đã được huấn luyện, sẽ tính được giá trị trung bình và ma

trận hiệp phương sai của mỗi đặc trưng khuôn mặt. Một vùng là ứng viên khuôn

mặt khi khoảng cách Mahalanobis giữa các vector đặc trưng đều dưới một ngưỡng.

Rồi thông qua mạng Bayes để xác định ứng viên có phải là khuôn mặt không. Tỷ lệ

chính xác là 85%, tuy nhiên mức độ sai là 28%, và chỉ hiệu quả với hình khuôn mặt

có kích thước 60x60 điểm ảnh. Phương pháp này được dùng thêm với mô hình

đường viền linh hoạt.

+ Phương pháp xác định khuôn mặt dựa trên tích đặc trưng võng mạc và cử

động theo dao động nhỏ của mắt. Thuật toán hoạt động trên bản đồ hay vùng của

các mấu chốt, mô hình hóa lưới võng mạc. Đầu tiên tính toán ước lượng thô vùng

Page 55: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 2: Các phương pháp xác định khuôn mặt

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

44

khuôn mặt trên cơ sở bộ lọc. Giai đoạn thứ hai tinh chế trên độ phân giải mịn hơn.

Tỷ lệ sai là 4.69%.

+ Phương pháp xác định khuôn mặt dựa trên cơ sở hình thái học

(morphology) để trích các đoạn giống mắt (eye-analogue) để xác định khuôn mặt

người. Phương pháp này cho rằng mắt và lông mày là đặc trưng nổi bật nhất và ổn

định nhất của khuôn mặt con người, và nó rất hữu dụng để xác định khuôn mặt

người. Các đoạn giống mắt như là các cạnh trên đường viền của mắt. Đầu tiên, các

phép toán morphology như đóng, cắt bỏ sai khác, và phân ngưỡng để trích các

điểm ảnh có giá trị cường độ thay đổi đáng kể. Các điểm ảnh này sẽ trở thành các

điểm ảnh giống mắt. Sau đó một tiến trình gán nhãn để sinh các đoạn giống mắt.

Các đoạn này được dùng để chỉ dẫn tìm kiếm các vùng tiềm năng có thể là khuôn

mặt qua kết hợp các đặc tính hình học của mắt, mũi, lông mày, và miệng. Các vùng

này sẽ được một mạng neural xem xét có phải là khuôn mặt không. Tỷ lệ chính xác

là 94%.

+ Phương pháp xác định khuôn mặt dựa trên hình dáng và áp dụng cho các

khuôn mặt chụp thẳng. Có hai giai đoạn để xác định khuôn mặt người: tập trung và

phân loại chi tiết. Làm có thứ tự các mảnh cạnh, các mảnh này được trích từ bộ xác

định cạnh đơn giản thông qua sự khác biệt cường độ là quá trình tập trung. Khi có

các ứng viên từ quá trình trên, dùng thuật toán CART để xây dựng một cây phân

loại từ các ảnh để huấn luyện, để xem xét ứng viên nào là khuôn mặt người.

+ Phương pháp xác định khuôn mặt dùng cấu trúc hình học của khuôn mặt

người để tìm ứng viên khuôn mặt trong ảnh xám và hình nền không phức tạp. Mỗi

ảnh chỉ có một khuôn mặt người, nhưng tư thế điều kiện ánh sáng, không cố định.

Tỷ lệ chính xác khỏang 94.25% và thời gian khá nhanh.

+ Phương pháp xác định khuôn mặt dùng sắc màu của da người để tìm ứng

viên, bằng cách dùng mô hình màu da người trên từng phần nhỏ rồi xử lý phân

đoạn trên đó. Sau khi có ứng viên khuôn mặt, dùng một số đặc tính về hình dáng để

xác định khuôn mặt người. Tỷ lệ chính xác là 85%.

2.3.2.2 Kết cấu

Khuôn mặt con người có những kết cấu riêng biệt mà có thể dùng để phân

loại so với các đối tượng khác. Có một số nhà nghiên cứu cho rằng hình dạng của

Page 56: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 2: Các phương pháp xác định khuôn mặt

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

45

khuôn mặt dùng làm kết cấu phân loại, gọi là kết cấu giống khuôn mặt (face-like

texture). Tính kết cấu qua các đặc trưng thống kê thứ tự thứ hai (SGLD) trên vùng

có kích thước 16x16 điểm ảnh. Có ba loại đặc trưng được xem xét: màu da, tóc, và

những thứ khác.

2.3.2.3 Sắc màu của da

Thông thường các ảnh màu không xác định trực tiếp trên toàn bộ dữ liệu ảnh

mà các tác giả dùng tính chất sắc màu của da người (khuôn mặt người) để chọn ra

được các ứng viên có thể là khuôn mặt người (lúc này dữ liệu đã thu hẹp đáng kể)

để xác định khuôn mặt người.

2.3.2.4 Đa đặc trưng

Gần đây có nhiều nghiên cứu sử dụng các đặc trưng toàn cục như: màu da

người, kích thước, và hình dáng để tìm các ứng viên khuôn mặt, rồi sau đó sẽ xác

định ứng viên nào là khuôn mặt thông qua dùng các đặc trưng cục bộ (chi tiết) như:

mắt, lông mày, mũi, miệng, và tóc.

2.3.3 Hướng tiếp cận dựa trên so khớp mẫu

Trong so khớp mẫu, các mẫu chuẩn của khuôn mặt (thường là khuôn mặt

được chụp thẳng) sẽ được xác định trước hoặc xác định các tham số thông qua một

hàm. Từ một ảnh đưa vào, tính các giá trị tương quan so với các mẫu chuẩn về

đường viền khuôn mặt, mắt, mũi và miệng. Thông qua các giá trị tương quan này

mà các tác giả quyết định có hay không có tồn tại khuôn mặt trong ảnh. Hướng tiếp

cận này có lợi thế là rất dễ cài đặt, nhưng không hiệu quả khi tỷ lệ, tư thế, và hình

dáng thay đổi (đã được chứng minh). Nhiều độ phân giải, đa tỷ lệ, các mẫu con, và

các mẫu biến dạng được xem xét thành bát biến về tỷ lệ và hình dáng.

Hình chiếu được dùng như các mẫu để xác định khuôn mặt người. Dùng

PCA (phân tích thành phần chính - Principal Component Analysis - PCA) để có một

tập hình chiếu cơ bản từ các mẫu khuôn mặt, hình chiếu được mô tả như một mảng

các bit. Dùng đặc trưng hình chiếu riêng kết hợp biến đổi Hough để xác định khuôn

mặt người. Sau đó một phương pháp xác định dựa trên đa loại mẫu để xác định các

thành phần của khuôn mặt được trình bày. Phương pháp này định nghĩa một số giả

thuyết để mô tả các khả năng của các đặc trưng khuôn mặt. Với một khuôn mặt sẽ

có một tập giả thuyết, lý thuyết DepsterShafer. Dùng một nhân tố tin cậy để kiểm

Page 57: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 2: Các phương pháp xác định khuôn mặt

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

46

tra sự tồn tại hay không của các đặc trưng của khuôn mặt, và kết hợp nhân tố tin cậy

này với một độ đo để xem xét có hay không có khuôn mặt trong ảnh.

Hình 2.3 Một mẫu khuôn mặt, có 16 vùng và 23 quan hệ (các mũi tên).

2.3.4 Hướng tiếp cận dựa trên diện mạo

Trái ngược với các phương pháp so khớp mẫu với các mẫu đã được định

nghĩa trước bởi những chuyên gia, các mẫu trong hướng tiếp cận này được học từ

các ảnh mẫu. Một cách tổng quát, các phương pháp theo hướng tiếp cận này áp

dụng các kỹ thuật theo hướng xác suất thống kê và máy học để tìm những đặc tính

liên quan của khuôn mặt và không phải là khuôn mặt. Các đặc tính đã được học ở

trong hình thái các mô hình phân bố hay các hàm biệt số nên dùng có thể dùng các

đặc tính này để xác định khuôn mặt người. Đồng thời, bài toán giảm số chiều

thường được quan tâm để tăng hiệu quả tính toán cũng như hiệu quả xác định.

Các tiếp cận khác trong hướng tiếp cận dựa trên diện mạo là tìm một hàm

biệt số (như: mặt phẳng quyết định, siêu phẳng để tách dữ liệu, hàm ngưỡng) để

phân biệt hai lớp dữ liệu: khuôn mặt và không phải khuôn mặt. Bình thường, các

mẫu ảnh được chiếu vào không gian có số chiều thấp hơn, rồi sau đó dùng một hàm

biệt số (dựa trên các độ đo khoảng cách) để phân loại, hoặc xây dựng mặt quyết

định phi tuyến bằng mạng neural đa tầng. Hoặc dùng SVM (Support Vector

Machine) và các phương thức kernel, chiếu hoàn toàn các mẫu vào không gian có

số chiều cao hơn để dữ liệu bị rời rạc hoàn toàn và ta có thể dùng một mặt phẳng

quyết định phân loại các mẫu khuôn mặt và không phải khuôn mặt.

Page 58: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 2: Các phương pháp xác định khuôn mặt

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

47

2.4 Khó khăn và thử thách trong bài toán xác định khuôn mặt người

Việc xác định khuôn mặt người có những khó khăn nhất định như sau:

• Hướng (pose) của khuôn mặt đối với máy ảnh, như: nhìn thẳng, nhìn nghiêng

hay nhìn từ trên xuống. Cùng trong một ảnh có thể có nhiều khuôn mặt ở những

tư thế khác nhau.

• Sự có mặt của các chi tiết không phải là đặc trưng riêng của khuôn mặt

người, như: râu quai nón, mắt kính, ….

• Các nét mặt (facial expression) khác nhau trên khuôn mặt, như: vui, buồn,

ngạc nhiên, ….

• Mặt người bị che khuất bởi các đối tượng khác có trong ảnh.

• Điều kiện ảnh, đặc biệt là về độ sáng và chất lượng ảnh, chất lượng thiết bị

thu hình.

• Trục toạ độ của máy ảnh so với ảnh.

• Kích thước khác nhau của các khuôn mặt người, và đặc biệt là trong cùng

một ảnh.

• Màu sắc của môi trường xung quanh, hay màu sắc quần áo của người được

chụp lấy ảnh.

• Xuất hiện thành phần khuôn mặt hay không.

• Nhiều khuôn mặt có vùng da dính lẫn nhau.

Các khó khăn trên chứng tỏ rằng bất cứ phương pháp giải quyết (thuật toán)

bài toán xác định khuôn mặt người sẽ không thể tránh khỏi một số khiếm khuyết

nhất định. Để đánh giá và so sánh các phương pháp xác định mặt người, người ta

thường dựa trên các tiêu chí sau:

• Tỷ lệ xác định chính xác là tỷ lệ số lượng các khuôn mặt người được xác

định đúng từ hệ thống khi sử dụng một phương pháp để xây dựng so với số

lượng khuôn mặt người thật sự có trong các ảnh (detection rate).

• Số lượng xác định nhầm là số lượng vùng trong ảnh không phải là khuôn

mặt người mà hệ thống xác định nhầm là khuôn mặt người (false positives).

• Thời gian thực hiện là thời gian để máy tính xác định khuôn mặt người trong

ảnh (running time).

Page 59: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

48

Chương 3

PHÂN TÍCH THÀNH PHẦN CHÍNH PCA

(PRINCIPAL COMPONENT ANALYSIS)

3.1 Sơ lược về phân tích thành phần chính PCA

3.2 Thuật toán PCA và ứng dụng trong nhận dạng khuôn mặt người

3.3 Ứng dụng Eigenfaces trong việc nhận dạng mặt người

3.4 Nhận xét

Page 60: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

49

Chương 3

PHÂN TÍCH THÀNH PHẦN CHÍNH PCA

3.1 Sơ lược về phân tích thành phần chính PCA

Phân tích thành phần chính (Principal Component Analysis - PCA) được trình

bày theo nhiều quan điểm khác nhau. Với các nhà thống kê cổ điển thì PCA là tìm các

trục chính của ellipsoid nhiều chiều bao hàm đám mây số liệu phân phối chuẩn nhiều

chiều, các trục đó được ước lượng từ một mẫu n cá thể, trên mỗi cá thể người ta đo p

chỉ tiêu. Người đầu tiên đưa ra kỹ thuật này là H.Hotelling (1933), sau đó là

T.W.Anderson (1958) và A.M.Kshirsagar (1972).

Với các nhà nhân tố học cổ điển thì kỹ thật này là phương pháp phân tích nhân

tố trong trường hợp đặc biệt, khi các phương sai này bằng không hoặc xấp xỉ bằng

không. Phương pháp này thường được sử dụng trong phân tích tâm lý, do Horst (1965)

và Harman (1966) đề xuất.

Sau cùng, theo quan điểm phổ biến hơn cả của các nhà phân tích số liệu thì PCA

là một kỹ thuật biểu diễn các số liệu một cách tối ưu theo một tiêu chuẩn đại số và hình

học đặc biệt. khi sử dụng kỹ thuật này người ta không đòi hỏi một giả thuyết thống kê

hoặc một mô hình đặc biệt nào. Quan điểm này trở nên phổ biến từ khi có máy tính

điện tử, và là quan điểm mới nhất. Những tư tưởng của phương pháp này do K.Pearson

(1901) đề xuất. Trong công trình của C.R Rao (1964) nội dung lý thuyết của phương

pháp PCA được trình bày khá đơn giản và rõ ràng.

Lĩnh vực ứng dụng của phương pháp PCA rất rộng trong công nghiệp, nông

nghiệp, kinh tế, khoa học cơ bản… với bảng số liệu mà các cột là các biến và các dòng

là các cá thể, trên đó đo giá trị của biến.

Page 61: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

50

3.2 Thuật toán PCA và ứng dụng trong nhận dạng khuôn mặt người

3.2.1 Thuật toán

Khuôn mặt con người có rất nhiều nét để nhận biết, nếu như ta gặp lại một

người bạn sau một thời gian dài, ta có thể nhận ra ngay người đó dù những chi tiết cụ

thể trên mặt có thể thay đổi như da, mái tóc. Ta nhận ra không phải vì nhớ đôi mắt, hay

mũi hay môi hay tóc, lông mày người đó mà ta nhận ra vì nhớ diện mạo của người đó.

Tức là trên khuôn mặt tồn tại một nét tổng thể nào đó để có thể nhận diện, thuật toán

của ta bắt đầu từ ý tưởng này .

Phân tích thành phần chính (Principal Component Analysis ) gọi tắt là PCA là

thuật toán nhận dạng ảnh dựa trên những nét tổng thể của khuôn mặt, ta sẽ áp dụng

thuật toán này để thực hiện hai công việc sau :

• Thứ nhất là xác định vị trí những khuôn mặt người trong một bức ảnh.

• Thứ hai là tìm một khuôn mặt giống với khuôn mặt cho trước.

Ban đầu ta có một tập ảnh khuôn mặt gọi là tập ảnh huấn luyện (training set).

Giả sử mỗi ảnh có kích thước M*N, ta coi mỗi bức ảnh này là một vector trong không

gian M*N chiều. Bây giờ mỗi khuôn mặt là một vector, ta thấy những vector này không

phân bố ngẫu nhiên trong không gian ảnh mà phân bố theo một quy luật tương đối nào

đó, ta có thể nói những vector này nằm trong một không gian con gọi là không gian

khuôn mặt. Từ những vector trong tập huấn luyện, ta sẽ tìm một cơ sở trực chuẩn cho

không gian khuôn mặt. Những vector thuộc cơ sở này có thể coi là những vector mang

những nét tổng thể đặc trưng về khuôn mặt.

3.2.2 Phân tích thành phần chính PCA

Giả sử tập huấn luyện có P ảnh, khi đó ta sẽ có P vector: T1, T2, …, TP.

Tính vector ảnh trung bình :

1

1 p

ii

m Tp =

= ∑

Sự khác biệt giữa những khuôn mặt với ảnh trung bình là những vector:

i iA T m= − , i=1…P

Page 62: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

51

Ý tưởng của việc phân tích thành phần chính là tìm một tập những vector trực

chuẩn uk sao cho những vector này mô tả tốt nhất sự phân bố những vector khuôn mặt

trong không gian. Những vector uk được chọn sao cho:

1 ,/

0 ,i j

ui uji j=⎧

− = ⎨ ≠⎩

2

1/

p

k k ii

u Aλ=

− =∑ lớn nhất .

Những vector uk và giá trị vô hướng kλ chính là những vector riêng và trị riêng

tương ứng của ma trận AAT.

/u v là tích vô hướng giữa hai vector u, v.

1 2... pA A A A⎡ ⎤= ⎣ ⎦

Ta thấy ma trận A có kích thước M*N × P, còn ma trận AAT có kích thước

M*N×M*N, do kích thước ma trận này quá lớn nên ta không thể tìm được những

vector riêng và những trị riêng trực tiếp được, thay vào đó ta sẽ tìm những vector riêng

của ma trận ATA có kích thước P×P .

Nếu v là một vector riêng của ATA và λ là trị riêng tương ứng, khi đó ta có:

ATA v = λv ATA Av = λAv

tức là Av là một trị riêng của ma trận AAT.

Thông thường ta chỉ lấy một số Q vector riêng ứng với Q trị riêng có giá trị lớn

nhất.

Sau khi có các vector riêng của ma trận AAT, ta sẽ chuẩn hóa chúng để thu được

một cơ sở trực chuẩn của không gian khuôn mặt .

Đặt L= ATA , tìm V là tập hợp các vector riêng của L, D là tập hợp các trị riêng

tương ứng .

V bao gồm Q vector riêng ứng với những trị riêng lớn hơn một giá trị nào đó

hoặc ứng với Q trị riêng lớn nhất trong D.

Page 63: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

52

E = AV là tập các vector riêng của AAT. Do đây là những vector riêng, mà nó lại

có dạng khuôn mặt nên còn đuợc gọi là Eigenfaces. E là ma trận M*N×Q, mỗi cột là

một vector riêng.

Chuẩn hóa các vector cột trong E (chia mỗi vector cho độ dài của vector đó).

Bây giờ, ta có thể coi E là một cơ sở trực chuẩn của không gian khuôn mặt.

Với H là bức ảnh có cùng kích thước với những bức ảnh trong tập huấn luyện.

Ta sẽ xét nó có phải là bức ảnh khuôn mặt hay không, cũng như tìm bức ảnh giống với

nó nhất trong tập huấn luyện .

H được xem là một vector trong không gian M*N chiều.

Đặt K= H - m với m là vector ảnh trung bình.

Cho V là một không gian có tích vô hướng hữu hạn chiều và W là một không

gian con của V. Giả sử W có một cơ sở trực chuần là u1, …, uQ. Khi đó hình chiếu

trực giao của vector u bất kỳ lên W được xác định như sau:

01

/Q

w i ii

pr u u u u u=

= =∑

Độ dài 0u u− được gọi là khoảng cách từ u đến W .

Tập hợp /i ic u u= , i=1,…, Q được gọi là tọa độ của u0 trong không gian W.

Tìm C=ETK là tọa độ của hình chiếu Kf của K lên không gian khuôn mặt. C là

vector cột Q×1

1

Q

f i ii

K c e=

= ∑ với ci = C( i , 1) ; ei= E( : , i) .

Với Ai là một cột trong ma trận A (tương ứng với bức ảnh Ti trong tập huấn luyện). Ta

tính Ti iC E A= là tọa độ của hình chiếu Ai f của Ai lên không gian khuôn mặt.

Ta tính hai đại lượng sau:

fS K K= − xem như khoảng cách từ bức ảnh H đến không gian mặt.

i iS C C= − xem như khoảng cách từ H đến bức ảnh Ti trong tập huấn luyện.

Xét α và β là hai ngưỡng nào đó.

s < α thì H là bức ảnh khuôn mặt (do H đủ gần với không gian mặt).

Page 64: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

53

si < β thì Ti là bức ảnh của cùng một người với H ( H đủ gần với Ti).

Vậy là ta đã có thể tìm bức ảnh trong tập huấn luyện giống với bức ảnh H hay xác

định đó có phải là bức ảnh khuôn mặt hay không. Tuy nhiên ảnh H phải có cùng kích

thước với những bức ảnh trong tập huấn luyện. Bây giờ trong một bức ảnh lớn H có

nhiều khuôn mặt, ta sẽ xác định vị trí những khuôn mặt trong bức ảnh.

Tại mỗi vị trí (x,y) trong H, đặt H(x,y) là một vùng trong ảnh H có kích thước M×N

tại (x,y), ta xem ảnh con H(x,y) là một vector M*N chiều.

K(x,y) = H(x,y) – m

Tìm Kf(x,y) là hình chiếu của K(x,y) lên không gian khuôn mặt .

Tính ( , ) ( , ) ( , )fs x y K x y K x y= −

Tập hợp các giá trị s(x,y) tạo thành một bản đồ khuôn mặt (face map) của H, từ đó ta có

thể xác định vị trí những khuôn mặt trong ảnh.

3.2.3 Hình ảnh minh họa

Trong ví dụ này ta có một tập huấn luyện gồm những bức ảnh khuôn mặt kích thước

180x200 pixel, dưới đây là một số hình ảnh của những eigenfaces thu được (lưu ý là

đây chỉ là các vector trực giao, những eigenfaces thực sự chính là những vector này

được chuẩn hóa).

Hình 3.1 Eigenfaces

Bây giờ ta chiếu hai bức ảnh lên không gian khuôn mặt này :

Page 65: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

54

Hình 3.2 Bức ảnh kiểm tra và hình chiếu của nó

Như ta thấy nếu bức ảnh là khuôn mặt người thì hình chiếu sẽ khá giống với ảnh

gốc, còn khi bức ảnh không phải là khuôn mặt thì hình chiếu sẽ khác ảnh gốc rất nhiều,

do đó khoảng cách từ bức ảnh mặt người tới không gian mặt sẽ nhỏ hơn rất nhiều so

với khoảng cách từ bức ảnh không phải mặt người tới không gian mặt.

Dưới đây là một ví dụ khác, ta có một tập huấn luyện gồm những bức ảnh kích

thước 18x27 pixel, ta cũng tìm các Eigenface và sau đó tìm face map của một bức ảnh

kiểm tra. Trong ví dụ này thì ảnh con H(x,y) vùng hình chữ nhật có tâm tại (x,y) trên

bức ảnh và có kích thước 18x27 pixel.

Page 66: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

55

Hình 3.3 Ảnh ban đầu

Hình 3.4 Face map của bức ảnh ban đầu.

Ta thấy vị trí của mỗi khuôn mặt chính là những vùng cực tiểu địa phương trên

bức ảnh (là những đốm đen trong những vùng trắng hình chữ nhật).

Bây giờ nếu ta có một cơ sở dữ liệu những ảnh không phải khuôn mặt (ta

thường tập trung vào những hình ảnh xung quanh khuôn mặt như cổ áo, một phần của

khuôn mặt …). Tìm face map của bức ảnh ban đầu với không gian không phải khuôn

mặt này, ta thu được kết quả sau:

Page 67: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

56

Hình 3.5 Face map ảnh ban đầu với không gian không phải là khuôn mặt

Hình trên cũng khá giống với face map ứng với không gian khuôn mặt nhưng tại

mỗi vùng sáng hình chữ nhật thì không hề có tâm ở giữa.

Thực ra từ face map ứng với không gian khuôn mặt, nếu ta có một thuật toán tốt

để tìm những vị trí cực tiểu địa phương thì đã có thể xác định vị trí các khuôn mặt.

Face map ứng với không gian không phải khuôn mặt chỉ là một cách đơn giản để giúp

ta tìm chính xác hơn thôi.

Tất cả những điều thu được ở trên chỉ là kết quả hoàn toàn dựa trên lý thuyết,

trong thực tế những thuật toán nhận dạng mặt người đã phát triển lên rất nhiều từ ý

tưởng của PCA mới có được độ chính xác yêu cầu.

3.3 Ứng dụng Eigenfaces trong việc nhận dạng mặt người

Hầu hết việc làm trước đây trong hệ thống tự nhận dạng gương mặt đều cho

rằng việc nhận ra các góc cạnh của gương mặt trong các trạng thái khác nhau là rất

quan trọng trong việc nhận dạng, thừa nhận rằng việc xác nhận trước các khoảng cách

là rất quan trọng và cần thiết. Điều đó đề xuất chúng tôi đưa ra phương pháp lý thuyết

thông tin cho việc mã hóa và giải mã những ảnh mặt người, đưa ra bản chất nội dung

thông tin của những ảnh mặt người, nhấn mạnh những đặc trưng “cục bộ” và “toàn

cục”. Những đặc trưng có hoặc không có liên quan trực tiếp đến cách quan sát bằng

trực giác của chúng ta về các đặc trưng của gương mặt như cặp mắt, mũi, môi hoặc mái

tóc.

Page 68: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

57

Trong ngôn ngữ của lý thuyết thông tin, chúng ta muốn trích xuất các thông tin

quan trọng của ảnh mặt người, mã hóa một cách hiệu quả trong phạm vi có thể, và so

sánh gương mặt mã hóa với kho dữ liệu của các mẫu được mã hóa một cách tương tự.

Một cách dễ dàng để trích xuất thông tin chứa đựng trong bức ảnh mặt người là bằng

cách nào đó chỉ ra sự khác biệt trong tập hợp ảnh mặt người, độc lập trong phân tích

các nét mặt, và sử dụng những thông tin này mã hóa và so sánh các ảnh gương mặt cá

thể.

Về mặt toán học, chúng ta tìm ra các thành phần chính trong sự phân bố của mặt

người, hoặc các vectơ riêng (eigenvectors) từ ma trận tương quan của dãy ảnh mặt

người. Những vectơ riêng này có thể được xem như là dãy những điểm đặc trưng,

chúng liên kết nhau để mô tả sự khác nhau giữa các ảnh mặt người. Mỗi vị trí của ảnh

góp phần tạo ra mỗi vectơ riêng, vì vậy ta có thể trình bày vectơ riêng bằng một loại

mặt ma “ghostly face” mà ta còn gọi là eigenface. Một số mặt loại này được trình bày

trong hình 3.7.

Hình 3.6 a) Những gương mặt dùng để huấn luyện b) Ảnh trung bình ψ

Page 69: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

58

Hình 3.7 Bảy Eigenfaces được tính toán từ dãy huấn luyện của hình 4.6, phông nền đã

được loại bỏ

Mỗi ảnh mặt người trong dãy huấn luyện có thể được tái hiện chính xác thông

qua eigenfaces. Số lượng eigenfaces tương đương với số ảnh mặt người được đưa vào

huấn luyện. Tuy nhiên các gương mặt có thể xấp xỉ bằng cách chỉ sử dụng “best

eigenfaces”, được tạo ra từ các giá trị riêng lớn nhất và từ đó có thể tính toán độ sai

biệt lớn nhất với chuỗi ảnh mặt người. Lý do chính cho việc sử dụng ít eigenfaces là

nhờ sự hiệu qủa trong quá trình tính toán. M’ eigenfaces sẽ mở rộng ra không gian con

M’ chiều - “không gian mặt người”- của tất cả ảnh có thể. Đường hình sin biểu thị các

pha và tần số khác nhau là hàm cơ bản của phân bố Fourier (là hàm riêng của hệ thống

tuyến tính).

Ý tưởng sử dụng eigenfaces được thúc đẩy bởi sự phát triển kỹ thuật của

Sirvokick và Kirby - những bức hình miêu tả hiệu qủa các gương mặt sử dụng phương

pháp phân tích các thành phần chính (principal component analysis - PCA). Họ chứng

minh rằng các bộ sưu tập ảnh mặt người có thể được tạo lại một cách gần đúng bằng

việc lưu trữ bộ trọng số cho mỗi gương mặt và một chuỗi nhỏ bức hình chuẩn (có thể

nhỏ hơn rất nhều so với bộ sưu tập ban đầu).

Page 70: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

59

Quá trình nhận dạng có thể tóm tắt như sau:

• Chuẩn bị: Thu thập dãy huấn luyện của ảnh mặt người và tính toán các

eigenfaces, xác định không gian mặt người.

• Khi nhận được bức ảnh mới, tính toán dãy trọng số dựa vào ảnh đầu vào và M

eigenfaces bằng cách chiếu ảnh đầu vào với từng eigenface.

• Có thể xác định ảnh đầu vào có phải là gương mặt hay không dưa vào việc kiểm

tra ảnh đó có gần không gian mặt người hay không.

• Nếu đã là gương mặt thi phân loại các trọng số xem đó có phải người đã biết

trước hay chưa.

• (không bắt buộc) Nếu gương mặt chưa biết xuất hiện vài lần thì tính toán các

trọng số thành phần và sát nhập vào những gương mặt đã biết (học nhận dạng).

3.3.1 Tính toán Eigenfaces

Lấy bức ảnh mặt người I(x,y) là ma trận 2 chiều N×N (các giá trị trong ma trận

thể hiện mức xám tại từng điểm ảnh), hoặc là vectơ N2. Bức ảnh chuẩn có kích thước

256x256 mô tả vectơ có 65536 chiều, hoặc có thể xem mỗi bức ảnh là một điểm trong

không gian 65536 chiều. Với một chuỗi ảnh thì ta sẽ có một bản đồ mô tả tập hợp các

điểm (mỗi điểm đặc trưng cho 1 ảnh) trong không gian rộng lớn này.

Ảnh của các gương mặt, có thể xem như tương tự nhau trong dạng tổng quát,

chứ không phải sự phân bố ngẫu nhiên trong không gian ảnh rộng lớn do đó ta có thể

mô tả chúng trong không gian con ít chiều hơn. Ý tưởng chính của phương pháp phân

tích các thành phần chính (PCA) là tìm kiếm các vectơ tính toán sự phân bố ảnh mặt

người theo hướng tốt nhất đối với vùng ảnh đầu vào cho trước. Những vectơ này xác

định không gian con của ảnh mặt người, chúng còn được gọi là không gian mặt (face

space).

Những vectơ này có chiều dài là N2, mô tả bức ảnh N×N, và nó là sự kết hợp

tuyến tính từ các ảnh gốc đầu vào. Bởi vì các vectơ là các eigenvectơ của ma trận

tương quan (covariance matrix) thu được từ các ảnh gốc đầu vào, bởi vì chúng cũng có

hình dạng như gương mặt, nên thường được gọi là eigenfaces. Một số ví dụ về

eigenfaces được chỉ ra ở hình 3.7.

Page 71: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

60

Lấy một chuỗi huấn luyện của ảnh mặt người là 1 2 3 4, , , ,..., nΓ Γ Γ Γ Γ . Mỗi bức ảnh

khác với ảnh trung bình theo vectơ i iΦ = Γ −Ψ . Gương mặt “trung bình” của chuỗi

được tính bằng công thức.

1

1 M

nnM =

Ψ = Γ∑

Hình 3.6 thể hiện dãy huấn luyện, ảnh trung bình chỉ ra ở hình 3.6b. Dãy này là

các vectơ có kích thước lớn được tính toán PCA, tìm kiếm dãy M các vectơ trực giao

và các giá trị riêng thích hợp. Các vectơ và thang đo là các vectơ riêng và trị riêng

tương ứng của ma trận tương quan.

1

1 MT T

n nn

C AAM =

= Φ Φ =∑

Trong đó ma trận [ ]1 2 3, , ,..., nA = Φ Φ Φ Φ , ma trận C có kích thước là N2 x N2 và

phải xác định N vectơ riêng và trị riêng, đó là nhiệm vụ rất khó làm đối với kích thước

của một ảnh chuẩn. Chúng ta cần phải có phương pháp tính toán hợp lý để tìm ra các

vectơ riêng này. Thật may mắn khi ta có thể xác định các vectơ riêng bằng việc tính

toán trong ma trận có kích thước nhỏ hơn nhiều M x M, sau đó dùng kết hợp tuyến tính

của các vectơ tính được ở trên.

Với sự phân tích trên thì việc tính toán đã được giảm bớt rất nhiều, từ bậc của

các điểm ảnh N2 chuyển sang bậc của các ảnh trong dãy huấn luyện M. Thực tế những

ảnh gương mặt trong dãy huấn luyện sẽ tương đối nhỏ (M<< N2) và việc tính toán có

thể kiểm soát được. Những trị riêng thích hợp cho phép chúng ta sắp xếp các trị riêng

theo hướng có lợi cho việc mô tả sự khác nhau giữa các bức ảnh. Hình 3.7 chỉ ra 7

eigenfaces đầu tiên đã tính tóan từ các ảnh đầu vào ở hình 3.6. Thông thường nền bức

ảnh sẽ được loại bỏ khỏi ảnh được luyện, do đó eigenfaces sẽ có giá trị không ở không

gian phía ngoài gương mặt.

Page 72: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

61

3.3.2 Dùng Eigenfaces để phân loại ảnh mặt người.

Khi các eigenfaces được tạo ra, việc nhận dạng trở thành nhận ra các mẫu.

Eigenfaces sẽ mở ra không gian con M’ chiều từ không gian gốc N2. M’ vectơ riêng

cần thiết của ma trận L được chọn ra từ các giá trị riêng thích hợp lớn nhất. Trong

trường hợp kiểm tra này, dựa trên M=16 ảnh gương mặt, chọn ra M’= 7 eigenfaces. Số

eigenfaces được sử dụng ở đây là chọn ra từ các trị riêng.

Một gương mặt mới được biến đổi về các thành phần eigenface của chính nó (chiếu

vào không gian mặt) bởi phép tính đơn giản

( )k kW u= Γ −Ψ với k=1,2…M’

Điều này mô tả một dãy phép nhân và phép cộng điểm đến điểm ảnh. Hình 3.8

chỉ ra 3 bức ảnh và hình chiếu của chúng vào không gian mặt người.

Hình 3.8 Ảnh và hình chiếu của nó vào không gian mặt người xác định bởi các

Eigenfaces từ hình 3.7

Các trọng số thu được từ vectơ [ ]1 2 3 ', , ,...,TMw w w wΩ = , chúng mô tả sự phân bố

của từng eigenface trong mối tương quan của ảnh đầu vào, mô tả eigenfaces như là

phần cơ bản của ảnh mặt người. Các vectơ này được dùng để tìm kiếm là cái nào trong

Page 73: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

62

số lớp ảnh mặt người được xác định trước, mô tả gương mặt mới này theo hướng tốt

nhất. Giải thuật đơn giản nhất là xác định lớp ảnh mô tả các thông tin gần giống ảnh

đầu vào, Chính là đi tìm lớp ảnh thứ k có khoảng cách euclid nhỏ nhất k kε = Ω−Ω ,

trong đó kΩ là vectơ mô tả lớp gương mặt thứ k. Gương mặt được phân loại thuộc lớp

thứ k khi giá trị kε nhỏ hơn ngưỡng cho trước là τθ . Ngược lại gương mặt sẽ đươc

phân loại là chưa biết.

3.3.3 Ứng dụng Eigenfaces để phát hiện gương mặt

Chúng ta có thể sử dụng kiến thức không gian mặt người để dò tìm và định vị mặt

người trong bức ảnh. Chúng ta có thể nhận dạng hình dáng của các thành phần của

gương mặt. Tạo ra các vectơ trọng số của bức ảnh tương đương với việc chiếu bức ảnh

vào không gian mặt đã được lược bỏ các chiều dư thừa. Khoảng cách giữa bức ảnh và

hình chiếu của nó vào không gian mặt người chỉ đơn giản là khoảng cách giữa ảnh đầu

vào điều chỉnh về giá trị trung bình Φ = Γ−Ψ và 1

M

i k ki

w μ=

Φ =∑ , hình chiếu của ảnh vào

không gian mặt.

Như được chỉ ra ở hình 3.9, các bức ảnh mặt người hoàn toàn không có sự thay

đổi khi chiếu vào không gian mặt, trong khi các bức ảnh không có dạng mặt người thì

sự khác biệt là khá nhiều, ý tưởng cơ bản cho việc dò tìm hình dáng mặt người trong

một khung cảnh là: tại mọi vị trí của bức ảnh tính toán khoảng cách giữa các vùng ảnh

nhỏ với không gian mặt. Khoảng cách từ không gian mặt được dùng như giá trị đo

“khả năng là mặt người”, kết quả tính toán khoảng cách từ không gian mặt người đến

mọi điểm trên bức ảnh là bản đồ mặt (“face map”) ( ),x yε . Hình 3.9 chỉ ra bức ảnh và

bản đồ mặt của nó - vùng giá trị thấp (vùng tối) chỉ ra hình dáng của gương mặt. Điểm

cực tiểu trong bản đồ mặt chính là vị trí gương mặt trong ảnh.

Page 74: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

63

Hình 3.9 a) Ảnh gốc b) Bản đồ mặt người, vùng tối chỉ ra hình dạng khuôn mặt

3.3.3.1 Xem xét lại không gian mặt

Một bức ảnh mặt người, và trong số những gương mặt trong chuỗi huấn luyện,

nên tuyến tính với không gian mặt, tổng quát là nó mô tả những bức ảnh xem như

giống mặt người. Nói một cách khác, khoảng cách hình chiếu δΦ nên nằm trong phạm

vi ngưỡng.

Có 4 trường hợp có thể xảy ra đối với ảnh đầu vào và các vectơ thành phần của

nó:

• Gần không gian mặt và thuộc một lớp mặt .

• Gần không gian mặt nhưng không thuộc lớp mặt

• Xa không gian mặt nhưng thuộc 1 lớp mặt.

• Xa không gian mặt và không thuộc lớp mặt nào.

Hình 3.10 chỉ ra 4 trường hợp trên trong ví dụ đơn giản là chỉ có 2 eigenfaces.

Hình 3.10 Ví dụ đơn giản thể hiện 4 hình chiếu của ảnh lên không gian mặt người.

Trong trường hợp này sử dụng 2 eigenfaces là µ1, µ2 và 3 lớp mặt người (cá thể) đã

biết trước (Ω1, Ω2, Ω3)

Page 75: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

64

Trong trường hợp đầu tiên, cá thể sẽ được nhận dạng và xác định. Trong trường

hợp 2 sẽ nhận ra cá thể thuộc lớp mặt người nhưng chưa biết.

Hai trường hợp còn lại chỉ ra ảnh không phải là ảnh mặt người. Riêng trường

hợp thứ ba sẽ bị nhận diện sai trong hầu hết hệ thống nhận dạng hiện nay; tuy nhiên sự

nhận dạng sai này sẽ bị phát hiện trong hệ thống của chúng tôi bởi vi khoảng cách cần

thiết giữa ảnh và không gian con của ảnh mặt người.

3.3.3.2 Nhận dạng theo thời gian thực

Con người luôn không ngừng chuyển động. Ngay cả khi đang ngồi họ cũng cựa

quậy, và điều chỉnh vị trí cơ thể, chớp mắt nhìn xung quanh. Đối với người chuyển

động trong không gian tĩnh, chúng tôi sẽ xây dựng hệ thống dò tìm và định vị các

chuyển động đơn giản, mô tả hình 6, cho phép dò tìm và định vị trí đầu nhân vật. Bộ

lọc không gian - thời gian (spatio-temporal) theo dõi và nhấn mạnh các vị trí ảnh không

tuyến tính mà cường độ thay đổi theo thời gian, do đó người chuyển động sẽ hiện lên

trên ảnh đã được lọc.

Hình 3.11 Hệ thống dò tìm và định vị mặt người

Sau khi lấy ngưỡng ảnh đã được lọc để tạo ra ảnh chuyển động dạng nhị phân,

chúng ta sẽ phân tích chuyển động khối theo thời gian để xác định chuyển động do con

người để từ đó xác định vị trí đầu người. Một số luật đơn giản được sử dụng, chẳng hạn

như “đầu người là khối nhỏ hơn nằm phía trên khối chính (thân người)” chuyển động

của đẩu người là chậm và liền kề nhau.

Page 76: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

65

Chúng ta sẽ sử dụng kỹ thuật được mô tả ở trên để xây dựng hệ thống có thể dò

tìm và nhận dạng mặt người theo thời gian thực. Khi chương trình nhận dạng và dò tìm

chuyển động kiếm được phần đầu người, một bức ảnh con, trung tâm là phần đầu

người, sẽ được chuyển vào module nhận dạng. Dùng khoảng cách từ không gian mặt

người xác định, bức ảnh sẽ bị loại bỏ nếu không phải mặt người, nhận dạng xem gương

mặt có phải thuộc nhóm đã biết trước không, hoặc xác định đó là gương mặt chưa biết.

Quá trình nhận dạng bằng hệ thống này sẽ mất từ 2 đến 3 giây.

3.4 Nhận xét

PCA là phương pháp dùng để xây dựng đặc trưng khuôn mặt, nó là một nền

tảng để phát triển những thuật toán khác. Thực tế có rất nhiều tác giả áp dụng PCA, kết

hợp với những phương pháp như mạng neural, xác suất thống kê để xây dựng những

thuật toán có độ chính xác cao.

3.4.1 Ưu điểm của phương pháp PCA

• Dễ cài đặt, nếu ta xét bài toán tìm khuôn mặt giống nhau thì chỉ cần áp dụng

hoàn toàn theo lý thuyết là đã có độ chính xác khá cao, nếu áp dụng cho bài

toán tìm vị trí khuôn mặt thì cần phải có một thuật toán nữa để sử dụng face

map thu được theo lý thuyết.

• Tìm được các đặc tính tiêu biểu của đối tượng cần nhận dạng mà không cần

phải xác định các thành phần và mối quan hệ giữa các thành phần đó.

• Thuật toán có thể thực hiện tốt với các ảnh có độ phân giải cao, do PCA sẽ

thu gọn ảnh thành một ảnh có kích thước nhỏ hơn.

• PCA có thể kết hợp với các phương pháp khác như mạng Noron, Support

Vector Machine … để mang lại hiệu quả nhận dạng cao hơn.

3.4.2 Nhược điểm của PCA

• Các mẫu khuôn mặt hoàn toàn phụ thuộc vào tập huấn luyện, có nghĩa là các

khuôn mặt trong ảnh kiểm tra phải giống với các ảnh huấn luyện về kích

thước, tư thế, độ sáng. Thực tế trong tập huấn luyện thường gồm nhiều nhóm

hình, mỗi nhóm là hình của một người với tư thế, độ sáng khác nhau.

Page 77: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 3: Phân tích thành phần chính PCA (Principal Component Analysis)

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

66

• PCA phân loại theo chiều phân bố lớn nhất của tập vector. Tuy nhiên, chiều

phân bố lớn nhất không phải lúc nào cũng mang lại hiệu quả tốt nhất cho bài

toán nhận dạng. Đây là nhược điểm cơ bản của PCA.

• PCA rất nhạy với nhiễu.

Có rất nhiều thuật toán nhận dạng mặt người dựa trên những chi tiết của khuôn

mặt như đôi mắt, lông mày, cấu trúc của khuôn mặt, hay màu da… Khác hoàn toàn với

những thuật toán trên, PCA nhận dạng dựa trên những nét tổng thể của khuôn mặt. Còn

hơn một thuật toán, PCA đã cung cấp một cơ sở rất rõ ràng cho việc mô tả đặc trưng

của khuôn mặt, để từ đó có thể phát triển những thuật toán nhận dạng khác. Vì vậy có

thể PCA không là thuật toán tốt nhất, nhưng là thuật toán phổ biến nhất được áp dụng

trong bài toán nhận diện mặt người.

Page 78: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 67

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

Chương 4

CHƯƠNG TRÌNH

MÔ PHỎNG

4.1 Chương trình mô phỏng

4.2 Nhận xét kết quả đạt được

Page 79: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 68

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

Chương 4

CHƯƠNG TRÌNH MÔ PHỎNG

4.1 Chương trình mô phỏng

4.1.1 Cơ sở dữ liệu ảnh

Cơ sở dữ liệu ảnh bao gồm có 3 tập ảnh: ảnh face, ảnh nface, ảnh mẫu. Trong đó

2 tập là ảnh face và ảnh nface được dùng trong chương trình dò tìm và cắt ảnh mặt

người, còn chương trình nhận dạng mặt người dùng 2 tập ảnh là ảnh face và ảnh mẫu.

4.1.1.1 Tập ảnh huấn luyện

a) Ảnh face

Tập ảnh face bao gồm những tập ảnh khuôn mặt người, dùng trong thuật toán

PCA, để xác định các thành phần đặc trưng của khuôn mặt người, dùng để dò tìm, xác

định khuôn mặt người và nhận dạng mặt người.

Hình 4.1 Tập ảnh Face

Page 80: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 69

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

b) Ảnh nface

Tập ảnh nface bao gồm những tập ảnh không phải là khuôn mặt người, dùng

trong thuật toán PCA, để xác định các thành phần đặc trưng không phải là của khuôn

mặt người, đó là không gian ảnh môi trường bên ngoài: cây cối, không gian ngoại

cảnh, … giúp cho việc dò tìm khuôn mặt người chính xác hơn, bằng cách loại bỏ các

điểm đánh dấu không phải khuôn mặt người, từ đó chúng ta sẽ đễ dàng dò tìm khuôn

mặt người trong một bức ảnh cần xác định.

Hình 4.2 Tập ảnh nface

4.1.1.2 Tập ảnh mẫu

Tập ảnh mẫu bao gồm các ảnh đưa vào tập ảnh cơ sở dữ liệu, khi ta dò tìm và

cắt ảnh khuôn mặt, từ đó sẽ xác định các thành phần đặc trưng, dò tìm trong ảnh cơ sở

dữ liệu, xác định tọa độ khoảng cách sai lệch giữa các thông số điểm ảnh, tìm ra những

ảnh tương đồng, gần với ảnh được xác định, từ đó truy xuất ra thông tin dữ liệu của ảnh

cần nhận dạng.

Page 81: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 70

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

Hình 4.3 Tập ảnh mẫu

4.1.2 Các bước thực hiện chương trình

Khi chạy chương trình “Dò tìm và cắt ảnh mặt người dùng PCA” ta thao tác

theo trình tự các bước sau:

Bước 1: Đưa ảnh vào để xử lý

Ở bước này chúng ta có hai cách để chọn ảnh nguồn để xử lý là từ một nguồn có

sẵn và từ một nguồn đưa ảnh trực tiếp ở ngoài vào thông qua webcam.

- Cách thứ nhất: Đưa ảnh vào từ một nguồn có sẵn. Ta chọn nút chọn ảnh để

tìm nguồn ảnh gốc đưa ảnh vào xử lý cụ thể là tập ảnh trong thư mục ảnh test. Sau khi

chọn ảnh cần kiểm tra ta chọn nút open để chọn ảnh đã chọn.

- Cách thứ hai: Đưa ảnh trực tiếp thu từ ngoài vào nhờ thiết bị thu hình đó là

webcam. Ta nhấn nút camera để mở chương trình chạy webcam, sau khi đã điều chỉnh

khoảng cách và kích thước ảnh đầu vào hợp lý ta nhấn vào nút chụp ảnh để đưa ảnh

chụp vào xử lý các công đoạn tiếp theo.

Bước 2: Dò tìm ảnh mặt người.

Để thực hiện bước này ta cần điều kiện là phải có ảnh kiểm tra mới chạy được

chương trình dò tìm ảnh mặt người. Khi đã có đủ điều kiện ta nhấn nút nhận dạng thì

chương trình sẽ bắt đầu thực hiện: lấy ảnh chọn làm ảnh ban đầu đưa vào chương trình

Page 82: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 71

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

nhận dạng ảnh tìm và xác định vị trí của những khuôn mặt có trong tấm ảnh. Đây là

đoạn chương trình chính của bài toán, đoạn chương trình sử dụng thuật toán PCA và là

giai đoạn chiếm thời gian nhiều nhất của bài toán “Dò tìm và cắt ảnh mặt người dùng

PCA”.

Bước 3: Cắt ảnh mặt người.

Là quá trình tách những khuôn mặt có trong tấm ảnh đầu vào chia thành những

tấm ảnh nhỏ riêng lẻ để giúp ta có thể lưu lại từng khuôn mặt một cách dể dàng hay để

dùng những tấm ảnh đó vào những công việc khác một cách nhanh chóng và chính xác

hơn.

Bước 4: Lưu ảnh khuôn mặt.

Sau tất cả các quá trình thực hiện phương pháp tìm và tách ảnh mặt người thì

cuối cùng kết quả cũng đạt được dù không chuẩn xác nhưng mục đích cuối cùng là ta

phải lưu trữ lại những gì mà ta đã làm được, khi ta nhấn vào nút save thì sẽ hiện lên thư

mục để lưu ảnh và thực hiện thao tác lưu ảnh.

Bước 5: Nhận dạng khuôn mặt.

Quá trình nhận dạng khuôn mặt cũng được thực hiện dựa vào thuật toán PCA,

sau khi cắt ảnh mặt người, từ ảnh đó ta đặt làm ảnh test, ảnh test này sẽ được xử lý

bằng cách xác định khoảng cách của ảnh test đến ảnh cơ sở dữ liệu. Nếu ảnh test có

nằm trong cơ sở dữ liệu ảnh, thì ảnh test sẽ được nhận dạng bằng một bức ảnh khác

nằm trong cơ sở dữ liệu ảnh, còn nếu ảnh test không nằm trong cơ sở dữ liệu ảnh, thì sẽ

không nhận dạng được.

Page 83: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 72

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

4.1.3 Lưu đồ giải thuật

4.1.3.1 Lưu đồ giải thuật chính

Hình 4.4 Lưu đồ giải thuật chính

4.1.3.2 Lưu đồ giải thuật chi tiết

a) Lưu đồ giải thuật chọn ảnh

Chọn ảnh có hai cách:

• Cách 1: Chọn ảnh tĩnh (ảnh có sẵn).

• Cách 2: Chọn ảnh động (nhận ảnh từ webcam).

Chọn ảnh

Chương trình dò tìm và cắt ảnh mặt người

Chương trình nhận dạng ảnh mặt người

Bắt đầu

Kết thúc

Page 84: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 73

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

Hình 4.5 Lưu đồ giải thuật chọn ảnh

Chọn ảnh động

Bắt đầu

Chạy chương trình mở webcam

Chọn và chụp ảnh

Chọn thư mục chứa ảnh cần kiểm tra

Chọn ảnh

Hiển thị ảnh đã chọn

Kết thúc

Chọn ảnh tĩnh

Page 85: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 74

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

b) Lưu đồ giải thuật chương trình dò tìm ảnh mặt người

Hình 4.6 Lưu đồ giải thuật chương trình dò tìm ảnh mặt người

S

Bắt đầu

Kết thúc

Đánh dấu

Tập ảnh huấn luyện Face và Nface Ảnh dò tìm

Dò tìm ảnh mặt người bằng PCA

Mặt người

Đóng khung

Tách mặt

Lưu

Đ

Không đánh dấu

Không đóng khung

Page 86: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 75

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

c) Lưu đồ giải thuật chương trình nhận dạng

Hình 4.7 Lưu đồ giải thuật chương trình nhận dạng

Thuật toán nhận dạng PCA

Ảnh mẫu để so sánh nhận dạng

Ảnh có trong tập dữ liệu

Truy xuất thông tin ảnh nhận dạng

Hiển thị thông tin và ảnh nhận dạng

Chọn ảnh nhận dạng

Dò tìm thông tin từ file Excel “hoso1.xls”

Không có

Bắt đầu

Kết thúc

Page 87: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 76

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

d) Lưu đồ thuật toán PCA

Hình 4.8 Lưu đồ giải thuật PCA

Thuật toán PCA

Tạo cơ sở dữ liệu

Chuyển ảnh thành vector

Tạo ma trận ảnh

Tính giá trị ảnh trung bình

Tính các giá trị Eigenface

Xác định Eigenface của ảnh chọn ban đầu

Bắt đầu

Kết thúc

Page 88: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 77

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

4.1.4 Kết quả mô phỏng

a) Giao diện của chương trình

Hình 4.9 Giao diện chính

Hình 4.10 Giao diện chương trình 1 (ảnh tĩnh)

Page 89: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 78

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

Hình 4.11 Giao diện chương trình 2 (ảnh động)

b) Giao diện của kết quả dò tìm và nhận dạng

Ảnh 1 khuôn mặt:

Hình 4.12 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 1 khuôn mặt

Page 90: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 79

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

Hình 4.13 Giao diện kết quả chương trình 2 (ảnh động)với 1 khuôn mặt

Ảnh 2 khuôn mặt:

Hình 4.14 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 2 khuôn mặt

Ảnh 4 khuôn mặt:

Page 91: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 80

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

Hình 4.15 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 4 khuôn mặt nữ

Hình 4.16 Giao diện kết quả chương trình 1 (ảnh tĩnh) với 4 khuôn mặt nam

4.1.5 Tốc độ thực hiện

Tốc độ thực hiện chương trình thể hiện thời gian mà chương trình tính toán

trong quá trình xử lý, tùy theo giá trị kích thước ảnh đưa vào lớn hay nhỏ mà tốc độ

Page 92: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 81

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

thực hiện nhanh hay chậm. Nếu ảnh đầu vào có kích thước nhỏ, quá trình xử lý của

chương trình sẽ thực hiện nhanh chóng, nếu ảnh đầu vào có kích thước lớn, quá trình

xử lý của chương trình sẽ thực hiện chậm, mặc khác tốc độ thực hiện cũng tùy thuộc

vào tốc độ xử lý của máy tính, vì vậy, yêu cầu cần có một cấu hình thích hợp để thực

hiện chương trình một cách nhanh chóng, tạo điều kiện thuận lợi cho việc dò tìm và

nhận dạng khuôn mặt.

Tốc độ thực hiện là quá trình đo đạc thời gian xử lý chương trình, đó là chương

trình dò tìm ảnh mặt người và chương trình nhận dạng ảnh mặt người.

4.2 Nhận xét kết quả đạt được

Qua quá trình tìm hiểu và nghiên cứu, chúng em đã xây dựng được một cái nhìn

khái quát về bài toán nhận dạng, đặc biệt là nhận dạng mặt người. Đồng thời, nắm bắt

được một số vấn đề về xử lý ảnh: các dạng ảnh, tính chất ảnh, không gian, tọa độ ảnh,

ma trận ảnh,… và vận dụng nó kết hợp với các công cụ xử lý ảnh trong Matlab (Image

Processing Toolbox).

Từ kết quả thu được, ta nhận thấy: ta có thể dò tìm được 1 khuôn mặt, 2 khuôn

mặt, 3 khuôn mặt và tối đa là 4 khuôn mặt trong 1 bức ảnh, nguyên nhân do sự hạn

chế về kích thước của khuôn mặt và bức ảnh, và những khuôn mặt này có thể có hoặc

không có trong tập ảnh huấn luyện, đây chính là ưu điểm của bài toán. Tuy chưa có sự

chuẩn xác trong quá trình dò tìm và nhận dạng mặt người, nhưng bài toán phần nào đã

được giải quyết. Trong quá trình thao tác, có thể có những ưu và khuyết điểm, nhưng

bài luận văn này của chúng em cũng đã hoàn thành tương đối có thể chấp nhận được,

sau đây là một số ưu điểm và khuyết điểm của bài toán cũng như trong quá trình thực

hiện luận văn.

Ưu điểm

- Ta có thể nhận dạng được một bức ảnh với 1 khuôn mặt, 2 khuôn mặt, 3 khuôn mặt

và 4 khuôn mặt.

- Khuôn mặt người được dò tìm và cắt ra rất rõ nét, có thể nhận dạng được.

Page 93: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 82

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

- Đối với thuật toán PCA, đây là một thuật toán được sử dụng trong rất nhiều lĩnh vực,

đối với lĩnh vực chuyên ngành điện tử, thuật toán được vận dụng trong Matlab với

nhiều công cụ xử lý, tạo điều kiện thuận lợi cho việc thực hiện đề tài.

Khuyết điểm

- Nội dung của bài toán là dò tìm và nhận dạng mặt người, nên sử dụng rất nhiều khuôn

mặt của nhiều đối tượng với các trạng thái khác nhau, nên khuyết điểm của bài toán

này là cần một số lượng lớn nguồn tài nguyên của khuôn mặt của nhiều đối tượng, từ

đó mới có thể tạo ra được một khối lượng cơ sở dữ liệu phong phú. Cho nên có những

trường hợp chúng ta sẽ không dò tìm được một vài khuôn mặt trong bức ảnh, vì không

tìm được những nét đặc trưng cơ bản của khuôn mặt.

- Chương trình được thực hiện nhờ vào hoạt động của máy tính, nên cần có một cấu

hình cần thiết để xử lý và tính toán, từ đó mới có thể áp dụng trong công nghệ hiện đại,

điều này ảnh hưởng đến tốc độ thực hiện của chương trình. Ví dụ như nhận dạng khuôn

mặt người qua một thiết bị quan sát, nếu tốc độ xử lý nhanh ta có thể có một kết quả

mỹ mãn và hài lòng hơn.

- Về nội dung của bài toán, việc chọn lọc đưa ảnh vào để xử lý, thì có hai cách: sử

dụng một ảnh tĩnh có sẵn và sử dụng nguồn dữ liệu đưa vào từ webcam. Đối với

webcam, hay một thiết bị thu hình nào, thì điều đầu tiên là cần phải có độ phân giải tốt

để ảnh đưa vào rõ nét, như vậy khả năng xử lý sẽ cao hơn và chính xác hơn.

- Đồng thời khó khăn về cách xác định khoảng cách và tọa độ khuôn mặt người trong

quá trình đưa ảnh vào xử lý, cụ thể là kích thước ảnh mặt người so với kích thước của

ảnh huấn luyện (quá lớn hoặc quá bé). Vì phương pháp nhận dạng PCA là phương

pháp dò quét ảnh nhận dạng theo khối cho nên vấn đề khoảng cách và kích thước của

khuôn mặt ảnh đưa vào so với kích thước của tập ảnh huấn luyện (tập ảnh face) là rất

quan trọng. Cho nên thuật toán thường gặp khó khăn nhiều về vấn đề này.

- Khó khăn trong việc xử lý dò tìm và nhận dạng, điều kiện ảnh đưa vào xử lý phải phù

hợp: độ sáng, góc lệch, cảm xúc, biến dạng,… Chính vì điều này, đôi khi có những

khuôn mặt mà không đủ điều kiện về ánh sáng (ảnh bị tối) hoặc khuôn mặt bị sai khác

quá nhiều so với ảnh dữ liệu (méo dạng, khuôn mặt nhăn nhó, nhiều cảm xúc,…)

Page 94: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 83

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

Như vậy, dựa vào xác suất thống kê trong quá trình làm việc, có một vài trường

ảnh không nhận dạng được, với nhiều lí do khách quan.

Một số trường hợp bị lỗi, không dò tìm được khuôn mặt, do nhiều nguyên nhân

khác nhau:

- Ảnh có nhiều điểm đặc trưng khác: râu quai nón…

Hình 4.17 Ảnh lỗi do quá nhiều chi tiết không phân biệt được

Page 95: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 4: Chương trình mô phỏng 84

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

- Ảnh không phải là ảnh ảnh thật: tranh vẽ…, làm cho độ sắc nét của ảnh không

cao.

Hình 4.18 Lỗi do ảnh không được sắc nét

Page 96: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Chương 5: Kết luận

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

85

Chương 5

KẾT LUẬN

5.1 Kết luận

Trong quá trình thực hiện đồ án tốt nghiệp gặp rất nhiều khó khăn và thử thách,

đòi hỏi sự cố gắng và tập trung cao độ trong quá trình thực hiện, nhưng chúng em cũng

đã cố gắng hoàn thành đúng tiến độ làm việc theo yêu cầu đề ra, tuy nhiên bài luận này

cũng chỉ đạt được một số kết quả tương đối, và còn nhiều sai sót trong vấn đề dò tìm

cũng như nhận dạng mặt người.

Kết quả đạt được của chúng em là đã dò tìm và nhận dạng được một số ảnh đã

có trong cơ sở dữ liệu và một số ảnh nằm ngoài cơ sở dữ liệu, đó là những bức ảnh có

độ sắc nét và tương phản cao, còn những ảnh không có độ sắc nét cao thì vẫn chưa xử

lý được, đó chính là khuyết điểm của đề tài cũng như thuật toán PCA. Đối với ảnh

động, việc xử lý ảnh đưa vào đã gây ra rất nhiều khó khăn, nó không chỉ đòi hỏi sự sắc

nét của bức ảnh, mà còn yêu cầu về khoảng cách…

5.2 Hướng phát triển đề tài

- Nhận diện mặt người qua tập dữ liệu có sẵn từ camera.

- Nhận diện danh tính của người phạm tội qua ảnh chụp.

- Có thể kết hợp với nhiều thuật toán khác như: ICA, Neural,… để xử lý một cách

chính xác hơn.

- Dò tìm và nhận dạng đối tượng vi phạm kỷ luật từ xa qua một thiết bị quan sát.

- Bảo mật hệ thống bằng cách nhận dạng khuôn mặt khi một hay nhiều đối tượng muốn

ra vào một công ty, xí nghiệp, hay một cơ quan nào đó.

- Quản lý thời gian làm việc của các nhân viên của một xí nghiệp mà chỉ cần một

camera quan sát.

Page 97: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Tài Liệu Tham Khảo

[1]. Ngô Hoàng Khắc Tiến, Trần Xuân Bách, Đồ án tốt nghiệp Dò tìm ảnh mặt

người dùng PCA, Khoa Công nghệ điện tử, trường Đại học Công Nghiệp TP HCM,

2009.

[2]. Lương Mạnh Bá, Nguyễn Thanh Thủy, Nhập Môn Xử lý ảnh số, Nxb Khoa học

và Kỹ thuật, 2002.

[3]. Võ Đức Khánh, Hoàng Văn Kiếm. Giáo trình xử lý ảnh số, Nhà xuất bản Đại

học Quốc gia Thành phố Hồ Chi Minh, 2003.

[4]. Phạm Thế Bảo, Tổng quan các phương pháp xác định khuôn mặt người, Tạp

chí bưu chính viễn thông.

[5]. Ngô Quốc Tạo, Ngô Phương Đông, Nguyễn Thanh Hòa, Phạm Việt Bình

(2003), Báo cáo “Nhận dạng mặt người trong môi trường độ sáng không đồng

nhất”, Hội thảo Công nghệ thông tin quốc gia lần thứ VIII, Thái Nguyên, 29-

31/8/2003.

[6]. Nguyễn Hoài Sơn, Giáo trình Matlab căn bản, Khoa Xây dựng và Cơ học ứng

dụng, trường ĐHSPKT.

[7]. Burce A. Draper, Kyungim Baek, Marian Stewart Bartlett, J. Ross Beveridge,

“Recognizing Faces with PCA and ICA”.

[8]. Stan Z. Li , Anil K. Jain, “Handbook of Face Recognition”, 2006.

[9]. IEEE Computer Society, “Automatic face and gesture recognition”, 2004

[10]. Các Wedsite:

http://www.mathworks.com/matlabcentral/fileexchange/?term=Variable

http://www.picvietnam.com/forum//showthread.php?t=387

www. diendandientu. com

www. dientuvienthong. net

Page 98: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

PHỤ LỤC ************ Chương trình chính*************** function varargout = luanvantotnghiep(varargin) % LUANVANTOTNGHIEP M-file for luanvantotnghiep.fig gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @luanvantotnghiep_OpeningFcn, ... 'gui_OutputFcn', @luanvantotnghiep_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin1) gui_State.gui_Callback = str2func(varargin1); end if nargout [varargout1:nargout] = gui_mainfcn(gui_State, varargin:); else gui_mainfcn(gui_State, varargin:); end % End initialization code - DO NOT EDIT % Executes just before luanvantotnghiep is made visible. function luanvantotnghiep_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; % Update handles structure guidata(hObject, handles); function varargout = luanvantotnghiep_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output; function THOAT_Callback(hObject, eventdata, handles) close1; % --- Executes on button press in pushbutton6. function pushbutton6_Callback(hObject, eventdata, handles) chuongtrinh1; delete(handles.figure1); % --- Executes during object creation, after setting all properties. function axes1_CreateFcn(hObject, eventdata, handles) imshow('anhnen.jpg'); % --- Executes during object creation, after setting all properties. function axes3_CreateFcn(hObject, eventdata, handles) imshow('vo.jpg'); % --- Executes during object creation, after setting all properties. function sxes2_CreateFcn(hObject, eventdata, handles)

Page 99: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

imshow('logo.bmp'); **************************************************** **************Chương trình cắt ảnh tĩnh********* function varargout = chuongtrinh1(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @chuongtrinh1_OpeningFcn, ... 'gui_OutputFcn', @chuongtrinh1_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin1) gui_State.gui_Callback = str2func(varargin1); end if nargout [varargout1:nargout] = gui_mainfcn(gui_State, varargin:); else gui_mainfcn(gui_State, varargin:); end % --- Executes just before chuongtrinh1 is made visible. function chuongtrinh1_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; % Update handles structure guidata(hObject, handles); % --- Outputs from this function are returned to the command line. function varargout = chuongtrinh1_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output; % --- Executes on button press in CHONANH. function CHONANH_Callback(hObject, eventdata, handles) xoaanh; chonanh; % --- Executes on button press in TACHMAT. function TACHMAT_Callback(hObject, eventdata, handles) axes(handles.axes4); imshow('anhluu/anh1.jpg'); axes(handles.axes5); imshow('anhluu/anh2.jpg'); axes(handles.axes6); imshow('anhluu/anh3.jpg'); axes(handles.axes7); imshow('anhluu/anh4.jpg'); % --- Executes on button press in Timmat. function Timmat_Callback(hObject, eventdata, handles) tic % tic là hàm đếm thời gian bắt đầu đếm thuchien; % gọi hàm thuchien.m axes(handles.axes2); imshow('anhluu/anh_kq.jpg'); %hiện ảnh kết quả set(handles.times,'string',toc); %kết thúc đếm thời gian và cho nó hiện

Page 100: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

% --- Executes on button press in NHANDANG. function NHANDANG_Callback(hObject, eventdata, handles) tic nhandang; set(handles.times,'string',toc); % --- Executes on button press in save1. function save1_Callback(hObject, eventdata, handles) s=imread('anhluu/anh1.jpg'); save1; % --- Executes on button press in save2. function save2_Callback(hObject, eventdata, handles) s=imread('anhluu/anh2.jpg'); save1; % --- Executes on button press in save3. function save3_Callback(hObject, eventdata, handles) s=imread('anhluu/anh3.jpg'); save1; % --- Executes on button press in save4. function save4_Callback(hObject, eventdata, handles) s=imread('anhluu/anh4.jpg'); save1; % --- Executes on button press in chon1. function chon1_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) photo=imread('anhluu\anh1.jpg'); a = strcat('anhluu/anhtest.jpg'); imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in chon2. function chon2_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) photo=imread('anhluu\anh2.jpg'); a = strcat('anhluu/anhtest.jpg'); imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in chon3. function chon3_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) photo=imread('anhluu\anh3.jpg'); a = strcat('anhluu/anhtest.jpg');

Page 101: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in chon4. function chon4_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) photo=imread('anhluu\anh4.jpg'); a = strcat('anhluu/anhtest.jpg'); imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in back. function back_Callback(hObject, eventdata, handles) xoaanh; luanvantotnghiep; delete(handles.figure1); % --- Executes on button press in close. function close_Callback(hObject, eventdata, handles) xoaanh; luanvantotnghiep; delete(handles.figure1); % --- Executes on button press in next. function next_Callback(hObject, eventdata, handles) xoaanh; chuongtrinh2; delete(handles.figure1); **************************************************** **********Chương trình cắt ảnh động**************** function varargout = chuongtrinh2(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @chuongtrinh2_OpeningFcn, ... 'gui_OutputFcn', @chuongtrinh2_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin1) gui_State.gui_Callback = str2func(varargin1); end if nargout [varargout1:nargout] = gui_mainfcn(gui_State, varargin:); else gui_mainfcn(gui_State, varargin:);

Page 102: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

end % End initialization code - DO NOT EDIT % --- Executes just before chuongtrinh2 is made visible. function chuongtrinh2_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; % Update handles structure guidata(hObject, handles); % --- Outputs from this function are returned to the command line. function varargout = chuongtrinh2_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output; % --- Executes on button press in chupanh. function chupanh_Callback(hObject, eventdata, handles) xoaanh; global vid photo a photo = getsnapshot(vid); selection = questdlg(['Ban muon chup anh gan hay xa?'],... ['Chuong trinh chup anh!'],... 'Gan','Xa','Yes'); if strcmp(selection,'Gan') axes(handles.axes1); photo=imresize(photo,0.5); imshow(photo); a = strcat('anhluu/anh_goc.jpg'); imwrite(photo,a); elseif strcmp(selection,'Xa') axes(handles.axes1); imshow(photo); a = strcat('anhluu/anh_goc.jpg'); imwrite(photo,a); end % --- Executes on button press in CAMERA. function CAMERA_Callback(hObject, eventdata, handles) global vid info = imaqhwinfo; info = imaqhwinfo('winvideo'); info.DeviceInfo; info.DeviceInfo.SupportedFormats; vid = videoinput('winvideo',1,'YUY2_640x480'); set(vid,'ReturnedColorSpace','RGB'); preview(vid); % --- Executes on button press in TACHMAT. function TACHMAT_Callback(hObject, eventdata, handles) axes(handles.axes4); imshow('anhluu/anh1.jpg'); axes(handles.axes5); imshow('anhluu/anh2.jpg'); axes(handles.axes6); imshow('anhluu/anh3.jpg'); axes(handles.axes7); imshow('anhluu/anh4.jpg'); % --- Executes on button press in Timmat.

Page 103: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

function Timmat_Callback(hObject, eventdata, handles) tic thuchien; axes(handles.axes2); imshow('anhluu/anh_kq.jpg'); set(handles.times,'string',toc); % --- Executes on button press in NHANDANG. function NHANDANG_Callback(hObject, eventdata, handles) tic nhandang; set(handles.times,'string',toc); % --- Executes on button press in save1. function save1_Callback(hObject, eventdata, handles) s=imread('anhluu/anh1.jpg'); save1; %thực hiện chương trình để lưu ảnh chọn % --- Executes on button press in save2. function save2_Callback(hObject, eventdata, handles) s=imread('anhluu/anh2.jpg'); save1; %thực hiện chương trình để lưu ảnh chọn % --- Executes on button press in save3. function save3_Callback(hObject, eventdata, handles) s=imread('anhluu/anh3.jpg'); save1; %thực hiện chương trình để lưu ảnh chọn % --- Executes on button press in save4. function save4_Callback(hObject, eventdata, handles) s=imread('anhluu/anh4.jpg'); save1; %thực hiện chương trình để lưu ảnh chọn % --- Executes on button press in chon1. function chon1_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) % nếu đánh dấu nó mang “Max” photo=imread('anhluu\anh1.jpg'); % chọn ảnh thực hiện cho chương trình nhận dạng a = strcat('anhluu/anhtest.jpg'); % con nếu không thì thôi không là gì hết imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in chon2. function chon2_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) % nếu đánh dấu nó mang “Max” photo=imread('anhluu\anh2.jpg'); % chọn ảnh thực hiện cho chương trình nhận dạng a = strcat('anhluu/anhtest.jpg'); % còn nếu không thì thôi không là gì hết imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in chon3. function chon3_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) % nếu đánh dấu nó mang “Max”

Page 104: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

photo=imread('anhluu\anh3.jpg'); % chọn ảnh thực hiện cho chương trình nhận dạng a = strcat('anhluu/anhtest.jpg'); % con nếu không thì thôi không là gì hết imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in chon4. function chon4_Callback(hObject, eventdata, handles) if (get(hObject,'Value') == get(hObject,'Max')) % nếu đánh dấu nó mang “Max” photo=imread('anhluu\anh4.jpg'); % chọn ảnh thực hiện cho chương trình nhận dạng a = strcat('anhluu/anhtest.jpg'); % còn nếu không thì thôi không là gì hết imwrite(photo,a); set(handles.ten,'string',' '); set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); end % --- Executes on button press in back. function back_Callback(hObject, eventdata, handles) xoaanh; % thực hiện xóa những tấm ảnh cũ trước khi thực chuongtrinh1; %hiện chương trình xử lý ảnh mới delete(handles.figure1); % --- Executes on button press in close. function close_Callback(hObject, eventdata, handles) xoaanh; % thực hiện xóa những tấm ảnh cũ trước khi thực luanvantotnghiep; %hiện chương trình xử lý ảnh mới delete(handles.figure1); ********* Đoạn code thực hiện chương trình dò tìm và cắt ảnh************* face='face'; nface='nface'; %********************** TAO MATRAN CSDL************ [T1,T2] = taoCSDL(face,nface); %******************* TAO EF ************ [m1,m2,E1,E2] = taoEF(T1,T2); %******************LOAD ANH DE XU LY********** im1=imread('anhluu/anh_goc.jpg'); im= imresize(im1,0.2); % nén ảnh lại chỉ còn 20% im =rgb2gray(im); % chuyển về ảnh xám chỉ mang giá trị 0 và 1 %***************** XAC DINH ************** [dong cot] = size(im); anh1=im*255; % nhận toàn bộ ảnh với gí trị 255 anh2=im*255; for i=1:1:dong for j=1:1:cot tam=subim(im,i,j); tam1=tam-m1; % m1 là giá trị trung bình của ảnh face tam2=tam-m2; % m2 là giá trị trung bình của ảnh nace sochieu1=size(E1,2); sochieu2=size(E2,2);

Page 105: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

hinhchieu1=tam*0; hinhchieu2=hinhchieu1; for k=1:sochieu1 toado=(E1(:,k))'*tam1; hinhchieu1=hinhchieu1+toado*E1(:,k); end for k=1:sochieu2 toado=(E2(:,k))'*tam2; hinhchieu2=hinhchieu2+toado*E2(:,k); end kc1=norm(tam1-hinhchieu1)/20; kc2=norm(tam2-hinhchieu2)/20; anh1(i,j)=kc1; anh2(i,j)=kc2; end end b=strcat('anhluu/anh_face.jpg'); imwrite(anh1,b); %******************* DANH DAU ANH *********** %@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ xacdinh(im1,im1,anh1,anh2); anh1=im1; anh=im1; face=anh1; nface=anh2; ******* Đoạn code tạo cơ sở dữ liệu cho chương trình dò tìm ảnh mặt********** function [T1,T2] = taoCSDL(face,nface) csdl1 = dir(face); csdl2=dir(nface); soanh1 = 0; soanh2=0; % đếm tất cả các file ảnh có trong thư mục face và nface for i = 1:size(csdl1,1) if not(strcmp(csdl1(i).name,'.')|strcmp(csdl1(i).name,'..')|strcmp(csdl1(i).name,'Thumbs.db')) soanh1 = soanh1 + 1; end end for i = 1:size(csdl2,1) if not(strcmp(csdl2(i).name,'.')|strcmp(csdl2(i).name,'..')|strcmp(csdl2(i).name,'Thumbs.db')) soanh2 = soanh2 + 1 ; end end T1 = []; % Tạo ma trận ảnh T1 chứa tập ảnh face for i = 1 : soanh1 str = int2str(i); % hàm strcat nhằm liên kết các giá trị thành chuỗi str = strcat('\',str,'.png'); % tiện cho quá trình truy xuất hay lưu lại giá trị mới str = strcat(face,str); img = imread(str); try img = rgb2gray(img); % chuyển tất cả về ảnh xám 0 1 catch

Page 106: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

end [dong cot] = size(img); % mỗi tấm ảnh huấn luyện có kích thước 18*27 tam = reshape(img',dong*cot,1); % biến 1 ảnh thành 1 vecto có 1cột và 18*27 hàng T1 = [T1 tam]; % tăng dần kích thước ma trận T1 End

% kết thúc ma trận T1 có kích thước 18*27x P với P là số cột của ma trận củng chính là số ảnh trong thư mục ảnh %huấn luyện face 18*27=486 chính là số dòng của ma trận ảnh T1 và tương tự ma trận T2 cũng vậy

T2 = []; % Bước này làm tương tự như tạo ma trận T1 for i = 1 : soanh2 % nhưng đối với ma trận ảnh nface str = int2str(i); str = strcat('\',str,'.png'); str = strcat(nface,str); img = imread(str); try img = rgb2gray(img); catch end [dong cot] = size(img); %dong 27 cot 18 tam = reshape(img',dong*cot,1); T2 = [T2 tam]; end *********Đoạn code tạo enginface ************** function [m1,m2,E1,E2] = taoEF(T1,T2) m1 = mean(T1,2); % Tính toán giá trị ảnh trung bình soanh1 = size(T1,2); m2 = mean(T2,2); soanh2=size(T2,2); %Tính độ lệch giửa các bước ảnh huấn luyện với giá trị ảnh trung bình sau đó trừ đi giá trị trung bình của ảnh trung bình và lưu các sai khác đó lại làm một ma trận ảnh mới ma trận đó là ma trận vecto riêng của ảnh huấn luyện, nhân ma trận vector riêng với ma trận nghịch đảo của nó và dùng hàm “eig” để tìm các vector riêng cho tập ảnh huấn luyện A1 = []; for i = 1 : soanh1 temp = double(T1(:,i)) - m1; % T(:,i): vector cột thứ i chính là một bức ảnh A1 = [A1 temp]; end A2 = []; for i = 1 : soanh2 temp = double(T2(:,i)) - m2; A2 = [A2 temp]; end L1 = A1'*A1; [V1 D1] = eig(L1); %tìm vector riêng và trị riêng L2 = A2'*A2; [V2 D2] = eig(L2); %V chứa ma trận những vecto riêng, còn D chứa những trị riêng của các vector riêng đó, vector riêng V(:,i) ứng với trị riêng là D(i,i) D=diag(D1); D=sort(D); % sắp sếp theo chiều tăng dần s=size(D); s=s(1); D=D(s-20); % chỉ giữ lại 20 trị riêng lớn nhất LeigV1 = []; % và 20 vector riêng lớn nhất của tập ảnh huấn luyện for i = 1 : size(V1,2) if( D1(i,i)>D ) LeigV1 = [LeigV1 V1(:,i)]; % tạo một ma trận mới chỉ gồm 20 vecto riêng End %tại các vị trí của chính nó còn các vị trí khác

Page 107: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

End %đều cho giá trị bằng 0 D=diag(D2); D=sort(D); s=size(D);s=s(1); D=D(s-30); LeigV2 = []; for i = 1 : size(V2,2) if( D2(i,i)>D ) LeigV2 = [LeigV2 V2(:,i)]; end end E1 = A1 * LeigV1; E2 = A2 * LeigV2; sovector=size(E1,2); for i=1:sovector dodai=norm(E1(:,i)); E1(:,i)=E1(:,i)/dodai; end sovector=size(E2,2); % sovector chính là số cột của ma trận for i=1:sovector dodai=norm(E2(:,i)); % “norm” la tính giá trị bình phương trung bình E2(:,i)=E2(:,i)/dodai; End ****** doan code xac dinh va cat anh khuon mat******** function xacdinh(anh1,anh,face,nface) [dong,cot]=size(face); % vì phương pháp PCA là phương pháp xử lý ảnh theo khối for i=15:1:dong-13; % do vậy khi xử lý ảnh ta thường cắt ảnh lớn ra thành từng for j=8:1:cot-8; % tấm ảnh con để xử lý mà tấm ảnh xử lý phải có kích thước s1=0.001; % bằng kích thước tấm ảnh trong tập ảnh huấn luyện s2=0.001; % do vậy khi xử lý ta phải tính giá trị từ tâm của tấm ảnh for i1=i-13:i+13 % để quét cho nên khi truy xuất ra hình Eigenface thường for j1=j-7:j+7 % mất đi các đường viền xung quanh là vậy if abs(i1-i)<3 && abs(j1-j)<2 s1=s1+double(face(i1,j1)); else s2=s2+double(face(i1,j1)); end end end if s2/s1>21.8 && (nface(i,j)+nface(i-1,j)+nface(i+1,j))>89 && face(i,j)<31 && face(i-1,j)<31 && face(i+1,j)<31 && face(i-2,j)<31 && face(i+2,j)<31 kq(i,j)=255; % gán tại điểm ảnh phù hợp với các thông số else % của khuôn mặt là 255 và các vị trí khác kq(i,j)=0; % mang giá trị bằng 0 end end end %----------------------------- d=strcat('anhluu/anh_danhdau.jpg'); imwrite(kq,d); I=kq; anhkq=anh; anhkq1=anh1; [d,c]=size(I); % d là số dòng còn c là số cột của ma trận ảnh I i1=1; i2=1; i3=1; i4=1; j1=1; j2=1; j3=1; j4=1; % khi tính toán ở hàm này thì i là cột và j là dòng if d>50

Page 108: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

d1=d*2/3; else d1=d-5; end for i=1:c-5 % trong thuật toán này ta dùng vòng lặp for để for j=1:d1 % tìm giá trị tại đó là 255 sau đó lưu nó lại if I(j,i)>200 && i>10 % để tiện bề cho tính toán tách mặt sau này i1=i; % vòng lặp for có một khuyết điểm là nó j1=j; % chỉ dừng lại tại điểm cuối cho nên vấn đề end % tìm kiếm được nhiều khuôn mặt gặp nhiều end % khó khăn vòng lệnh lặp lại nhiều lẩn end % tốn kém thời gian khi chạy chương trình if i1-30>0 for i=1:i1-30 for j=1:d*2/3 if I(j,i)==255 && i>10 i2=i; j2=j; end end end end if i2-30>0 for i=1:i2-30 for j=1:d/2 if I(j,i)==255 && i>10 i3=i; j3=j; end end end end if i3-30>0 for i=1:i3-20 for j=1:d/2 if I(j,i)==255 && i>10 i4=i; j4=j; end end end end [d,c]=size(anhkq); if j1>1 &&i1>1 [j12,i12]=do(I,j1,i1); % gọi đến chương trình dò tìm tâm ảnh khuôn mặt i1=i12-16; j1=j12-20; if i1<1 % điều kiện này nhằm tránh lỗi khi cắt ảnh i1=1; % mà cắt ảnh lấn ra ngoài khung ảnh end if j1<1 j1=1; end i1=i1*5; j1=j1*5; i11=i1+149; j11=j1+199; if i11>c

Page 109: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

i11=c; end if j11>d j11=d; end anh1=imcrop(anhkq1,[i1 j1 i11-i1 j11-j1]); a1=strcat('anhluu/anh1.jpg'); imwrite(anh1,a1); for c1=i1:i11 anhkq(j1,c1)=255; anhkq(j11,c1)=255; anhkq(j1-1,c1)=255; anhkq(j11-1,c1)=255; anhkq(j1-2,c1)=255; anhkq(j11-2,c1)=255; anhkq(j1-3,c1)=255; anhkq(j11-3,c1)=255; end for d1=j1:j11 anhkq(d1,i1)=255; anhkq(d1,i11)=255; anhkq(d1,i1-1)=255; anhkq(d1,i11-1)=255; anhkq(d1,i1-2)=255; anhkq(d1,i11-2)=255; anhkq(d1,i1-3)=255; anhkq(d1,i11-3)=255; end end if j2>1 &&i2>1 [j22,i22]=do(I,j2,i2); i2=i22-16; j2=j22-20; if i2<1 i2=1; end if j2<1 j2=1; end i2=i2*5; j2=j2*5; i21=i2+149; j21=j2+199; if i21>c i21=c; end if j21>d j21=d; end anh1=imcrop(anhkq1,[i2 j2 i21-i2 j21-j2]); a1=strcat('anhluu/anh2.jpg'); imwrite(anh1,a1); for c1=i2:i21 anhkq(j2,c1)=255; anhkq(j21,c1)=255; anhkq(j2-1,c1)=255; anhkq(j21-1,c1)=255; anhkq(j2-2,c1)=255; anhkq(j21-2,c1)=255; anhkq(j2-3,c1)=255; anhkq(j21-3,c1)=255; end for d1=j2:j21 anhkq(d1,i2)=255; anhkq(d1,i21)=255; anhkq(d1,i2-1)=255; anhkq(d1,i21-1)=255; anhkq(d1,i2-2)=255; anhkq(d1,i21-2)=255; anhkq(d1,i2-3)=255; anhkq(d1,i21-3)=255; end end if j3>1 &&i3>1 [j32,i32]=do(I,j3,i3); i3=i32-16; j3=j32-20; if i3<1 i3=1; end if j3<1 j3=1; end i3=i3*5; j3=j3*5; i31=i3+149; j31=j3+199; if i31>c i31=c; end if j31>d j31=d; end

Page 110: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

anh1=imcrop(anhkq1,[i3 j3 i31-i3 j31-j3]); a1=strcat('anhluu/anh3.jpg'); imwrite(anh1,a1); for c1=i3:i31 anhkq(j3,c1)=255; anhkq(j31,c1)=255; anhkq(j3-1,c1)=255; anhkq(j31-1,c1)=255; anhkq(j3-2,c1)=255; anhkq(j31-2,c1)=255; anhkq(j3-3,c1)=255; anhkq(j31-3,c1)=255; end for d1=j3:j31 anhkq(d1,i3)=255; anhkq(d1,i31)=255; anhkq(d1,i3-1)=255; anhkq(d1,i31-1)=255; anhkq(d1,i3-2)=255; anhkq(d1,i31-2)=255; anhkq(d1,i3-3)=255; anhkq(d1,i31-3)=255; end end if j4>1 &&i4>1 [j42,i42]=do(I,j4,i4); i4=i42-16; j4=j42-20; if i4<1 i4=1; end if j4<1 j4=1; end i4=i4*5; j4=j4*5; i41=i4+149; j41=j4+199; if i41>c i41=c; end if j41>d j41=d; end anh1=imcrop(anhkq1,[i4 j4 i41-i4 j41-j4]); a1=strcat('anhluu/anh4.jpg'); imwrite(anh1,a1); for c1=i4:i41 anhkq(j4,c1)=255; anhkq(j41,c1)=255; anhkq(j4-1,c1)=255; anhkq(j41-1,c1)=255; anhkq(j4-2,c1)=255; anhkq(j41-2,c1)=255; anhkq(j4-3,c1)=255; anhkq(j41-3,c1)=255; end for d1=j4:j41 anhkq(d1,i4)=255; anhkq(d1,i41)=255; anhkq(d1,i4-1)=255; anhkq(d1,i41-1)=255; anhkq(d1,i4-2)=255; anhkq(d1,i41-2)=255; anhkq(d1,i4-3)=255; anhkq(d1,i41-3)=255; end end e=strcat('anhluu/anh_kq.jpg'); imwrite(anhkq,e); ****Đoạn code xác định vị trí trung tâm khuôn mặt******* function [a1,b1]= do(anh,a,b) % b la gia tri cot a la gia tri dong mini=b; minj=a; maxj=a; [d,c]=size(anh); b1=b-20; a1=a-15; a2=a+15; if b1<1 b1=1; end if a1<1 a1=1; end if a2>d a2=d; end for i1=b1:b for j1=a1:a2 if anh(j1,i1)>200

Page 111: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

if i1<mini mini=i1; end if j1<minj minj=j1; end if j1>maxj maxj=j1; end end end end a1=round((minj+maxj)/2); b1=round((mini+b)/2); ******Đoạn code nhận dạng Enginface*********** function kq=subim(anh,y,x) [dong,cot]=size(anh); % hàm này có hai mục đích d=27;c=18; % thứ 1: xóa bỏ các ảnh lỗi i1=y-13;i2=y+13; % thứ hai biến đổi ảnh thành vector và làm tròn số if i1<1 % trong thuật toán PCA xử lý ảnh theo khối do đó khi i1=1; % cắt ảnh thì củng sẽ có những tấm ảnh bị lỗi end % nên hàm này sẽ xóa tất cả các ảnh lỗi về giá trị if i2>dong % chỉ giữ lại các ảnh có kích thước đúng với ảnh mẫu i2=dong; end j1=x-8;j2=x+9; if j1<1 j1=1; end if j2>cot j2=cot; end im=anh(i1:i2,j1:j2); kt=(i2-i1+1)*(j2-j1+1); if kt==486 im=reshape(im',486,1); kq=double(im); else im=reshape(im,kt,1); kq=zeros(486,1); for i=1:kt kq(i,1)=im(i,1); end kq=double(kq); end *******Đoạn code nhận dạng và truy xuất thông tin cá nhân ảnh nhận dạng******** ******Đoạn code chương trình chính********** anhtest=imread('anhluu/anhtest.jpg'); %đọc ảnh chọn để nhận dạng if anhtest==255 % kiểm tra có phải là ảnh trắng hay không axes(handles.axes3); % nếu là ảnh trắng thông tin nhận dạng sẽ là imshow('hoso/0.jpg'); % tấm hình không nhận dạng được set(handles.ten,'string','Khoâng bieát'); % và các thông tin khác đều “không biết” set(handles.ns,'string','Khoâng bieát'); set(handles.mssv,'string','Khoâng bieát'); set(handles.lop,'string','Khoâng bieát'); set(handles.quequan,'string','Khoâng bieát');

Page 112: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

else % nếu có tấm ảnh nhận dạng thì chương trình sẽ anhtest=imresize(anhtest,[200 150]); % resize ảnh về đúng kích thước của ảnh mẫu mau='anhmau'; %tạo cơ sở dữ liệu ảnh mẫu T = taoCSDL1(mau); % tính giá trị eigenface của tập ảnh mẫu [m, A, E] = taoEF1(T); anhtim = nhandien1(anhtest, m, A, E); %gọi đến chương trình nhandien1 để nhận diện ảnh anhtim1=anhtim+1; % ******* Đọc và truy xuất dữ liệu của tấm ảnh nhận dạng được từ file Excel ************ file = [pwd '\hoso1.xls']; % khởi động chương trình Excel đọc file hoso1.xls range = 'A2:E100'; h = actxserver('Excel.Application'); % chỉ khởi động nhưng không cho hiện lên bản Excel h.Visible = 0; % Visible = 0 là ẩn Visible = 1 là cho nó hiện lên workbook = h.Workbooks.Open( file ); Sheets = h.ActiveWorkBook.Sheets; Sheets.Item(1).Activate; s1=strcat('A',num2str(anhtim1)); % gọi ô nhớ chứa thông tin trong file EXCEL s2=strcat('B',num2str(anhtim1)); s3=strcat('C',num2str(anhtim1)); s4=strcat('D',num2str(anhtim1)); s5=strcat('E',num2str(anhtim1)); h.Range(s1).Select; % Truy xuất thông tin cá nhân của tấm ảnh nhận t1 = h.get('Selection').Value; % dạng trong flie Excel(hoso1. xls) theo đúng tên của h.Range(s2).Select; % bức ảnh mẫu nhận dạng t2 = h.get('Selection').Value; h.Range(s3).Select; t3 = h.get('Selection').Value; h.Range(s4).Select; t4 = h.get('Selection').Value; h.Range(s5).Select; t5 = h.get('Selection').Value; set(handles.ten,'string',t1); %hiện thông tin cá nhân của tấm ảnh nhận dạng set(handles.ns,'string',t2); set(handles.mssv,'string',t3); set(handles.lop,'string',t4); set(handles.quequan,'string',t5); axes(handles.axes3); % Hiện ảnh vừa nhận diện imshow(strcat('hoso\',t3,'.jpg')); workbook.Close(false); % Đóng và thoát chương trình Excel h.Quit; delete(h); end *******Đoạn code tạo cơ sở dữ liệu của chương trình nhận dạng***** function T = taoCSDL1(mau) csdl = dir(mau); soanh = 0; for i = 1:size(csdl,1) if not(strcmp(csdl(i).name,'.')|strcmp(csdl(i).name,'..')|strcmp(csdl(i).name,'Thumbs.db')) soanh = soanh + 1; end end T = []; % tạo ma trận ảnh trong thư mục ảnh mẫu for i = 1 : soanh str = int2str(i); str = strcat('\',str,'.jpg'); str = strcat(mau,str); % Lấy đầy đủ tên của bức ảnh img = imread(str);

Page 113: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

img = rgb2gray(img); [dong cot] = size(img); tam = reshape(img',dong*cot,1); % Biến ảnh thành vector T = [T tam]; % Tăng dần kích thước ma trận ảnh T end *********Đoạn code tính Eigenface trung bình************ function [m, A, E] = taoEF1(T) m = mean(T,2); %Tính toán giá trị ảnh trung bình soanh = size(T,2); %%%%%%%%%%%%%% Tính độ lệch của bức ảnh với gí trị trung bình của ảnh trung bình A = []; for i = 1 : soanh temp = double(T(:,i)) - m; % T(:,i): vector cột thứ i chính là 1 bức A = [A temp]; end L = A'*A; % Tính ma trận A*A’ [V D] = eig(L); % tim các vector riêng và trị riêng %V chứa những vector riêng, còn D chứa những trị riêng trong đó vector riêng V(:,i) ứng với trị riêng D(i,i) D1=diag(D); D1=sort(D1); s=size(D1);s=s(1); D1=D1(s-10); LeigV = []; for i = 1 : size(V,2) if( D(i,i)>D1 ) LeigV = [LeigV V(:,i)]; end end E = A * LeigV; sovector=size(E,2); for i=1:sovector dodai=norm(E(:,i)); E(:,i)=E(:,i)/dodai; end *****Đoạn code nhandien1 của chuong trình nhận dạng khuôn mặt************* function anhtim = nhandien1(anhtest, m, A, E) toado = []; %Tập tọa độ hình chiếu của các bức ảnh trong csdl sovector = size(E,2); %số vector riêng trong E là số for i = 1 : sovector tam = E'*A(:,i); %tọa đô hình chiếu của bức ảnh Ai toado = [toado tam]; end tam = rgb2gray(anhtest); % chuyển ảnh màu thành ảnh trắng đen [dong cot] = size(tam); InImage = reshape(tam',dong*cot,1); dolech = double(InImage)-m; toadoKT = E'*dolech; khoangcach = []; % tính khoảng cách của tấm ảnh so với các ảnh mẫu for i = 1 : sovector % xác định khoảng cách ngắn nhất q = toado(:,i); tam = ( norm( toadoKT - q ) )^2; khoangcach = [khoangcach tam];

Page 114: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

end [minKC , vitri] = min(khoangcach); if minKC<50000000 anhtim=vitri; elseif minKC>50000000 anhtim =100; end %%********Đoạn code liên quan*******%% ******* Đoạn code lưu ảnh********* if s==255 % kiểm tra ảnh chọn lưu có phải là ảnh hay không selection = questdlg(['No la anh trang do ban co luu khong?'],... ['Luu ' 'anh da chon!'],... 'Yes','No','Yes'); %Đưa ra bản thông báo nếu nó lá ảnh trắng if strcmp(selection,'No') % chọn “No” để quay lại chương trình return; elseif strcmp(selection,'Yes') [filename,pathname]=uiputfile('*.jpg','JPEG Files(*.jpg)';... '*.bmp','Bitmap Files(*.bmp)';'*.gif','GIF Files(*.gif)';... '*.tif','TIFF Files(*.tif)';... '*.*','all image file','Luu anh da chon!','anhkq/'); imwrite(s,[pathname,filename]); end else % nếu ảnh lưu không phải là ảnh trắng [filename,pathname]=uiputfile('*.jpg','JPEG Files(*.jpg)';... '*.bmp','Bitmap Files(*.bmp)';'*.gif','GIF Files(*.gif)';... '*.tif','TIFF Files(*.tif)';... %đặt tên và chọn loại ảnh muốn lưu '*.*','all image file','Luu anh da chon!','anhkq/'); %thực hiện lưu ảnh imwrite(s,[pathname,filename]); end ********* Đoạn code chọn ảnh ******* [filename,pathname]=uigetfile('*.jpeg;*.jpg;*.gif;*.tif;*.tiff;*.bmp;*.png',... 'all image file';'*.jpg;*.jpeg','JPEG Files(*.jpg,*.jpeg)';... % chọn đường dẫn nơi chứa ảnh test '*.gif','GIF Files(*.gif)';'*.tif;*.tiff','TIFF Files(*.tif,*.tiff)';... '*.bmp','Bitmap Files(*.bmp)';'*.png','PNG Files(*.png)','Chon anh kiem tra! ','anhtest/1.png'); anhchon=imread([pathname,filename]); % đọc ảnh đã chọn axes(handles.axes1); imshow(anhchon); % hiện ảnh chọn a=strcat('anhluu/anh_goc.jpg'); imwrite(anhchon,a); **********Đoạn code xóa ảnh ******** a=255; % tạo ra ảnh trắng a1=strcat('anhluu/anh_goc.jpg'); imwrite(a,a1); % biến tát cả các ảnh đang hiện thành ảnh trắng a1=strcat('anhluu/anh1.jpg'); imwrite(a,a1); a1=strcat('anhluu/anh2.jpg'); imwrite(a,a1); a1=strcat('anhluu/anh3.jpg'); imwrite(a,a1); a1=strcat('anhluu/anh4.jpg'); imwrite(a,a1); a1=strcat('anhluu/anh_face.jpg'); imwrite(a,a1); a1=strcat('anhluu/anh_kq.jpg'); imwrite(a,a1); a1=strcat('anhluu/anhtest.jpg'); imwrite(a,a1); a1=255; axes(handles.axes1); imshow(a1); % hiện ảnh trắng lên các ô ảnh axes(handles.axes2); imshow(a1); axes(handles.axes3); imshow(a1); axes(handles.axes4); imshow(a1); axes(handles.axes5); imshow(a1);

Page 115: DÒ TÌM VÀ CẮT ẢNH MẶT NGƯỜI DÙNG PCA

Phụ lục

GVHD: Ths. Đào Thị Thu Thủy SVTH: Nguyễn Trung Hiếu Bùi Ngọc Liêm

axes(handles.axes6); imshow(a1); axes(handles.axes7); imshow(a1); set(handles.ten,'string',' '); % xóa các dòng dữ liệu thông tin nhận dạng set(handles.ns,'string',' '); set(handles.mssv,'string',' '); set(handles.lop,'string',' '); set(handles.quequan,'string',' '); ******* Đoạn code thoát******** selection = questdlg(['Close ' get(handles.figure1,'Name') '?'],... % Đưa ra câu hỏi ['Close ' get(handles.figure1,'Name') '...'],... 'Yes','No','Yes'); % tạo bản lựu chọn có hai nút hỏi “Yes”, “No” if strcmp(selection,'No') % nếu chọn “No” quay laị chương trình return; end % Nếu chọn Yes thoát khỏi chương trình delete(handles.figure1)